首页  

redis高可用架构之哨兵     所属分类 redis 浏览量 1644
哨兵 Sentinel
主从复制需要人工介入才能完成故障转移 
failover 故障转移  故障切换  容错 失效接管 失效转移

在哨兵集群中,哨兵 监视所有的 redis 服务器和其他 sentinel 节点状态,
及时发现故障完成转移,从而保证 redis 的高可用。

哨兵本质上是一个 redis 服务 ,哨兵实例最好是奇数个 跟zk类似

哨兵的配置文件  sentinel.conf

// 端口号 默认 redis实例+20000 
port 26379 
// 是否守护进程运行
daemonize yes
// 日志 可通过日志查看故障转移过程
logfile "26379.log" 
// 监视一个名为 mymaster(自定义) 的 redis 主服务器  IP 127.0.0.1  端口号 6379 
// 最后的 2 表示至少有两个哨兵认为主服务器出现故障才会进行故障转移 
sentinel monitor mymaster 127.0.0.1 6379 2 
// 判断服务器失效的响应时间,超过该时间未接收到服务器回应,认为该服务器失效
sentinel down-after-milliseconds mymaster 30000 
// 完成故障转移之后,最多多少个从服务器可以同时发起数据复制,数字越小,说明完成全部从服务数据复制的时间越长
// 数字越大,对主服务器的压力越大
sentinel parallel-syncs mymaster 1 
// 故障转移超时时间
sentinel failover-timeout mymaster 180000

启动哨兵
./redis-sentinel sentinel.conf 

哨兵也是 redis 实例 ,查看 哨兵 信息
./redis-cli -p 26379 info sentinel

Redis从服务器发现 询问redis主服务器 

其他 Sentinel 节点 发现
通过发布与订阅功能实现 ,向频道 sentinel:hello 发送信息
信息内容 Sentinel 的 IP 地址、端口号和运行 ID (runid)

订阅 sentinel:hello 

查找之前未出现过的 sentinel (looking for unknown sentinels)

Sentinel  节点列表 ,  监视同一个redis主服务器的所有其他 Sentinel


每个Sentinel节点每隔 1 秒对主节点、从节点、其他 Sentinel 节点发送 ping 命令做心跳检测

三种回复 PONG LOADING MASTERDOWN

主观下线 
询问其他Sentinel  
客观下线

故障转移 由 Sentinel 主节点执行

Sentinel leader  选举过程 

sentinel 集群通过 Raft 算法 选举leader

当 sentinel 标记Redis主服务器为主观下线时,
向其他 Sentinel 节点发送 sentinel is-master-down-by-addr 命令,要求将自己设置为领导者

收到命令的 Sentinel 节点,如果没有同意过其他 Sentinel 节点的 sentinel is-master-down-by-addr 命令,将同意该请求,否则拒绝

如果该 Sentinel 节点发现自己的票数已经超过半数,那么它将成为领导者

如果在规定时间内,没有选举出 sentinel 领导者,那么将在一段时间后再次选举


故障转移过程

1 选出新的主服务器
在已下线的主服务器的所有从服务器中,挑选出一个从服务器,并将其转换为主服务器

主服务器选择规则

淘汰被标记为主观下线、已断线、或者最后一次回复 PING 命令的时间大于五秒钟的从服务器 
淘汰与失效主服务器连接断开的时长超过 down-after 选项指定的时长十倍的从服务器 

选出复制偏移量(replication offset)最大的那个从服务器 
如果复制偏移量不可用, 或者从服务器的复制偏移量相同, 最小运行 ID 的那个从服务器成为新的主服务器

对挑选出来的从服务器执行 slaveof no one 命令,使其成为主节点


2 修改其他从服务器的复制目标
slaveof new_master port 

3 将已下线的主服务器设置为新的主服务的从服务器,等它恢复后去复制新的主节点。

上一篇     下一篇
lambda使用说明

Redis cluster 原理

redis内存设置及淘汰策略

zookeeper不适合用于服务注册与发现

lua语法特点

https知识点