我正在使用带有 php 5.5.9的 phpredis(基于https://github.com/phpredis/phpredis的 25.02.2016 构建)。使用单个 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 实例相同的服务器上执行此代码时,我们成功获取了所有 master 和 foo1 的值。但是当我们在另一个 webserver 上执行代码时,我们会从集群中获取以下 master:
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 消息“无法与集群中的任何节点通信”。
我不确定这是否是库中的错误,或者我是否以错误的方式使用了库。代码与文档中的相同。我认为一个问题是我们得到了具有本地 IP 而不是远程 IP 的主人。
感谢您的所有帮助。