mysql 哨兵模式_redis经典模式3节点哨兵配置的一些坑

本文介绍了在Redis 4.0.10版本中,哨兵模式配置不当导致的故障转移问题。当主节点宕机时,由于rename-command配置,哨兵无法完成故障转移,出现`failover-abort-slave-timeout`错误。另外,配置`sentinel monitor`的quorum值为1也会引发脑裂问题,不进行正确的主节点选举。通过调整配置和理解哨兵的选举逻辑,可以避免这些故障。
摘要由CSDN通过智能技术生成

一、故障描述

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日志来查看下

b563a00e3e031ee49268aef0c46bf686.png

可以看到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

把环境搭建好模拟主节点宕机,看到并没有进行正常故障转移,日志如下:

b563a00e3e031ee49268aef0c46bf686.png看关键日志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/,如需转载,请注明出处,否则将追究法律责任。

本文由 @黄飞黄 发布于 职涯宝 ,未经作者许可,禁止转载,欢迎您分享文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值