Redis数据库监控之sentinel

作者:吴泽鑫 分类: Redis 发布于:2016-4-16 23:45 ė4199次浏览 60条评论

在数据库架构中,使用一主多从的时候,如果master挂了,那么整个业务都跑不动,出现单点的情况。那么要不的做法是把其中一台slave作为master,然后再让其他slave作为这台新master的slave,让数据正常跑下去。

例如:现在redis数据库有三个实例,如下

端口    master/slave

6379    master

6380    slave

6381    slave

假设现在master挂了,要操作的命令如下:

1: 先把其中一台slave变为master,假设是6380,命令:slaveof no one ,再修改 slave-read-only为no

2: 其他的 slave都指向新的master,命令: slaveof 127.0.0.1 6380

这样就完成了一次master故障切换,但是这个操作过程是否可以通过监控来实现呢?当然可以,下面讲下sentinel的redis服务监控。

首先从redis安装包目录下拷贝sentinel.conf,进行修改,主要有以下几个配置:

##sentinel实例之间的通讯端口
##redis-0
port 26379
##sentinel需要监控的master信息:<mastername> <masterIP> <masterPort> <quorum>
##<quorum>应该小于集群中slave的个数,只有当至少<quorum>个sentinel实例提交"master失效"
##才会认为master为O_DWON("客观"失效)
sentinel monitor def_master 127.0.0.1 6379 2
sentinel auth-pass def_master 012_345^678-90
##master被当前sentinel实例认定为“失效”的间隔时间
##如果当前sentinel与master直接的通讯中,在指定时间内没有响应或者响应错误代码,那么
##当前sentinel就认为master失效(SDOWN,“主观”失效)
##<mastername> <millseconds>
##默认为30秒
sentinel down-after-milliseconds def_master 30000
##当前sentinel实例是否允许实施“failover”(故障转移)
##no表示当前sentinel为“观察者”(只参与"投票".不参与实施failover),
##全局中至少有一个为yes
sentinel can-failover def_master yes
##当新master产生时,同时进行“slaveof”到新master并进行“SYNC”的slave个数。
##默认为1,建议保持默认值
##在salve执行salveof与同步时,将会终止客户端请求。
##此值较大,意味着“集群”终止客户端请求的时间总和和较大。
##此值较小,意味着“集群”在故障转移期间,多个salve向客户端提供服务时仍然使用旧数据。
sentinel parallel-syncs def_master 1
##failover过期时间,当failover开始后,在此时间内仍然没有触发任何failover操作,
##当前sentinel将会认为此次failoer失败。
sentinel failover-timeout def_master 900000
##当failover时,可以指定一个“通知”脚本用来告知系统管理员,当前集群的情况。
##脚本被允许执行的最大时间为60秒,如果超时,脚本将会被终止(KILL)
##脚本执行的结果:
## 1 -> 稍后重试,最大重试次数为10;
## 2 -> 执行结束,无需重试
##sentinel notification-script mymaster /var/redis/notify.sh
##failover之后重配置客户端,执行脚本时会传递大量参数,请参考相关文档
# sentinel client-reconfig-script <master-name> <script-path>

启动方式:

 redis-server ./sentinel.conf --sentinel

ps:如果master挂了,sentinel会自动切换新的slave为master,当旧的master重启后,这时就会自动变成slave

本文出自 Jensen-吴泽鑫的博客,转载时请注明出处及相应链接:http://www.wuzexin.cn/post-64.html

发表评论

电子邮件地址不会被公开。必填项已用*标注


Ɣ回顶部