省流阅读:
遇到的故障是,redis 集群配置文件损坏导致无法启动
Unrecoverable error: corrupted cluster config file
总结写在前面:
集群的高可用性真的很重要
服务器总会宕机,网络总会故障
昨天周末,本来在家吃着火锅,唱着歌。正开心着,公司的电话来了,说有台服务器故障了,宕机重启了,让我看看有没有影响。
赶紧查了下,是redis集群的服务器,
还好,因为是集群环境,宕机一台并没有影响整个redis服务器的可用性。master节点直接选举漂走了。
而且redis服务都做了supervisor托管,宕机重启会启动redis。
但是查看了下,redis并没有能够启动。
查看redis的日志:显示配置文件损坏。
6305:C 04 Dec 11:44:21.621 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
6305:C 04 Dec 11:44:21.622 # Redis version=4.0.2, bits=64, commit=00000000, modified=0, pid=6305, just started
6305:C 04 Dec 11:44:21.622 # Configuration loaded
6305:M 04 Dec 11:44:21.623 # Unrecoverable error: corrupted cluster config file
因为集群cluster-config-file文件损坏引起,导致该节点无法启动
这里说的cluster-config-file文件 就是指 node-xxxx.conf文件
这里面存的是redis cluster的各个节点信息,也就是cluster nodes命令的结果
所以修改起来也简单:
删除损坏节点的node-xxxx.conf文件
mv node-xxxx.conf node-xxxx.conf.bak
再启动redis节点
redis-server xxxx.conf > xxxx.log 2>&1 &
以为应该完事了,接着奏乐,接着舞
但是
查看cluster nodes
10.138.x.x:6424> cluster nodes
d7f1a01f0552d684f512e4484493c0cc42c21efc 10.138.x.x:6447@16447 master,fail - 1670110148890 1670110146887 3 connected
28d50ee489cb75b8963d310864a5588bf493a0b3 10.138.x.x:6423@16423 master - 0 1670127954000 8 connected 0-5461
403f6048b98a6e979d414aa4a508c0d08cd75fa7 10.138.x.x:6446@16446 master,fail - 1670110150894 1670110147000 5 connected
0d6c3358103ca3ee300ecdd1832bd2fb82dd1219 10.138.x.x:6445@16445 slave,fail 28d50ee489cb75b8963d310864a5588bf493a0b3 1670110149892 1670110146000 8 connected
ae31858c30dbe272a0df53effac632a4fd1aa193 10.138.x.x:6424@16424 myself,master - 0 1670127952000 9 connected 5462-10923
ed891086ecc18d98b3812727c67577cf323c3a1e 10.138.x.x:6425@16425 master - 0 1670127954131 10 connected 10924-16383
原本宕机的master,倒是不见外,仍然认为自己是master,没有变成某个新master的salve。
这个时候我们需要把fail的节点移出集群,再加入集群
将fail节点移出集群
cluster forget d7f1a01f0552d684f512e4484493c0cc42c21efc
加入集群
CLUSTER MEET //将ip和port所指定的节点添加到集群当中,让它成为集群的一份子
指定为master节点的从节点
注意,这个时候是登录之前fail的节点操作
CLUSTER REPLICATE //将当前节点设置为 node_id 指定的节点的从节点
终于好了。