如果初始连接的集群节点死亡,ioredis 客户端能否继续工作?

Can ioredis client continue working if a cluster node from the initial connection dies?

当使用 ioredis (https://github.com/luin/ioredis) 连接到 redis 集群时,您只需要指定一个节点,例如三节点集群

127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002

您可以简单地连接:

new Redis.Cluster([{
  port: 7000,
  host: '127.0.0.1'
}])

如果 :7000 节点死了,而您将其替换为不同的节点,则执行如下操作:

redis-trib.rb call 127.0.0.1:7001 cluster forget [node_id of :7000]
redis-trib.rb add-node 127.0.0.1:7003 127.0.0.1:7001
redis-trib.rb fix 127.0.0.1:7001

ioredis 是否能够继续工作(接受来自 :7000 的数据丢失),它是否需要能够再次联系 127.0.0.1:7000 还是仅用于初始连接?

从我的实验来看,这种情况似乎确实有效,我的问题的答案是肯定的,但我想检查一下这是否是预期的和受支持的情况。

当连接到集群时,ioredis 会向:7000 询问集群的节点列表,之后ioredis 就能够发现新节点并处理故障转移。因此,如果 :7000 在 节点列表被获取后 死亡,答案是肯定的。