Redis Sentinel机制与用法
相关视频参考(来自动力节点):https://www.bilibili.com/video/BV1Uz4y1X72A
相关资料下载:https://www.bjpowernode.com/?cnblogs
1. 概述
Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实作自动进行主备切换,而Redis-sentinel本身也是一个独立运行的行程,它能监控多个master-slave集群,发现master宕机后能进行自懂切换,
它的主要功能有以下几点:
- 不时地监控redis是否按照预期良好地运行;
- 如果发现某个redis节点运行出现状况,能够通知另外一个行程(例如它的客户端);
- 能够进行自动切换,当一个master节点不可用时,能够选举出master的多个slave(如果有超过一个slave的话)中的一个来作为新的master,其它的slave节点会将它所追随的master的地址改为被提升为master的slave的新地址,
2. Sentinel支持集群
很显然,只使用单个sentinel行程来监控redis集群是不可靠的,当sentinel行程宕掉后(sentinel本身也有单点问题,single-point-of-failure)整个集群系统将无法按照预期的方式运行,所以有必要将sentinel集群,这样有几个好处:
- 即使有一些sentinel行程宕掉了,依然可以进行redis集群的主备切换;
- 如果只有一个sentinel行程,如果这个行程运行出错,或者是网络堵塞,那么将无法实作redis集群的主备切换(单点问题);
- 如果有多个sentinel,redis的客户端可以随意地连接任意一个sentinel来获得关于redis集群中的信息,
3. Sentinel版本
Sentinel当前最新的稳定版本称为Sentinel 2(与之前的Sentinel 1区分开来),随着redis2.8的安装包一起发行,安装完Redis2.8后,可以在redis2.8/src/里面找到Redis-sentinel的启动程序,
强烈建议:如果你使用的是redis2.6(sentinel版本为sentinel 1),你最好应该使用redis2.8版本的sentinel 2,因为sentinel 1有很多的Bug,已经被官方弃用,所以强烈建议使用redis2.8以及sentinel 2,
4. 运行Sentinel
运行sentinel有两种方式:
第一种
redis-sentinel /path/to/sentinel.conf
第二种
redis-server /path/to/sentinel.conf --sentinel
以上两种方式,都必须指定一个sentinel的组态档sentinel.conf,如果不指定,将无法启动sentinel,sentinel默认监听26379埠,所以运行前必须确定该埠没有被别的行程占用,
5. Sentinel的配置
Redis原始码包中包含了一个sentinel.conf档案作为sentinel的组态档,组态档自带了关于各个配置项的解释,典型的配置项如下所示:
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000 sentinel failover-timeout mymaster 180000 sentinel parallel-syncs mymaster 1 sentinel monitor resque 192.168.1.3 6380 4 sentinel down-after-milliseconds resque 10000 sentinel failover-timeout resque 180000 sentinel parallel-syncs resque 5
上面的配置项配置了两个名字分别为mymaster和resque的master,组态档只需要配置master的信息就好啦,不用配置slave的信息,因为slave能够被自动检测到(master节点会有关于slave的讯息),需要注意的是,组态档在sentinel运行期间是会被动态修改的,例如当发生主备切换时候,组态档中的master会被修改为另外一个slave,这样,之后sentinel如果重启时,就可以根据这个配置来恢复其之前所监控的redis集群的状态,
接下来我们将一行一行地解释上面的配置项:
sentinel monitor mymaster 127.0.0.1 6379 2
这一行代表sentinel监控的master的名字叫做mymaster,地址为127.0.0.1:6379,行尾最后的一个2代表什么意思呢?我们知道,网络是不可靠的,有时候一个sentinel会因为网络堵塞而误以为一个master redis已经死掉了,当sentinel集群式,解决这个问题的方法就变得很简单,只需要多个sentinel互相沟通来确认某个master是否真的死了,这个2代表,当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了,(sentinel集群中各个sentinel也有互相通信,通过gossip协议),
0 评论