哨兵模式, 英文名称 Sentinel.
Sentinel 存在的目的就是解决 master 宕机后的可用性问题. Sentinel 集群类似于 zookeeper, 集群之间的交互如下图:
图 1.1 sentinel 与主从, client 的交互图
Sentinel 主要负责监控主从节点的监控, 当主节点挂掉后, 自动选择一个从节点切换为主节点.
下面梳理下客户端连接的过程:
* 先连接 sentinel, 查询主节点的地址.
* 连接主节点, 进行数据交互.
当主节点挂了后, 客户端会重新向 sentinel 要地址, sentinel 会将最新的 master 地址反馈给客户端. 这样故障发生时, 程序无需重启即可自动完成节点切换.
切换过程中, 如果主从延迟特别大, 会遇到消息丢失的问题. 未及时同步的消息必然会丢失. Sentinel 也无法保证消息完全不丢失, 它有 2 个配置, 可以尽量保证消息少丢失.
- min-slaves-to-wirte 1
- min-slaves-max-lag 10
第一个参数表示主节点必须至少有一个从节点在正常进行复制, 不然会停止对外写服务, 丧失可用性, 但是不保证复制完成.
第二个参数是用来判断复制是否正常, 单位是 s, 表示如果 10s 内没收到从节点反馈, 那么从节点的同步不正常.
Sentinel 默认端口 26379. 进行主从切换的方式有 主动, 被动两种.
来源: http://www.jianshu.com/p/23bc2cf8f8a3