需要掌握:redis主从模式(读写分离)
为什么提出 哨兵模式(Sentinel)
主从模式的 不具备高可用性,当master意外退出后,不能提供 写 操作,需要手动切换
Redis从2.8开始提供了Redis Sentinel(哨兵)解决这个问题
sentinel
Redis-Sentinel是redis 官方推荐 的 高可用解决方案
redis-sentinel是独立运行的进程,用于监控多个master-slave集群,当master宕机,自动将某个slave 切换成 master,通知其他slave连接新master
通常为了保证sentinel的高可用,sentinel也会部署多个,一般1主2从3哨兵
默认监听 26379 端口
功能
监控 (Monitor): 检查 主redis、从redis 是否正常运作
通知 (Notification): 监控的redis服务出现问题时,可通过API通知管理员
自动故障迁移 (Automatic Failover): 当检测到 主redis不能正常工作时,自动将某个slave 切换成 master,通过 发布订阅模式 通知其他slave连接新master。修改sentinel配置文件
配置提供:客户端(java)连接到Sentinel上获取 Master Redis 地址
https://blog.csdn.net/qq_28804275/java/article/details/80938659
工作机制
当 redis master 节点挂掉后, 某个 Sentinel 检测到,认为该节点进入
SDOWN状态,即:主观下线当一定数目(Quorum 参数设定)的 Sentinel 都认为该 master 挂掉的情况下,该节点将转换进入
ODOWN状态,即:客观下线。sentinel 之间 发起投票,选择其中一个 sentinel 实例发起 failover 过程:
- 选择一个 slave 作为新的 master
- 通过 发布订阅模式 通知其他slave连接新master,复制数据
当客户端(java)连接集群时,集群会返回新master的地址,使得集群可以使用新的主服务器来代替失效服务器
主观下线
主观下线(Subjectively down),当前 sentintel节点认为 某个redis节点 不可用。
客观下线
客观下线(Objectively down),达到数量的sentinel节点,认为 某个redis节点 不可用。
特点
sentinel模式是建立在 主从模式 基础上
当master意外退出,sentinel会在slave中选择一个做为master,其他slave会指向新的master
当master重新启动后,不再是master,而是做为slave接收新的master的同步数据
sentinel因为是一个进程,有挂掉的可能,所以sentinel也会启动多个形成一个sentinel集群(1主2从3哨兵)
多sentinel配置的时候,sentinel之间也会自动监控
当主从模式配置密码时,sentinel也会同步将配置信息修改到配置文件中
一个sentinel或sentinel集群可以管理多个主从Redis,多个sentinel也可以监控同一个redis
sentinel最好不要和Redis部署在同一台硬件服务器,否则该服务器挂了以后,sentinel也挂了
一些细节(了解)
每个sentinel以每秒钟一次的频率向它所知的master,slave以及其他sentinel实例发送一个 PING 命令
如果一个实例距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被sentinel标记为主观下线。
如果一个master被标记为主观下线,则正在监视这个master的所有sentinel要以每秒一次的频率确认master的确进入了主观下线状态
当有足够数量的sentinel(大于等于配置文件指定的值)在指定的时间范围内确认master的确进入了主观下线状态, 则master会被标记为客观下线
在一般情况下, 每个sentinel会以每 10 秒一次的频率向它已知的所有master,slave发送 INFO 命令
当master被sentinel标记为客观下线时,sentinel向下线的master的所有slave发送 INFO 命令的频率会从 10 秒一次改为 1 秒一次
若没有足够数量的sentinel同意master已经下线,master的客观下线状态就会被移除;
若master重新向sentinel的 PING 命令返回有效回复,master的主观下线状态就会被移除
感谢:
https://www.cnblogs.com/duanxz/p/4701831.html
https://www.jianshu.com/p/06ab9daf921d
https://blog.csdn.net/miss1181248983/java/article/details/90056960
http://blog.fnil.net/blog/255ccfae971d6d30b0921120d327490b/
