Redis的sentinel集群(哨兵)
推荐阅读 : https://www.cnblogs.com/williamjie/p/9505782.html
https://blog.csdn.net/qq2430/article/details/80679439
强力推荐 , 太全面了!
小总结
- 在sentinel中, 作为哨兵的节点, 自己的是不存储任何数据的, 不对外提供真实服务, 但是可以给客户端提供 能够使用的集群地址
- 整体架构 , 是一种强连通图, 任意两个节点之间 都会建立连接. 哨兵会定时向它所监控的 master 和 master 下面的 slave 进行 PING 心跳 , 如果一段时间
down-after-milliseconds
没有PONG响应 , 那么就会认为该节点 主观下线 (主观表示的是某一个 sentinel哨兵) , 如果多个sentinel (可以设置) 认为是主观下线, 那么 该 master 就会被标记为 客观下线 , 那么就开始进入一个 failover 的流程 - failover 被触发的时候, 会选举出一个sentinel 进行执行. 以 选出某一个 slave 并且 调用了
SLAVE OF NO ONE
成功 为failover 结束 - 之后会进行一个配置的广播通知, 使用一个最新的版本号, 在 sentinel 之间传播, sentinel 会检测 这条信息 和之前的配置 版本号 对比, 哪个新就用哪个
- 注意 : 没有 failover 时 , 也会对配置文件进行检测更新, 比如 某一个master假死…回来之后 还以为自己是master … 这个时候 sentinel 就会把它的配置进行变更, 让它变成 slave
- 如果master是由于网络原因… 也就是 有client 对它进行使用的时候… 可以设置 一个 master 必须要有多少个 slave 才能正常的提供写服务 来拒绝 client , 达到一致性要求… 如果 不需要这么强的一致性… 也无所谓…