第十章、哨兵
1、是什么?
1、吹哨人巡查监控后台的master主机是否有问题,如果有故障,就票选一个从机作为主机,继续对外服务
2、作用:俗称无人值守运维
2、能干嘛?
1、主从监控
- 看看主机和从机运行是否正常
2、消息通知
- 哨兵可以把故障结果发送给客户端
3、故障转移
- 如果主机挂了,从机就会成为新主机,继续工作
4、配置中心
- 客户端通过连接哨兵来获取当前Redis服务的主节点地址
3、怎么玩?
1、redis Sentinel架构
1、就是有3个哨兵
2、1个主机,两个从机
2、案例
1、这里我们用1个主机6379端口来作为主机。同时也把3个哨兵配置在这个虚拟机里面。
2、然后另外两个从机,就是两个虚拟机
1、配置文件
1、我们把sentinel.conf这个文件给拷贝出来。就是配置哨兵的配置文件
2、我们配置bind
- 监听服务地址,客户端连接,默认本机
3、配置daemonize
- 后台daemon的运行方式
4、配置protected-mode
- 安全保护模式
5、port端口
6、logfile:日志文件路径
7、pidfile:pid文件路径
8、dir:工作路径
9、设置要监控的master服务器
-
sentinel monitor -
quorum表示最少有几个哨兵任课客观下线,同意故障迁移的法定票数
10、master设置密码,连接master服务的密码
-
sentienl auth-pass
11、指定多少毫秒之后,主节点没有应答哨兵,此时哨兵主观上认为主节点下线
-
sentinel down-after-milliseconds:
12、表示允许并行同步的slave个数,当Master挂了后,哨兵会选出新的Master,此时,剩余的slave会向新的master发起同步数据
sentinel parallel-syncs <master-name> <nums>:
13、故障转移的超时时间,进行故障转移时,如果超过设置的毫秒,表示故障转移失败
sentinel failover-timeout <master-name> <milliseconds>:
14、配置当某一事件发生时所需要执行的脚本
sentinel notification-script <master-name> <script-path> :
15、客户端重新配置主节点参数脚本
sentinel client-reconfig-script <master-name> <script-path>:
2、配置文件—实例
1、我们把3个哨兵和192.168.171.129 6379这个虚拟机上
2、sentinel26379.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 26379
logfile "/myredis/sentinel26379.log"
pidfile /var/run/redis-sentinel26379.pid
dir /myredis
sentinel monitor mymaster 192.168.171.129 6379 2
sentinel auth-pass mymaster 111111
3、sentinel26380.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 26380
logfile "/myredis/sentinel26380.log"
pidfile /var/run/redis-sentinel26380.pid
dir "/myredis"
sentinel monitor mymaster 192.168.171.129 6379 2
sentinel auth-pass mymaster 111111
4、sentinel26381.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 26381
logfile "/myredis/sentinel26381.log"
pidfile /var/run/redis-sentinel26381.pid
dir "/myredis"
sentinel monitor mymaster 192.168.171.129 6379 2
sentinel auth-pass mymaster 111111
3、启动
1、分别启动三个虚拟机
redis-server /myredis/redis6379.conf
redis-cli -a 111111 -p 6379
redis-server /myredis/redis6380.conf
redis-cli -a 111111 -p 6380
redis-server /myredis/redis6381.conf
redis-cli -a 111111 -p 6381
2、在第一个6379端口号的主机,启动3个哨兵
redis-sentinel sentinel26379.conf --sentinel
redis-sentinel sentinel26380.conf --sentinel
redis-sentinel sentinel26381.conf --sentinel
4、模拟master挂了
1、直接在6379虚拟机上
shutdown
2、结果
- 两台从机的数据还是在
- 会从剩下两个从机选个主机出来
- 如果挂了的老大,重新启动,老大也不会重新上位,而是便成奴隶
3、遇到问题
Configuration loaded
4 2989:X 03 Apr 2024 23:38:22.778 * Increased maximum number of open files to 10032 (it was originally set to 1024).
4、其他备注
1、一般不会出现哨兵全挂了的现象
2、可以同时监控多个master,一行一个
3、哨兵的运行流程和选举原理
1、运行流程
1、当一个主机挂了,sentine可以选举一个新的主机master
2、用来自动接替master原来的工作,主从配置中的其他redis服务器(从机)就会自动指向新的master同步数据
3、一般sentinel采取奇数,繁殖某一台sentinel无法连接而进行master误切换
2、运行流程、故障切换
1、SDown主观下线
1、单个sentinel自己主观检测到master状态
2、sentinel角度来看,如果发送的Ping心跳,一段时间没有收到回复,就认为达到了SDOWN的条件
3、实操:sentinel配置文件中,主管下线的时间长度
down-after-milliseconds xxxx
2、ODown客观下线
1、需要多个sentinel认为,达成一致条件才能认为,master已经客观死了
3、选举出领导者哨兵(哨兵中选出兵王)
1、如果master客观下线了,就要哨兵来协商,协商期间,要推选一个领导者哨兵节点(兵王),这个领导者哨兵来进行故障迁移(failover)
2、如图日志

4、兵王开始推动故障切换流程,选举新master
1、三步骤
1、新主登基
- 某个slave成为了master
- 选举规则(slave要健康在线)
- slave-priority这个优先级决定(越小,优先级越高)
- 复制偏移位置offset最大的从节点
- 从最小run Id的结点开始
2、群臣俯首
- slave重新跟随新的master
- sentinel leader 会读对选举出的心master执行 slaveof no one操作,将其提升为master节点啊
- sentinel leader向其他slave发送命令,让剩余的slave成为新的master结点的slave
3、旧主拜服
- 之前死掉的master,复活了,现在重新回来也只能是个slave了
- sentinel leader 会让原来的master降级为slave并回复正常工作
4、以上3个操作都是自动完成,无需人工干预
4、哨兵使用的建议
1、结点尽量多个,保证高可用
2、哨兵节点应该是奇数
3、各个哨兵之间的配置都应该一致
4、如果哨兵部署在docker容器,要注意端口的正确映射
5、哨兵集群和主从复制,并不能保证数据的0丢失
