省流阅读:
遇到的故障是,redis 集群配置文件损坏导致无法启动
1 | Unrecoverable error: corrupted cluster config file |
总结写在前面:
集群的高可用性真的很重要
服务器总会宕机,网络总会故障
昨天周末,本来在家吃着火锅,唱着歌。正开心着,公司的电话来了,说有台服务器故障了,宕机重启了,让我看看有没有影响。
赶紧查了下,是redis集群的服务器,
还好,因为是集群环境,宕机一台并没有影响整个redis服务器的可用性。master节点直接选举漂走了。
而且redis服务都做了supervisor托管,宕机重启会启动redis。
但是查看了下,redis并没有能够启动。
查看redis的日志:显示配置文件损坏。
1 | 6305:C 04 Dec 11:44:21.621 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo |
因为集群cluster-config-file文件损坏引起,导致该节点无法启动
这里说的cluster-config-file文件 就是指 node-xxxx.conf文件
这里面存的是redis cluster的各个节点信息,也就是cluster nodes命令的结果
所以修改起来也简单:
删除损坏节点的node-xxxx.conf文件
1 | mv node-xxxx.conf node-xxxx.conf.bak |
再启动redis节点
1 | redis-server xxxx.conf > xxxx.log 2>&1 & |
绝对路径启动
1 | /opt/cachecloud/redis/src/redis-server /opt/cachecloud/conf/redis-cluster-6384.conf > /opt/cachecloud/logs/redis-6384-20231109.log 2>&1 & |
以为应该完事了,接着奏乐,接着舞
但是
查看cluster nodes
1 | 1x.xx.x.x:6424> cluster nodes |
原本宕机的master,倒是不见外,仍然认为自己是master,没有变成某个新master的salve。
这个时候我们需要把fail的节点移出集群,再加入集群
将fail节点移出集群
1 | cluster forget d7f1a01f0552d684f512e4484493c0cc42c21efc |
加入集群
1 | CLUSTER MEET <ip> <port> //将ip和port所指定的节点添加到集群当中,让它成为集群的一份子 |
指定为master节点的从节点
注意,这个时候是登录之前fail的节点操作
1 | CLUSTER REPLICATE <node_id> //将当前节点设置为 node_id 指定的节点的从节点 |
终于好了。