Redis高可用之哨兵Sentinel
Sentinel哨兵
Redis主从复制模式下 如果主节点发生故障 服务便不可用 那么此时就需要人工去把其中一台从节点晋升为主节点 并通知应用方 ,无法保证高可用 所以Redis提供了Sentinel来做这件事情
哨兵的具体作用就是 由多个哨兵节点组成的集群 他们会去监控所有redis数据节点,同时哨兵们彼此之前也会进行监控 ,当某个哨兵发现一个redis数据节点发生故障后, 会对其标识下线处理
如果这个数据节点是主节点master 那么这个哨兵就会与其它哨兵进行协商选出一台sentinel做为领导者去进行故障转移工作
具体的故障转移流程分四步:
1.通过slave of noone 把一台redis从节点晋升为主节点
2.让其它从节点 复制 新的主节点
3.通知应用方
4.让故障的主节点去复制新的主节点
流程图如下
这些步骤都是自动完成的 应用方初始化连接的时候连接是哨兵的地址,并从中获取redis的连接信息 实际上sentinel本身就是一个特殊的redis节点,只不过他并不存储数据,并且只接受一部份命令
Sentinel的安装及部署
上面说过Sentinel本身就是一个redis的节点 部署与redis没什么不同 ,只是启动配置里多了几条与sentinel相关的配置而以 这里不写了
线上部署时的技巧 :
Sentinel节点应该部署在不同的物理机上 防止因为单台物理机故障导致所有的Sentinel节点都不可用
部署三个以上并且 是奇数个Sentinel节点 Sentinel领导者选举时需要一半个数+1个节点 同时三个以上节点 可以增加故障判断的准确性
另外一组Sentinel节点可以监控多个redis主节点 如果多个redis主节点是属于同一业务
那么配置一组Sentinel节点就可以 否则建议一组Sentinel监控一组Redis 防止因为Sentinel节点故障导致所有业务 都受影响