哨兵机制

在前面讲的master/slave模式,在一个典型的一主多从的系统中,slave在整个体系中起到了数据冗余备份和读写分离的作用。
当master遇到异常终端后,需要从slave中选举一个新的master继续对外提供服务,这种机制在前面提到过N次,比如在zk中通过leader选举、kafka中可以基于zk的节点实现master选举。
所以在redis中也需要一种机制去实现master的决策,redis并没有提供自动master选举功能,而是需要借助一个哨兵来进行监控

什么是哨兵

顾名思义,哨兵的作用就是监控Redis系统的运行状况,它的功能包括两个
\1. 监控master和slave是否正常运行
\2. master出现故障时自动将slave数据库升级为master
哨兵是一个独立的进程,使用哨兵后的架构图

为了解决master选举问题,又引出了一个单点问题,也就是哨兵的可用性如何解决,在一个一主多从的Redis系统中,可以使用多个哨兵进行监控任务以保证系统足够稳定。
此时哨兵不仅会监控master和slave,同时还会互相监控;这种方式称为哨兵集群,哨兵集群需要解决故障发现、和master决策的协商机制问题

sentinel之间的相互感知
sentinel节点之间会因为共同监视同一个master从而产生了关联,一个新加入的sentinel节点需要和其他监视相同master节点的sentinel相互感知,首先
\1. 需要相互感知的sentinel都向他们共同监视的master节点订阅channel:sentinel:hello
\2. 新加入的sentinel节点向这个channel发布一条消息,包含自己本身的信息,这样订阅了这个channel的sentinel就可以发现这个新的sentinel
\3. 新加入得sentinel和其他sentinel节点建立长连接

master的故障发现
sentinel节点会定期向master节点发送心跳包来判断存活状态,一旦master节点没有正确响应,sentinel会把master设置为“主观不可用状态”,然后它会把“主观不可用”发送给其他所有的sentinel节点去确认,
当确认的sentinel节点数大于>quorum时,则会认为master是“客观不可用”,接着就开始进入选举新的master流程;但是这里又会遇到一个问题,就是sentinel中,
本身是一个集群,如果多个节点同时发现master节点达到客观不可用状态,那谁来决策选择哪个节点作为maste呢?这个时候就需要从sentinel集群中选择一个leader来做决策。
而这里用到了一致性算法Raft算法、它和Paxos算法类似,都是分布式一致性算法。但是它比Paxos算法要更容易理解;Raft和Paxos算法一样,也是基于投票算法,只要保证过半数节点通过提议即可;

注意:sentinel需要访问所有的主从redis节点,所以确保所有的redis.config中bind变成0.0.0.0,即允许其他机器访问
动画演示地址:http://thesecretlivesofdata.com/raft/

配置实现
通过在这个配置的基础上增加哨兵机制。(在redis目录下有当前集成的sentinel配置)

在其中任意一台服务器上创建一个sentinel.conf文件,文件内容
sentinel monitor name ip port quorum
其中name表示要监控的master的名字,这个名字是自己定义。 ip和port表示master的ip和端口号。 最后一个1表示最低通过票数,也就是说至少需要几个哨兵节点统一才可以,后面会具体讲解

sentinel monitor mymaster 192.168.25.129 6379 2
sentinel down-after-milliseconds mymaster 5000 --表示如果5s内mymaster没响应,就认为SDOWN
sentinel failover-timeout mymaster 15000 --表示如果15秒后,mysater仍没活过来,则启动failover,从剩下的slave中选一个升级为master
分别修改server1、server2、server3的sentinel.conf,然后分别启动哨兵
两种方式启动哨兵

[root@localhost redis]# ./bin/redis-sentinel sentinel.conf

redis-server /path/to/sentinel.conf --sentinel
哨兵监控一个系统时,只需要配置监控master即可,哨兵会自动发现所有slave;
这时候,我们把master关闭,等待指定时间后(默认是30秒),会自动进行切换,会输出如下消息
img
+sdown表示哨兵主管认为master已经停止服务了,+odown表示哨兵客观认为master停止服务了。关于主观和客观,后面会给大家讲解。接着哨兵开始进行故障恢复,挑选一个slave升级为master

