1.redis哨兵模式作用

1.这里的哨兵作用:
监控:Sentinel会不断检查您的master和slave是否按预期工作
自动故障恢复:如果master故障,Sentinel会将一个slave提升为master。当故障实例恢复后也以新的master为主通知:Sentinel充当Redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给Redis的客户端
2、监控原理Sentinel基于心跳机制监测服务状态,每隔1秒向集群的每个实例发送ping命令:
主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线。
客观下线:若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例,客观下线。quorum值最好超过Sentinel实例数量的一半。
3、故障恢复原理一旦发现master故障,sentinel需要在salve中选择一个作为新的master,选择依据是这样的:
首先会判断slave节点与master节点断开时间长短,如果超过指定值(down-after-miliseconds*10)则会排除该slave节点然后判断slave节点的slave-priority值,越小优先级越高,如果是0则永不参与选举0如果slave-prority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高
最后是判断slave节点的运行id大小,越小优先级越高。
当选出一个新的master后,该如何实现切换呢?
流程如下:
sentinel给备选的slave1节点发送slaveofno one命令(反客为主),让该节点成为master
2.redis哨兵模式的搭建
1.编辑哨兵模式配置文件
同样的这是一台虚拟机搭建redis哨兵模式
mkdir /usr/local/redis-6.2.6/sentinel
cd /usr/ocal/redis-6.2.6/sentinel
mkdir 27001 27002 27003
搭建三台哨兵检测,注意哨兵模式只能是单数,因为涉及到当master主机断连的情况下,重新选取主机,如果是双数的哨兵主机导致投票两台slave主机为master会出现票数相同问题,因此哨兵模式只能为单数
在27001目录下创建sentinel.conf文件,编辑内容为
port 27001
sentinel announce-ip 192.168.217.151
sentinel monitor mymaster 192.168.217.151 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel auth-pass mymaster xxx
dir "/usr/local/redis-6.2.6/sentinel/27001"
同样的将文件内容拷贝到27002文件夹,还有27003文件夹,且只需要修改端口
2.启动哨兵模式
先启动Redis(一主二仆)
./redis-server /usr/local/redis-6.2.6/6379/redis-6379.conf &
./redis-server /usr/local/redis-6.2.6/6380/redis-6380.conf &
./redis-server /usr/1ocal/redis-6.2.6/6381/redis-6381.conf &
./redis-cli -p 6379
./redis-cli -p 6380
./redis-cli -p 6381
# 添加临时主从配置
slaveof 192.168.217.151 6379
在启动哨兵模式
#第1个
./redis-sentinel /usr/local/redis-6.2.6/sentinel/27001/sentinel.conf
#第2个
./redis-sentinel /usr/local/redis-6.2.6/sentinel/27002/sentinel.conf
#第3个
./redis-sentinel /usr/local/redis-6.2.6/sentinel/27003/sentinel.conf
3.开启测试
让主节点挂机,观察master主机的变化

关闭6379master主机模拟服务关闭,此时两台从机都无法连接

需要重新登录之后才可以继续使用,此时服务是没有中断的,重新登录后6381这台服务器成为了master主机
