使用Redis运维监控工具sentinel进行自动故障转移

在一个集群中,我们经常要考虑它的安全,防止主节点发生宕机,当然,这是无法保障的,不可避免,但是,我们可以做好预防措施,比如在一个集群中,主节点挂掉了,我们要进行迅速转移,将另一台从节点切换为主节点从而预防单点故障,那么,本篇文章将教如何手动进行故障转移,最后使用自动化工具进行自动故障转移。

场景需求:有三台redis服务器,6379端口的为master,6380,6381端口的为slave,关于如何搭建Redis集群可以查看上一篇文章【redis主从复制【master-slave集群】】,这里,我么假设master宕机,需要切换到另一台slave作为master。

手动进行故障转移

下面是我们需要做的事情:
运行时更改master-slave,修改一台slave(设为A)为new master
1)命令该服务不做其他redis服务的slave
命令: slaveof no one
2)修改其readonly为no

其他的slave再指向new master A
1)命令该服务为new master A的slave
命令格式 slaveof IP port

下面我们来动手操作:
首先我们可以使用info replication命令查看每一台从节点的状态,刚开始它们都是6379的从节点,并且master处于up状态:
这里写图片描述
这里写图片描述

接着,我们使用shutdown命令关闭6379 master来模拟master宕机,怎么进行手动切换呢?

127.0.0.1:6380> slaveof no one
127.0.0.1:6380> config set slave-read-only no
127.0.0.1:6381> slaveof localhost 6380

运行上面命令即可切换成功,结果如下图:
这里写图片描述
这里写图片描述
从上面截图可以看出master发生故障时我们成功的进行了故障转移,可是在实际中我们并不能总是进行手动切换,因为手动切换要话费时间这样数据容易丢失,因此,我们可以使用Redis的运维工具sentinel工具进行自动故障转移。

使用sentinel进行故障转移

sentinel的原理图如下:
这里写图片描述

它的原理是:sentinel时刻与master进行通信,当在一定时间内收不到master的通信消息,就认为master发生了故障,此时它会将一台slave转换为master,将另一台slave的主机指向新的master,sentinel继续监控新的master与它进行通信。

原理很简单,如何使用呢?需要进行配置sentinel.conf文件:

sentinel monitor def_master 127.0.0.1 6379 1
##master被当前sentinel实例认定为“失效”的间隔时间  
##如果当前sentinel与master直接的通讯中,在指定时间内没有响应或者响应错误代码,那么  
##当前sentinel就认为master失效(SDOWN,“主观”失效)  
##<mastername> <millseconds>  
##默认为30秒  
sentinel down-after-milliseconds def_master 30000
#默认超过这个时间认为故障转移失败,需要人工进行故障转移  
sentinel failover-timeout mymaster 180000
##当前sentinel实例是否允许实施“failover”(故障转移)  
##no表示当前sentinel为“观察者”(只参与"投票".不参与实施failover),  
##全局中至少有一个为yes  
sentinel can-failover def_master yes
#一次性修改几个slave指向新的new master,这个参数防止当master宕机后,多个sentinel同时
#一下子指向new master致使new master负载过重
sentinel parallel-syncs mymaster 1 

添加了上面的配置后,就可以启动sentinel了:
如果不知道如何启动,首先可以使用help命令查看:
这里写图片描述
使用下面命令启动sentinel:

redis-server /myredis/sentinel.conf --sentinel

这里写图片描述
如上图所示,启动sentinel之后,它会监控到master有两个slave正在运行,现在我们shutdown使master宕机看看sentinel的变化:
这里写图片描述
这里写图片描述

从上面的截图可以看出来sentinel监控到master发生故障,自动进行了故障转移,不过它是根据slave的优先级来决定那一台slave来作为maste的,我们可以设置优先级来指定,参数的值越小代表优先级越高。

至此,我们已经知道如何自动进行故障转移以及使用sentinel工具进行自动故障转移。如有转发,请标明原文地址,谢谢!!!


猜你喜欢

转载自blog.csdn.net/qq_37142346/article/details/80102180