+try-failover表示哨兵开始进行故障恢复
+failover-end 表示哨兵完成故障恢复
+slave表示列出新的master和slave服务器,我们仍然可以看到已经停掉的master,哨兵并没有清除已停止的服务的实例,这是因为已经停止的服务器有可能会在某个时间进行恢复,恢复以后会以slave角色加入到整个集群中

连接sentinel哨兵,查看哨兵信息

 info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.25.129:6379,slaves=2,sentinels=4

 查看当前redis主从服务

  

[root@localhost redis]# ./bin/redis-cli
127.0.0.1:6379> info reapplication
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.25.131,port=6379,state=online,offset=11719,lag=1
slave1:ip=192.168.25.130,port=6379,state=online,offset=11719,lag=1
master_repl_offset:11862
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:11861

  关闭主节点,sentinel会投票选举新主节点,一开始选举192.128.25.131为主节点,但是失败了。最后选举了192.128.25.130为主节点

9632:X 04 May 06:44:06.942 # +sdown master mymaster 192.168.25.129 6379
9632:X 04 May 06:44:06.997 # +odown master mymaster 192.168.25.129 6379 #quorum 3/2
9632:X 04 May 06:44:06.997 # +new-epoch 1
9632:X 04 May 06:44:06.997 # +try-failover master mymaster 192.168.25.129 6379
9632:X 04 May 06:44:06.999 # +vote-for-leader c57b1466c79d692dc33e01e27ba504a4895d872e 1
9632:X 04 May 06:44:06.999 # c57b1466c79d692dc33e01e27ba504a4895d872e voted for c57b1466c79d692dc33e01e27ba504a4895d872e 1
9632:X 04 May 06:44:06.999 # 9a13868360164c0c7ebbf1f598bd8dcd81f078c7 voted for c57b1466c79d692dc33e01e27ba504a4895d872e 1
9632:X 04 May 06:44:07.063 # +elected-leader master mymaster 192.168.25.129 6379
9632:X 04 May 06:44:07.063 # +failover-state-select-slave master mymaster 192.168.25.129 6379
9632:X 04 May 06:44:07.122 # +selected-slave slave 192.168.25.130:6379 192.168.25.130 6379 @ mymaster 192.168.25.129 6379
9632:X 04 May 06:44:07.122 * +failover-state-send-slaveof-noone slave 192.168.25.130:6379 192.168.25.130 6379 @ mymaster 192.168.25.129 6379
9632:X 04 May 06:44:07.180 * +failover-state-wait-promotion slave 192.168.25.130:6379 192.168.25.130 6379 @ mymaster 192.168.25.129 6379
9632:X 04 May 06:44:07.395 # +new-epoch 2
9632:X 04 May 06:44:07.395 # +config-update-from sentinel 7592b0773d9f362a6f0f9eecb046e63b84825d2d 192.168.25.129 26379 @ mymaster 192.168.25.129 6379
9632:X 04 May 06:44:07.395 # +switch-master mymaster 192.168.25.129 6379 192.168.25.131 6379
9632:X 04 May 06:44:07.396 * +slave slave 192.168.25.130:6379 192.168.25.130 6379 @ mymaster 192.168.25.131 6379
9632:X 04 May 06:44:07.396 * +slave slave 192.168.25.129:6379 192.168.25.129 6379 @ mymaster 192.168.25.131 6379
9632:X 04 May 06:44:08.387 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:09.414 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:10.523 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:11.464 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:11.902 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:13.498 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:13.957 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:15.501 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:16.020 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:17.508 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:18.031 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:19.571 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:20.123 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:21.602 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:22.199 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:23.624 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:24.261 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:25.647 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:26.310 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:27.663 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:28.354 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:29.764 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:30.443 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:31.825 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:32.532 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:33.855 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:34.581 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:35.930 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:36.641 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:37.451 # +sdown slave 192.168.25.129:6379 192.168.25.129 6379 @ mymaster 192.168.25.131 6379
9632:X 04 May 06:44:38.029 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:38.736 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:40.048 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:40.821 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:42.133 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:42.824 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:44.222 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:44.885 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:46.267 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:47.020 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:48.434 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:49.074 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:50.517 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:51.146 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:52.632 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:53.273 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:54.679 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:55.303 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:56.740 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:57.399 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:58.871 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:44:59.427 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:00.950 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:01.536 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:02.984 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:03.623 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:05.043 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:05.660 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:07.143 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:07.710 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:08.021 # +sdown master mymaster 192.168.25.131 6379
9632:X 04 May 06:45:08.123 # +odown master mymaster 192.168.25.131 6379 #quorum 2/2
9632:X 04 May 06:45:08.123 # +new-epoch 3
9632:X 04 May 06:45:08.123 # +try-failover master mymaster 192.168.25.131 6379
9632:X 04 May 06:45:08.125 # +vote-for-leader c57b1466c79d692dc33e01e27ba504a4895d872e 3
9632:X 04 May 06:45:08.125 # c57b1466c79d692dc33e01e27ba504a4895d872e voted for c57b1466c79d692dc33e01e27ba504a4895d872e 3
9632:X 04 May 06:45:09.162 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:09.713 * +sentinel-address-switch master mymaster 192.168.25.131 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:10.446 # +new-epoch 4
9632:X 04 May 06:45:10.446 # +config-update-from sentinel 7592b0773d9f362a6f0f9eecb046e63b84825d2d 192.168.25.129 26379 @ mymaster 192.168.25.131 6379
9632:X 04 May 06:45:10.446 # +switch-master mymaster 192.168.25.131 6379 192.168.25.130 6379
9632:X 04 May 06:45:10.446 * +slave slave 192.168.25.129:6379 192.168.25.129 6379 @ mymaster 192.168.25.130 6379
9632:X 04 May 06:45:10.446 * +slave slave 192.168.25.131:6379 192.168.25.131 6379 @ mymaster 192.168.25.130 6379
9632:X 04 May 06:45:12.507 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:12.632 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:14.512 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:14.758 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:16.573 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:16.874 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:18.634 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:19.005 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:20.639 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:21.041 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:22.700 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:23.048 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:24.746 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:25.113 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:26.844 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:27.187 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:28.901 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:29.252 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:30.918 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:31.289 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:32.934 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:33.332 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:34.949 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:35.386 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:37.002 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:37.401 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:39.039 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:39.415 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:40.465 # +sdown slave 192.168.25.129:6379 192.168.25.129 6379 @ mymaster 192.168.25.130 6379
9632:X 04 May 06:45:41.113 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 127.0.0.1 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7
9632:X 04 May 06:45:41.453 * +sentinel-address-switch master mymaster 192.168.25.130 6379 ip 192.168.25.131 port 26379 for 9a13868360164c0c7ebbf1f598bd8dcd81f078c7

  再次查看当前redis节点信息

