娃哈哈好喝-真的!
技术够用就行,吃好喝好睡好!

redis集群故障修复

redis集群故障修复

集群故障原因有:

(1)master节点能启动,但是master节点的IP变化了,集群还是根据旧的IP去连接节点,导致集群不能自愈。

(2)master节点某种原因不能启动,slave节点坏掉,有部分槽位slot丢失

(3)master节点因为网络原因不能连接,部分分片丢失,有部分槽位slot丢失

修复步骤:

1.把dump.rdb或者appendonly.aof文件拷贝出来,目的是先恢复redis节点数据, 如果数据能恢复,可能不需要fix修复命令,集群就可能恢复。

2.连接任一集群可用节点,cluster forget掉故障节点。可以使用call命令,例如连接172.20.20.231这个节点:

[root@centos redis]# redis-cli --cluster call 172.20.20.231:6379  cluster forget <node_id>

node_id可以通过cluster nodes查看

127.0.0.1:6379> cluster nodes
1d1731591dcb0818c312787f3f6cf60a8f0eeb93 172.20.20.235:6379@16379 master - 0 1669048747865 7 connected 0-5460
ad4cc6600fd0cdef45f82674db440f4b8586210c 172.20.20.231:6379@16379 myself,slave 1d1731591dcb0818c312787f3f6cf60a8f0eeb93 0 1669048746000 7 connected
bd110bc4ee40dc387c4c4e80d7dbeb5663886ffd 172.20.20.233:6379@16379 master - 0 1669048745858 3 connected 10923-16383
8fefbff6233465acad82627cd4ae52632903f91d 172.20.20.236:6379@16379 slave - 0 1669048746862 2 connected
568a869ae9c1712c944a0811923e198a7534395d 172.20.20.234:6379@16379 slave bd110bc4ee40dc387c4c4e80d7dbeb5663886ffd 0 1669048748869 3 connected
127.0.0.1:6379>

3.添加被删除的节点,使用meet命令:172.20.20.232为刚才删除的故障节点,这里再加回来

[root@centos redis]# redis-cli -a sxlfybb --cluster call 172.20.20.231:6379 cluster meet 172.20.20.232 6379

查看集群信息是否一致

[root@centos redis]# redis-cli  --cluster call 172.20.20.231:6379   cluster  nodes 
[root@centos redis]# redis-cli --cluster check 172.20.20.231:6379

也可以使用add-node来添加节点

[root@centos redis]# redis-cli --cluster 172.20.20.231:6379 add-node 172.20.20.232:6379

4.fix修复节点

[root@centos redis]# redis-cli --cluster fix 172.20.20.231:6379

【注意】fix修复命令,不仅可以自动删除disconnected的节点,而且会迁移没有分配的slots到正常节点,可以使集群状态fail转变为ok。我之所以手动先给集群增加一个节点,手动删除有故障节点,然后fix修复命令,fix是会迁移的slots,需要代价的,fix完成后,还需要再平衡rebalance集群。

5.平衡集群

[root@centos redis]# redis-cli --cluster rebalance --cluster-use-empty-masters --cluster-pipeline 1000 --cluster-simulate 172.20.20.231:6379

参数说明:

–cluster-weight <node1=w1…nodeN=wN> # 指定集群节点的权重

–cluster-use-empty-masters # 设置可以让没有分配slot的主节点参与,默认不允许

–cluster-timeout <arg> # 设置migrate命令的超时时间

–cluster-simulate # 模拟rebalance操作,不会真正执行迁移操作

–cluster-pipeline <arg> # 定义cluster getkeysinslot命令一次取出的key数量,默认值为10

–cluster-threshold <arg> # 迁移的slot阈值超过threshold,执行rebalance操作

–cluster-replace # 是否直接replace到目标节点

6.保存配置

[root@centos redis]# redis-cli --cluster call 172.20.20.231:6379 cluster saveconfig
赞(0)
未经允许不得转载:娃哈哈好喝 » redis集群故障修复
分享到: 更多 (0)