入门指南|redis-Sentinel(哨兵机制)你学废了么()

人生难得几回搏,此时不搏待何时。这篇文章主要讲述入门指南|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进行互通

  • 故障转移阶段
【入门指南|redis-Sentinel(哨兵机制)你学废了么()】sentinel发现master关挂了,标记master为主观下线,然后发送命令给奇特哨兵,其他哨兵也会去看看状态,如果一半以上的哨兵认为master挂了,那就直接标记为客观下线,执行故障转移操作 sentinel通过竞选,然后获得此次处理master的权利,成为领头sentinel 去除不在线的 去除响应慢的 与原master断开时间久的 优先原则 优先级 offset runid 发送指令 向新的master发送slave no one指令 向其他slave发送slaveof新的ip端口


    推荐阅读