【问题标题】:RedisClusterException with phpredis when connecting to redis cluster which is not local连接到非本地的 redis 集群时,带有 phpredis 的 RedisClusterException
【发布时间】:2016-06-06 14:44:51
【问题描述】:

我正在使用带有 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 消息“无法与集群中的任何节点通信”。

我不确定这是库中的错误还是我以错误的方式使用库。代码与文档中的相同。我认为一个问题是我们使用 localhost ip 而不是远程 ip 获得主人。

感谢您的所有帮助。

【问题讨论】:

    标签: php redis phpredis


    【解决方案1】:

    终于找到问题所在了。 客户端库中什么都没有,只是集群配置错误。

    使用文档中的以下 sn-p 进行创建:

    ./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
    

    如果有人遇到类似问题,仅供参考。

    【讨论】:

    • 谢谢你,我正在使用 Predis 但遇到了同样的问题!
    猜你喜欢
    • 2023-04-01
    • 2018-01-22
    • 2021-03-26
    • 2019-02-01
    • 2019-06-15
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多