redis高可用架构之哨兵
所属分类 redis
浏览量 1686
哨兵 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知识点