-
什么是Sentinel?
一种哨兵机制,当master宕机后,通过选举机制选举出新的master提供服务。
-
Sentinel有什么用?
- 监控:本身和redis主从状态
- 故障转移:提供master宕机后,自动将其他salve转换成master提供服务
- 通知:通知其他slave节点进行连接新的master
- 配置更新:Java客户端连接sentinel获取master信息,会拿到最新的信息。
-
Sentinel是如何实现故障转移的?
如果master出现故障,从slave中选举出一个新的master,并执行一些相关工作,比如通知slave新的master信息,连接新的master。
-
Sentinel如何检测节点是否下线?
- 主观下线:通过ping命令发现master/slave下线
- 客观下线:Sentinel集群都发现master/slave下线
5.为什么建议部署多个sentinel节点?
防止误判,当集群内一半以上的节点判断该节点都下线了,那这个节点真的下线了。
6.如何从Sentinel集群中选择出Leader?
通过共识算法Raft
7. Sentinel可以防止脑裂吗?(也就是网络被分区后数据同步问题)
可以,有两个参数可以设置。
- min-replicas-to-write: 1判断写入的slave节点数是否大于等于该数,不大于则停止接收写入命令
- min-replicas-max-lag: 10 判断master多长时间得不到从节点的响应,就认为节点失联了,停止接收写入命令
8.Sentinel如何选取出新的master?
- slave优先级:设置slave的优先级,越大的就是master,相等向下判断
- 复制进度,谁复制的最接近master,就优先,相等向下判断
- run(id)大小,小的优先