likes
comments
collection
share

2024.6.9 | Redis集群中无法同步节点信息 | cluster meet命令

作者站长头像
站长
· 阅读数 22
今天在尝试搭建Redis集群扩容节点,重新分配哈希槽(Hash Slot)时,遇到新加入Master节点后,节点之间的信息不一致,旧节点无法发现新节点,通过查阅文档使用cluster meet命令解决。

场景

在使用添加节点命令时,并未出现报错

redis-cli --cluster add-node newNodeIp:port oldNodeIp:port

输出:

[OK] All nodes agree about slots configuration.

Check for open slots...

Check slots coverage...

[OK] All 16384 slots covered.

Send CLUSTER MEET to node xxx:xx to make it join the cluster.

[OK] New node added correctly.

但通过两种集群检查命令检查时均发现并未包含新节点相关信息:

redis-cli --cluster check oldNodeIp:port

cluster nodes

而通过新节点运行以上命令时,则发现自身已经包含在其中,并有相关的node ID,且在运行cluster nodes命令时发现输出的结果中,新节点丢失了host信息,因此问题可能出现在节点信息同步时出现了问题。

新节点信息:port@cluster_bus_port 其余正常节点:host:port@@cluster_bus_port

尝试

  • 尝试重新添加该节点进集群时,则出现以下报错,说明新节点已经有相关集群信息,不是一个全新初始化的Redis节点

[ERR] Node ip:port is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

  • 在旧节点中删除新节点,出现以下报错,表示旧节点的节点信息中没有新节点的ID
redis-cli --cluster del-node newNodeIP:port 26779ef554ac2b659a087052099fb73002c78786  

[ERR] No such node ID 26779ef554ac2b659a087052099fb73002c78786

  • 指示节点忘记新节点,但均报错无法识别Node ID:
redis-cli --cluster call oldNodeID:port cluster forget 26779ef554ac2b659a087052099fb73002c78786

node1: ERR Unknown node 26779ef554ac2b659a087052099fb73002c78786 node2: ERR Unknown node 26779ef554ac2b659a087052099fb73002c78786 node3: ERR Unknown node 26779ef554ac2b659a087052099fb73002c78786 node4: ERR Unknown node 26779ef554ac2b659a087052099fb73002c78786

最终解决

通过查询文档,发现了有一个cluster meet命令,可让已知节点强制联系新节点。

官方文档地址:cluster meet

cluter meet newNodeIp:port

在运行了以上命令后,成功将节点联系在一起,并且旧节点使用check命令也能返回包含新节点的集群信息。

转载自:https://juejin.cn/post/7377963940896948250
评论
请登录