一、故障描述
redis版本:redis_version:4.0.10
操心系统:centos7.5
redis拓扑结构:三个主机,每个主机一个redis和sentinel.redis是主从模式。
故障描述:假如redis主节点宕机,剩余2个从节点不能正常进行故障转移。
哨兵日志错误:failover-abort-slave-timeout ,failover-abort-no-good-slave
二、 结论
(1)
redis_version:4.0.10
版本,使用了rename命令进行了更改config命令,
假如其中主机节点宕机,会发生
failover-abort-slave-timeout错误,sentinel不能成功进行故障转移。
(2) 3节点哨兵模式下,sentinel 配置为
sentinel monitor ,其中quorum配置为1,假如其中主机节点宕机,会发生脑裂,sentinel不能进行成功选主。
三、模拟故障1
本机三个主机节点192.168.1.134,192.168.3.141,192.168.3.142,每个节点一个哨兵,一个redis, redis配置加上下面命令:
# security
rename-command BGREWRITEAOF "CHAOSBGREWRITEAOF"
rename-command BGSAVE "CHAOSBGSAVE"
rename-command CONFIG "CHAOSCONFIG"
模拟故障主节点宕机,剩余2个sentinel应该要进行故障转移,把剩余的其中一个redis节点提升为主节点。
拿下sentinel日志来查看下
可以看到sentinel已经发现主机节点192.168.3.134已经宕机不可达,已经进行选主,然后进行切换,最终切换不成功。
+failover-state-sen-slaveof-noone”: Leader向slave发送“slaveof no one”指令,此时slave已经完成角色转换,此slave即为master,看关键字failover-abort-slave-timeout. 原因已经查询出来:为了安全的原因,改写了命令,本来redis的命令是CONFIG,被改为CHAOSCONFIG。
# security
#rename-command BGREWRITEAOF "CHAOSBGREWRITEAOF"
#rename-command BGSAVE "CHAOSBGSAVE"
#rename-command CONFIG "CHAOSCONFIG"
把这个命令注销掉就不会发生
failover-abort-slave-timeout错误了。
四、模拟故障2
本机三个主机节点192.168.1.134,192.168.3.141,192.168.3.142,每个节点一个哨兵,一个redis。注意一下哨兵配置如下:
[root@elk1 ~]# cat /opt/redis_lifekh/sentinel/sentinel.conf
bind 192.168.3.134
protected-mode yes
port 7111
dir "/opt/redis_lifekh/sentinel"
daemonize yes
logfile "/log/redis_lifekh/6379/sentinel-7111.log"
sentinel myid fe521155a801ac9199f3a8e9d27301edc7d2aab8
sentinel monitor mymaster 192.168.3.142 6379 1
注意配置1
sentinel monitor ,
代表要判定主节点最终不可达所需要的票数。也就是说只有1票,sentinel发现redis没有心跳,就会从主观下线sdown变成客观下线odown,接着sentinel就可以进行sentinel的选主。
sentinel monitor mymaster 192.168.3.142 6379 1
redis配置如下
[root@elk1 ~]# cat /opt/redis_lifekh/sentinel/redis.conf
bind 192.168.3.134
protected-mode yes
port 6379
tcp-backlog 511
timeout 60
tcp-keepalive 300
daemonize yes
supervised no
pidfile "/data/redis_lifekh/6379/redis-6379.pid"
loglevel notice
logfile "/log/redis_lifekh/6379/redis-6379.log"
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
slaveof 192.168.3.134
把环境搭建好模拟主节点宕机,看到并没有进行正常故障转移,日志如下:
看关键日志failover-abort-no-good-slave
五、总结
以上2个故障可以重现。注意的哨兵的
quorum配置不正确,会导致脑裂发生,导致不能正常进行选主。3
个sentinel,quorum配置为2,5个sentinel,
quorum配置为3。
参考:
https://www.cnblogs.com/myd620/p/7811156.html
Raft协议实战之Redis Sentinel的选举Leader源码解析
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30393770/viewspace-2706857/,如需转载,请注明出处,否则将追究法律责任。
本文由 @黄飞黄 发布于 职涯宝 ,未经作者许可,禁止转载,欢迎您分享文章