主节点

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379>
[root@localhost redis]# vim sentinel.conf

  从节点

[root@localhost redis]# ./bin/redis-cli
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.25.130
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:113842
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:2606
127.0.0.1:6379>

 sentinel从新选举redis主节点前后,sentinel.config的变化

 初始时配置 192.168.25.129为主节点

port 26379

dir /tmp

sentinel monitor mymaster 192.168.25.129 6379 2

sentinel down-after-milliseconds mymaster 30000

sentinel parallel-syncs mymaster 1

sentinel failover-timeout mymaster 180000

  129挂了,129、130、131上的sentinel从新选举后的sentinel.config配置:

  从中可以看到,redis主节点地址,sentinel主从信息,选举epoch信息等

port 26379

dir "/tmp"

sentinel myid 9a13868360164c0c7ebbf1f598bd8dcd81f078c7

sentinel monitor mymaster 192.168.25.130 6379 2

sentinel config-epoch mymaster 4

sentinel leader-epoch mymaster 0

maxmemory 3gb
sentinel known-slave mymaster 192.168.25.131 6379
sentinel known-slave mymaster 127.0.0.1 6379
sentinel known-sentinel mymaster 192.168.25.129 26379 7592b0773d9f362a6f0f9eecb046e63b84825d2d
sentinel known-sentinel mymaster 192.168.25.130 26379 c57b1466c79d692dc33e01e27ba504a4895d872e
sentinel current-epoch 4

  

  

