redis高可用Sentinel哨兵

Sentinel哨兵是Redis官方提供的高可用方案,使用Sentinel哨兵可以监控多个Redis服务实例的运行情况;

哨兵的基本原理

Sentinel哨兵用来监视Redis的主从服务器,它会不断检查Master和Slave是否正常;
如果Sentinel挂了,就无法监控,所以需要多个哨兵,组成Sentinel网络
监控同一个Master的各个Sentinel哨兵会相互通信,组成一个分布式的Sentinel哨兵网络,互相交换彼此关于被监控redis服务器的信息,
当一个Sentinel哨兵认为被监控的redis服务器出现故障时,它会向网络中的其它Sentinel哨兵进行确认,判断该服务器是否真的已故障,
如果故障的redis服务器为主服务器,那么Sentinel哨兵网络将对故障的主redis服务器进行自动故障转移,通过将故障的主redis服务器下的某个从服务器提升为新的主服务器,并让其它从服务器转移到新的主服务器下,以此来让整个主从模式重新回到正常状态
待出现故障的旧主服务器重新启动上线时,Sentinel哨兵会让它变成一个从redis服务器,并挂到新的主redis服务器下
所以哨兵是自动实现故障转移,不需要人工干预,是一种高可用的集群方案;

1.实现Sentinel哨兵

redis已经帮我们做好了这一切,我们只需要进行配置即可实现哨兵模式

1.在redis主目录下复制三份sentinel.conf文件:
sentinel26380.conf
sentinel26381.conf
sentinel26382.conf

2.三份sentinel配置文件修改(两处)

1、修改 port 26380、 port 26381、 port 26382 (Sentinel默认端口号为26379)

2、修改 sentinel monitor mymaster 192.168.6.128 6380 2
格式:Sentinel monitor <Quorum投票数>
Sentinel会根据Master的配置自动发现Master下的Slave;
如果主redis有密码要设置:
sentinel auth-pass mymaster 123456(密码)
3.设置后台启动
daemonize no

3.启动Sentinel

redis安装时make编译后就产生了redis-sentinel的可执行程序文件,可以在一个redis中运行多个sentinel进程
启动三个Sentinel哨兵进程,将创建三个监视主服务器的Sentinel实例,执行如下命令:
./redis-sentinel …/sentinel26380.conf
./redis-sentinel …/sentinel26381.conf
./redis-sentinel …/sentinel26382.conf

在这里插入图片描述

2.验证Sentinel哨兵模式

1、将主从模式的redis中的主redis服务器关闭;
查看主是好的

在这里插入图片描述

关闭主redis:6382端口的redis成为了主redis

在这里插入图片描述

3.哨兵模式内部原理分析

当master故障之后,为了解决master选举问题,又引出了一个单点问题,也就是哨兵的高可用性如何解决?在一个一主多从的Redis系统中,可以使用多个哨兵进行监控任务以保证系统足够稳定,此时哨兵不仅会监控master和slave,同时还会互相监控,这种方式称为哨兵集群,哨兵集群需要解决故障发现、和master决策的协商机制问题;
sentinel节点之间会因为共同监视同一个master从而产生了关联,一个新加入的sentinel节点需要和其他监视相同master节点的sentinel相互感知,首先

  1. 需要相互感知的sentinel都向他们共同监视的master节点订阅channel:sentinel:hello
  2. 新加入的sentinel节点向这个channel发布一条消息,包含自己本身的信息,这样订阅了这个channel的sentinel就可以发现这个新的sentinel
  3. 新加入的sentinel和其他sentinel节点建立长连接;

master的故障发现
sentinel节点会定期向master节点发送心跳包来判断存活状态,一旦master节点没有正确响应,sentinel会把master设置为“主观不可用状态”,然后它会把“主观不可用”发送给其他所有的sentinel节点去确认,当确认的
sentinel节点数大于>quorum时,则会认为master是“客观不可用”,接着就开始进入选举新的master流程;但是这里又会遇到一个问题,就是sentinel本身是一个集群,如果多个节点同时发现master节点达到客观不可用状
态,那谁来决策选择哪个节点作为maste呢?这个时候就需要从sentinel集群中选择一个leader来做决策,而这里用到了一致性算法Raft算法、它和Paxos算法类似,都是分布式一致性算法,但是它比Paxos算法要更简单一些;
Raft和Paxos算法一样,也是基于投票算法,只要保证过半数节点通过提议即可;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值