怎么解析Redis中的哨兵模式原理

本篇文章带大家深入理解下Redis哨兵模式原理,聊聊sentinel能干什么,启动sentinel方法和Sentinel工作流程,希望对大家有所帮助!

一、Redis sentinel是什么?

Redis Sentinel是Redis官方提供的解决方案,用于实现高可用性。Redis Sentinel为Redis提供高可用性。实际上,这意味着使用Sentinel可以创建一个Redis集群,在没有人为干预的情况下抵抗某些类型的失败,自动实现故障转移。【相关推荐:Redis视频教程】

二、sentinel能干什么?

1、监控redis集群节点(master+replica)和sentinel节点健康状态

Redis哨兵模式原理解析:打造高可用架构

2、自动故障转移:如果master出现故障,sentinel可以实现故障转移,并且通知客户端连接新的master。

3、通知:通过api,可以发送通知到管理员,开发人员,监控的redis实例出现了故障

4、配置中心:客户端连接到sentinel,sentinel可以访问master将节点信息返回给客户端

三、启动sentinel方法

1、redis-sentinel /path/to/sentinel.conf

2、redis-server /path/to/sentinel.conf --sentinel

sentinel.conf配置说明如下

# 配置需要监控的master节点信息 2代表法定人数 作用是表示需要最少需要多少个sentinel节点同意
#master节点不可达才标记为客观下线
#举例 5个sentinel实例 quorum设置成2 那么有2个sentinel节点认为master不可达,
#则其中一个会启动故障转移#如果至少有三个哨兵可到达,故障转移将被授权并实际启动。
sentinel monitor mymaster 127.0.0.1 6379 2
#只需要配置master sentinel会自动检测slave信息
sentinel down-after-milliseconds mymaster 60000
#如果master在指定时间内没有响应ping命令/或报错,则认为主观下线了。
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
#指定故障转移的时候,同时支持多少个replica并行的与master同步数据,越小故障转移越久
#以上配置可以通过SENTINEL SET command.来实时修改。
sentinel monitor resque 192.168.1.3 6380 4
sentinel down-after-milliseconds resque 10000
sentinel failover-timeout resque 180000
sentinel parallel-syncs resque 5

注意点:

Redis-sentinel必须使用配置文件启动,重启需要根据配置文件恢复,默认打开26379端口,sentinel之间必须开放端口访问,方便相互访问。

四、Sentinel工作流程

1、首先sentinel之间是通过redis的pub/subscribe机制实现动态感知。

客观下线:

当主观下线的节点是主节点时,哨兵节点会通过指令sentinel is-masterdown-by-addr寻求其它哨兵节点对主节点的判断,当超过quorum(在sentinel配置中配置的法定人数)个数,此时哨兵节点则认为该主节点确实有问题,这样就客观下线了,大部分哨兵节点都同意下线操作,也就说是客观下线。

注意客观下线只针对master节点生效,它会触发故障转移

3,master下线了,需要进行故障转移

这里又分为两步,首先需要选择sentinel哨兵主节点,通过sentinel主节点来进行redis的故障转移。

首先是sentinel选举领导者。使用raft算法(状态共识算法)。

每一个Sentinel节点都可以成为Leader,当一个Sentinel节点确认redis集群的主节点主观下线后,会请求其他Sentinel节点要求将自己选举为Leader。被请求的Sentinel节点如果没有同意过其他Sentinel节点的选举请求,则同意该请求(选举票数+1),否则不同意。

如果一个Sentinel节点获得的选举票数达到Leader最低票数(quorum和Sentinel节点数/2+1的最大值),则该Sentinel节点选举为Leader;否则重新进行选举。

Raft核心思想:先到先得,少数服从多数。

sentinel选举出主节点后,sentinel主节点需要选举出redis集群主节点,构建新的集群关系。

选举新redis主节点的依据是:

1、与sentinel断开连接的时间。过滤发现与主sentinel服务器断开连接的时间超过配置的主机超时时间down-after-milliseconds的副本slaves

2、副本优先级。 优先选择replica-priority低的。

3、如果优先级相同,已处理复制偏移量。越大越优先,这个更符合业务场景功能。

4、如果复制offset相同,就看运行ID。优先选择小的。

选择出master节点后,开始维护集群关系。

1、sentinel节点,向新主节点发送,slave no one命令,让它成为独立节点

2、sentinel节点,向其他节点发送 slaveof ip port,跟随到主节点

五、总结

通过上面的分析,sentinel通过定时监控手段,可以实现自动故障转移,不过sentinel还是有一些问题,比如单个master节点情况下,数据存在丢失的可能,并且如果单机性能有限,也没有横向扩展的能力。



Redis是目前最热门的NoSQL数据库之一,而其哨兵模式是必备的高可用架构。那么,该如何理解和解析Redis中的哨兵模式原理呢?
一、哨兵模式是什么?
Redis哨兵模式是为了解决单点故障而设计。它通过多个哨兵节点共同监控Redis主节点和从节点的状态,一旦发现主节点失效,则从节点会自动选举出一个新的主节点,从而实现Redis高可用性架构。
二、哨兵模式的工作原理?
哨兵节点通过发送命令的方式定期询问Redis主节点和从节点的状态,并将这些状态报告给其他哨兵节点。当其中一个哨兵节点检测到主节点失效时,它就会发起选举,从副本中选出新的主节点,并通知其他哨兵节点。
三、哨兵模式如何保证高可用?
哨兵模式可以通过多个哨兵节点共同监控Redis集群,确保出现故障时立刻进行响应和处理,尽快恢复服务。同时,哨兵模式还可以自动进行节点选举,确保Redis集群不会因为主节点的故障而发生无法提供服务的情况。
四、如何使用哨兵模式?
建议将至少三个哨兵节点分别安装在不同的服务器上,确保即使有一台服务器宕机,仍然可以保证哨兵节点间的协作。同时建议使用Redis cluster集群模式,如果主节点失效,Redis哨兵可以自动进行主节点选举,保证Redis集群的高可用性。
总之,Redis哨兵模式是一种必备的高可用性架构,可以通过多个哨兵节点共同监控Redis集群,确保出现故障时立刻进行响应和处理,从而保证Redis集群的高可用性。