redis(5)--redis集群之哨兵机制的更多相关文章

  1. (六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)

    参考并感谢 官方文档 https://hub.docker.com/_/redis GitHub https://github.com/antirez/redis happyJared https:/ ...

  2. redis主从、集群、哨兵

    redis的主从.集群.哨兵 参考: https://blog.csdn.net/robertohuang/article/details/70741575 https://blog.csdn.net ...

  3. Redis高可用集群方案——哨兵

    本篇文章版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文系列地址http://www.cnblogs.com/tdws/tag/NoSql/ 本人之前有篇文章,讲到了redis主从复制,读写分 ...

  4. 5-11 Redis缓存 | 持久化 | 集群_哨兵_主从复制_读写分离

    Redis 强化 缓存淘汰策略 Redis服务器繁忙时,有大量信息要保存 如果Redis服务器内存全满,再要往Redis中保存新的数据,就需要淘汰老数据,才能保存新数据 noeviction:返回错误 ...

  5. redis集群之哨兵模式【原】

    redis集群之哨兵(sentinel)模式 哨兵模式理想状态 需要>=3个redis服务,>=3个redis哨兵,每个redis服务搭配一个哨兵. 本例以3个redis服务为例: 一开始 ...

  6. Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】

    No cross,no crown . 不经历风雨,怎么见彩虹. Redis哨兵模式,用现在流行的话可以说就是一个"哨兵机器人",给"哨兵机器人"进行相应的配置 ...

  7. redis 安装 集群 主从 哨兵 docker

    安装redis 官方文档 docker run -d --net host -v /opt/myconfig/redis/redis.conf:/usr/local/etc/redis/redis.c ...

  8. sentinel监控redis高可用集群(一)

    一.首先配置redis的主从同步集群. 1.主库的配置文件不用修改,从库的配置文件只需增加一行,说明主库的IP端口.如果需要验证的,也要加多一行,认证密码. slaveof 192.168.20.26 ...

  9. Redis+Twemproxy+HAProxy集群(转) 干货

    原文地址:Redis+Twemproxy+HAProxy集群  干货 Redis主从模式 Redis数据库与传统数据库属于并行关系,也就是说传统的关系型数据库保存的是结构化数据,而Redis保存的是一 ...

随机推荐

  1. pat 1065 A+B and C (64bit)(20 分)(大数, Java)

    1065 A+B and C (64bit)(20 分) Given three integers A, B and C in [−2​63​​,2​63​​], you are supposed t ...

  2. 领扣(LeetCode)移动零 个人题解

    给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数组上操作, ...

  3. 领扣(LeetCode)Fizz Buzz 个人题解

    写一个程序,输出从 1 到 n 数字的字符串表示. 1. 如果 n 是3的倍数,输出“Fizz”: 2. 如果 n 是5的倍数,输出“Buzz”: 3.如果 n 同时是3和5的倍数,输出 “FizzB ...

  4. iOS UIKit x Android Widget

    Android的事件回调Listener相当于iOS的delegate回调. Android的事件回调接口Listener相当于iOS的protocol回调协议. Android的UI容器(Adapt ...

  5. UCACO刷题

    UCACO刷题 SUBMIT: /* ID: your_id_here LANG: C++ TASK: test */ 文件:freopen(“file.in", "r" ...

  6. 18063-圈中的游戏-(第九章第4题)-"数组指针的使用"-数学分析

    代码借鉴CSDN大佬https://blog.csdn.net/weixin_41409140/article/details/88071047(对大佬的大佬代码进行分析) 18063 圈中的游戏 时 ...

  7. 2019-9-11:渗透测试,Kill远控软件,初接触

     初步使用Kill远控软件,使win7靶机被远控 该文章仅供学习,利用方法来自网络文章,仅供参考   1,打开运行Kill,选择系统设置,设置监听端口,通讯密码,点击保存设置 2,点击服务生成,上线参 ...

  8. Spring Boot整合Mybatis报错InstantiationException: tk.mybatis.mapper.provider.base.BaseSelectProvider

    Spring Boot整合Mybatis时一直报错 后来发现原来主配置类上的MapperScan导错了包 由于我使用了通用Mapper,所以应该导入通用mapper这个包

  9. 用Spring Security, JWT, Vue实现一个前后端分离无状态认证Demo

    简介 完整代码 https://github.com/PuZhiweizuishuai/SpringSecurity-JWT-Vue-Deom 运行展示 后端 主要展示 Spring Security ...

  10. PHP页面跳转传值的三种常见方式

    一. POST传值 post传值是用于html的<form>表单跳转的方法,很方便使用.例如: ? 1 2 3 4 5 6 7  <html>  <form action ...