入门指南|redis-Sentinel(哨兵机制)你学废了么?
Posted John_yyll
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了入门指南|redis-Sentinel(哨兵机制)你学废了么?相关的知识,希望对你有一定的参考价值。
九、redis-Sentinel(哨兵机制)
Redis Sentinel是一个分布式系统,为Redis提供高可用性解决方案。可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来 接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故 障迁移, 以及选择哪个从服务器作为新的主服务器。
工作过程
Sentinel负责持续监控主从节点的健康,当主节点挂掉时,自动选择一个最优的从节点切换成为主节点。客户端来连接集群时,会首先连接Sentinel,通过Sentinel来查询主节点的地址,然后再连接主节点进行数据交互。当主节点发生故障时,客户端会重新向Sentinel要地址,Sentinel会将最新的主节点告诉客户端,如此应用程序无需重启即可自动完成节点切换。
宕机前
宕机的master下线
宕机的master上线后
消息丢失
Redis采用异步复制,意味着当主节点挂掉时,从节点可能没有收到全部的同步消息,这部分未同步的消息丢失了,如果主从延迟特别大,那么丢失的消息就会特别多。Sentinel无法保证消息不丢失,但是也能尽量保证消息少丢失,提供了如下两个参数
min-slaves-to-write 1
min-slaves-max-lag 10
第一个参数表示主节点必须至少有一个从节点在进行正常复制,否则就停止对外写服务,丧失可用性。
何为正常服务?何为异常服务?这是由第二个参数决定的,它的单位是秒,如果在10秒以内,没收到从节点反馈,就意味着不正常。
Sentinel 实战
- 环境配置
第一:准备3台服务器,此处我的sentinel就直接放在原先的服务器上,关闭防火墙
systemctl stop firewalld.service
主机说明 | 主机IP | 端口 | sentinel端口 |
master | 172.16.51.128 | 6379 | 26379 |
slave | 172.16.51.129 | 6379 | 26379 |
slave | 172.16.51.130 | 6379 | 26379 |
- 修改redis.conf。先配置redis主从
172.16.51.128(master)
bind 0.0.0.0
protected-mode no
172.16.51.129(slave)
bind 0.0.0.0
protected-mode no
slaveof 172.16.51.127 6379
172.16.51.30(slave)
bind 0.0.0.0
protected-mode no
slaveof 172.16.51.127 6379
依次启动三个节点
- 配置sentinel文件
172.16.51.128(master)
bind 0.0.0.0
protected-mode no
# 主redis 节点信息
sentinel monitor mymaster 172.16.51.127 6379 2
172.16.51.129(slave)
bind 0.0.0.0
protected-mode no
sentinel monitor mymaster 172.16.51.127 6379 2
172.16.51.30(slave)
bind 0.0.0.0
protected-mode no
sentinel monitor mymaster 172.16.51.127 6379 2
依次启动三个节点,然后随机关闭redis master。看看会不会重新选择主节点
Sentinel基本原理
- 监控阶段
用于同步各个节点的状态信息
获取sentinel的状态(是否在线)
获取master状态
获取所有slave状态
master保存sentinel信息,作用是让其他sentinel来发现其他的sentinel,建立订阅通道
通知阶段
每个sentinel进行互通
- 故障转移阶段
sentinel发现master关挂了,标记master为主观下线,然后发送命令给奇特哨兵,其他哨兵也会去看看状态,如果一半以上的哨兵认为master挂了,那就直接标记为客观下线,执行故障转移操作
sentinel通过竞选,然后获得此次处理master的权利,成为领头sentinel
去除不在线的
去除响应慢的
与原master断开时间久的
优先原则
优先级
offset
runid
发送指令
向新的master发送slave no one指令
向其他slave发送slaveof新的ip端口
以上是关于入门指南|redis-Sentinel(哨兵机制)你学废了么?的主要内容,如果未能解决你的问题,请参考以下文章