我使用phpredis(2016年2月25日从https://github.com/phpredis/phpredis开始构建)和php 5.5.9。使用单个redis实例(3.0.7版)(远程和本地redis实例)成功地测试了扩展。
这是连接到已配置的redis集群的代码(没有sentinel,仅在configs上)。
$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实例相同的服务器上执行这段代码时,我们成功地获得了所有master和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中的一个bug还是我用错了lib。与文档中的代码相同。我认为一个问题是我们用本地主机IP而不是远程IP来获取主服务器。
谢谢你的帮助。
最佳答案
终于发现问题出在哪里了。在客户端库中什么都没有,只是集群配置中的一个错误。
为了创建文档,使用了以下代码段:
./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
如果有人有类似的问题,只是为了提供信息。