概述
在一个集群中,我们经常要考虑它的安全,防止主节点发生宕机,当然,这是无法保障的,不可避免,但是,我们可以做好预防措施,比如在一个集群中,主节点挂掉了,我们要进行迅速转移,将另一台从节点切换为主节点从而预防单点故障,那么,本篇文章将教如何手动进行故障转移,最后使用自动化工具进行自动故障转移。
场景需求:有三台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工具进行自动故障转移。如有转发,请标明原文地址,谢谢!!!
最后
以上就是鳗鱼水杯为你收集整理的使用Redis运维监控工具sentinel进行自动故障转移的全部内容,希望文章能够帮你解决使用Redis运维监控工具sentinel进行自动故障转移所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复