您的位置:首页 > 数据库 > Redis

Redis Sentinel 工作原理和配置文件详解

2016-04-13 10:19 357 查看

Redis-sentinel的三大功能:监测、通知、自动故障恢复。

首先Redis-sentinel要建立一个监控的master列表,然后针对master列表的每个master获取监控其的sentinels和slaves供以后故障恢复使用。


自动发现sentinel和slave

一个sentinel实例的监控master在配置文件中指定,如sentinelA在配置文件中指定管理的master ip:port列表,并且指定连接失败超时的时间和是否可以故障恢复等参数。这样,sentinel A就建立了监控的master列表。



第1行,指定sentinel使用的端口

第2行,指定sentinel使用后台运行

第3行,指定sentinel运行后的log文件

第5行,显示监控master节点192.168.132.8,master节点使用端口9934,最后一个数字表示投选需要的"最少法定人数",比如有5个sentinal哨兵都在监控某一个master节点,如果需要至少3个哨兵发现master挂掉后,才认为master真正down掉,那么这里就配置为3

第6行,表示如果1s内CATS_9934没响应,就认为SDOWN

第8行,表示如果2秒后, CATS_9934仍没活过来,则启动failover,从剩下的slave中选一个升级为master

第7行,表示如果master重新选出来后,其它slave节点能同时并行从新master同步缓存的台数有多少个,显然该值越大,所有slave节点完成同步切换的整体速度越快,但如果此时正好有人在访问这些slave,可能造成读取失败,影响面会更广。最保定的设置为1,只同一时间,只能有一台干这件事,这样其它slave还能继续服务,但是所有slave全部完成缓存更新同步的进程将变慢

sentinel A作为客户端建立对其监控master 1的pub/sub连接和命令传输连接,pub/sub连接的目的是通过消息传递来获取监控master 1的所有sentinels,具体方式是订阅”sentinel:hello”频道,并这个频道publish 自己的host信息,这样,所有监控master 1的sentinels都通过订阅master 1的“sentinel:hello”频道来获取其他sentinels的信息。sentinel A就建立了master 1的sentinels列表。 sentinel A还通过间断的info命令获取master 1的slaves列表,如果连接超时或者失败,就会进入故障处理的例程。


故障恢复准备

Redis-sentinel定义了故障的master两种状态,O_DOWN(objectively)和S_DOWN(subobjectively)。当sentinel A连接master 1失败后,sentinel A认定master 1为subobjectively状态,然后sentinel A查看监控master 1的sentinels的认定情况。因为sentinel之间会建立连接并且不断的发起info命令询问和回应,因此在sentinel A认定master 1 S_DOWN后,sentinel A通过SENTINEL IS-MASTER-DOWN-BY-ADDR命令来不断获得其他sentinel的认定情况,如果有超过quorum(配置中指定)个sentinel认定master 1已经DOWN,那么就确定master 1为O_DOWN。然后sentinel A必须有master 1的can failover权限,这也是配置文件指定的。接着,sentinel A需要得知master 1的leader sentinel,由leader来进行master 1的错误恢复。

master 1的leader sentinel由选举产生,每个监控master 1的,并且具有错误恢复权限的sentinel都需要进行一次叫做subjective leader判断,也就是sentinel自己认定的leader,然后sentinel之间通过SENTINEL IS-MASTER-DOWN-BY-ADDR命令交流leader的认定情况,然后最终得到一个共识。然后由这个master 1的leader sentinel来启动错误恢复例程。


故障处理

sentinel A作为master 1的leader,会选取一个master 1的slave作为新的master。

然后发送命令slaveof no one来取消slave 1的slave状态来转换为master。当其他sentinel观察到该slave成为master后,就知道错误处理例程启动了。sentinelA然后发送给其他slave slaveof new-slave-ip-port 命令,当所有slave都配置完后,sentinelA从监测的masters列表中删除故障master,然后通知其他sentinels。


转载于:https://my.oschina.net/honglongwei/blog/657848

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: