redis-cluster一台机器宕机后集群不可用

redis-cluster一台机器宕机后集群不可用

部署现状:
测试环境部署4台机器,每台机器上启动5个redis实例,总共20个实例;创建集群,10个主,10个从;

问题呈现:
1.测试过程中,kill掉一台机器,集群正常恢复;
2.kill掉的机器和实例重启后,一切正常;
3.测试进行中,又kill掉了一台机器,此时整个集群一直不可用,没有恢复,且有台机器上的实例一直在报错:Error condition on socket for SYNC: Connection refused;
4.只有起来kill掉的Redis实例后集群才恢复正常。

过程分析:
1.Redis集群通过 redis-trib.rb脚本创建;默认会随机平分所有主从实例,假如ABCD四台机器,AB、CD进行配对,A上3个主对应B上3个从,A上2个从对应B上2个主;这样配置减小了宕机造成的机器不可用性;AB两台机器不同时宕机,CD不会同时宕机,集群就可用。
2.测试过程中,kill掉一台机器,此时被kill掉的机器上的主就会飘到从机器上去,恢复集群可用,但要知道此时有一台机器上会都是主;
3.当宕掉的机器起来后,该机器上的实例都为从;此时状况为一台机器上都是主,一台机器上都是从,其他两台为随机;
4.如果在这种状况下,按常理说宕任何一台机器都是没有问题的,当偏偏都是主的那台机器被kill掉了,整个集群不可用了,why?
5.主挂了,可以飘到从啊,从没有飘成功?是,从报错了,没有飘成功,整个集群不可用;
6.主要原因是宕掉的机器上包含了一半主,造成剩下的一半主没有投票成功,整个集群没有正式确认挂掉的主真正挂了;
7.如果此时宕掉的是其他任何一台机器都没有问题;

注意:
建议集群搭建为6台机器,这样不会造成一半主飘到同一台机器上,从而避免挂掉一台机器,整个集群就不可用。

下面是从节点疯狂报的错:

6409:S 03 Jul 15:50:56.330 * Connecting to MASTER 192.168.45.123:7002
6409:S 03 Jul 15:50:56.331 * MASTER <-> SLAVE sync started
6409:S 03 Jul 15:50:56.331 # Error condition on socket for SYNC: Connection refused

从网上查询说是配置文件中 bind配置问题,各种尝试后都没有解决掉,后来才明白;
只怪自己对Redis的failover原理理解不透彻,其他事原理中已经说明了,要fail掉一个主需要一半以上主都投票通过才可以

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值