2016-02-24 31 views
0

我使用phpredis(在25.02.2016从https://github.com/phpredis/phpredis builded)与PHP 5.5.9。使用单个redis实例(版本3.0.7)(远程和本地redis实例)成功测试该扩展。RedisClusterException与连接到redis集群时不是本地的phpredis

这是连接到配置的redis集群的代码(没有sentinel,只通过配置)。

$cluster = new \RedisCluster(NULL, 
     array("192.168.127.203:7000", "192.168.127.203:7001", "192.168.127.203:7002")); 
$cluster->setOption(RedisCluster::OPT_SLAVE_FAILOVER, RedisCluster::FAILOVER_ERROR); 
var_dump($cluster->_masters()); 
var_dump($cluster->get('foo1')); 

当我们在与redis实例相同的服务器上执行此代码时,我们成功获取所有主设备和foo1的值。但是,当我们在另一个网站服务器执行的代码,我们得到以下的主人从群集:

array (size=3) 
    0 => 
    array (size=2) 
     0 => string '127.0.0.1' (length=9) 
     1 => int 7005 
    1 => 
    array (size=2) 
     0 => string '127.0.0.1' (length=9) 
     1 => int 7000 
    2 => 
    array (size=2) 
     0 => string '127.0.0.1' (length=9) 
     1 => int 7001 

和所获得的价值将无法与该消息的RedisClusterException“不能与集群中的任何节点进行通信” 。

我不确定这是否是库中的错误,或者如果我以错误的方式使用lib。代码与文档中的代码相同。我认为一个问题是,我们得到的主机与本地IP而不是远程IP。

感谢您的帮助。

回答

2

终于找出问题所在。 它在客户端库文件中没有任何内容,只是集群配置中存在错误。

创造用于从文档下面的代码片段:

./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 \ 
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 
当然

正确命令是:

./redis-trib.rb create --replicas 1 192.168.127.203:7000 192.168.127.203:7001 \ 
192.168.127.203:7002 192.168.127.203:7003 192.168.127.203:7004 192.168.127.203:7005 

只是信息,如果有人有类似的问题。

+0

谢谢你,我正在使用Predis,但遭受同样的问题! – dwjv