连接到非本地的redis群集时,使用phpredis进行RedisClusterException

时间:2016-02-24 10:48:22

标签: php redis phpredis

我正在使用phpredis(由https://github.com/phpredis/phpredis建立于2016年2月25日)和php 5.5.9。使用单个redis实例(版本3.0.7)(远程和本地redis实例)成功测试扩展。

这是连接到已配置的redis群集的代码(没有哨兵,只有配置)。

$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的值。但是当我们在另一个Web服务器上执行代码时,我们从集群中获得以下主服务器:

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并且消息“无法与群集中的任何节点通信”获取该值将失败。

我不确定它是否是libary中的错误,或者我是否以错误的方式使用了lib。代码与文档中的相同。我认为一个问题是我们使用localhost ip获取主服务器而不是远程ip。

感谢您的所有帮助。

1 个答案:

答案 0 :(得分: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

如果有人遇到类似的问题,请提供信息。