redis哨兵机制
1、哨兵机制介绍
redis哨兵是redis高可用的解决方案,有一个或多个哨兵实例组成哨兵系统,可以监听多个主服务器以及对应的从服务器,当主服务器下线时长超过上限时,自动将下线主服务器下的某个从服务器升级为新的主服务器(故障转移)。
故障转移操作:
选择其中一个从服务器,并将其升级为新的主服务器,然后对所有从服务器发送新的复制指令,让他们成为新的主服务器的从服务器,当所有服务器都开始复制新的主服务器时,故障转移操作执行完毕。另外,之前下线的主服务器重新上线时将会把它设置为新的主服务器的从服务器。
2、启动哨兵(redis数据库带密码时的配置)
redis-server.exe sentinel26379.conf --sentinel
其中 sentinel26379.conf文件:(另外建 sentinel26479.conf, sentinel26579.conf ,文件内容的port改为对应的端口号)
#当前Sentinel服务运行的端口 port 26379 # 哨兵监听的主服务器 daemonize yes protected-mode no # 3s内mymaster无响应,则认为mymaster宕机了 sentinel monitor mymaster 127.0.0.1 6379 1 sentinel auth-pass mymaster root123456 #如果10秒后,mysater仍没启动过来,则启动failover sentinel down-after-milliseconds mymaster 5000 # 执行故障转移时, 最多有1个从服务器同时对新的主服务器进行同步 sentinel failover-timeout mymaster 5000 logfile "redis26379.log"
测试哨兵机制:
把主服务器宕机,查看从哨兵日志:
[38372] 27 Aug 19:52:31.310 # Sentinel ID is 7c13f2d6477794c862e530ab821ccf2ef9db8c60 [38372] 27 Aug 19:52:31.310 # +monitor master mymaster 127.0.0.1 6379 quorum 1 [38372] 27 Aug 19:52:31.311 * +slave slave 127.0.0.1:12345 127.0.0.1 12345 @ mymaster 127.0.0.1 6379 [38372] 27 Aug 19:52:31.313 * +slave slave 127.0.0.1:12344 127.0.0.1 12344 @ mymaster 127.0.0.1 6379 [38372] 27 Aug 19:52:33.080 * +sentinel sentinel d4fd32abe10ad70370f8bad4290598f182fc309a 127.0.0.1 26379 @ mymaster 127.0.0.1 6379 [38372] 27 Aug 19:52:34.953 * +sentinel sentinel ad77f98f68e3ebafd98df7fcf2d833afa4206683 127.0.0.1 26579 @ mymaster 127.0.0.1 6379 [38372] 27 Aug 20:07:02.503 # +new-epoch 1 [38372] 27 Aug 20:07:02.505 # +vote-for-leader d4fd32abe10ad70370f8bad4290598f182fc309a 1 [38372] 27 Aug 20:07:02.524 # +sdown master mymaster 127.0.0.1 6379 [38372] 27 Aug 20:07:02.524 # +odown master mymaster 127.0.0.1 6379 #quorum 1/1 [38372] 27 Aug 20:07:02.524 # Next failover delay: I will not start a failover before Thu Aug 27 20:07:13 2020 [38372] 27 Aug 20:07:03.282 # +config-update-from sentinel d4fd32abe10ad70370f8bad4290598f182fc309a 127.0.0.1 26379 @ mymaster 127.0.0.1 6379 [38372] 27 Aug 20:07:03.282 # +switch-master mymaster 127.0.0.1 6379 127.0.0.1 12344 [38372] 27 Aug 20:07:03.282 * +slave slave 127.0.0.1:12345 127.0.0.1 12345 @ mymaster 127.0.0.1 12344 [38372] 27 Aug 20:07:03.282 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 12344 [38372] 27 Aug 20:07:08.337 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 12344
查看服务器状态:
再把主服务器开启,再次查看刚刚被选举为master的服务器的信息:
3、哨兵启动过程:
初始化服务器(用sentinel专用代码),初始化sentinel状态和监视主服务器列表,创建连向主服务器的网络连接。
创建主服务器的网络连接:
sentinel将成为主服务器的客户端,可以向主服务器发送命令,并从命令回复中获取相关信息。sentinel会创建两个连向主服务器的异步网络连接,一个是命令连接,一个是订阅连接(专门用于订阅主服务器的__sentinel__:hello 频道)