在Redis主从系统中使用哨兵

  • Post author:
  • Post category:其他


一、什么是哨兵

Redis的哨兵(Sentinel)是Redis分布式系统中的一种特殊角色,用于监控和管理Redis主从复制架构中的主节点(master)和从节点(slave)。

哨兵的主要功能是确保Redis系统的高可用性。它通过持续监控Redis节点的状态,并在发现节点故障或下线时自动执行故障转移操作,将从节点提升为新的主节点,以确保服务的连续性。当原始的主节点恢复正常时,哨兵还可以将其重新加入到集群中作为从节点。

哨兵的工作模式如下:

  1. 监控:每个哨兵定期向Redis节点发送心跳检查,以确保节点的健康状态。
  2. 故障检测:如果一个哨兵在一段时间内无法与主节点通信,它将判断主节点宕机,并开始选举新的主节点。
  3. 故障转移:哨兵会选举一个从节点作为新的主节点,并通过发送命令通知其他节点更新配置。
  4. 通知:哨兵会通知客户端Redis节点的变化,使客户端能够连接到新的主节点。
  5. 自动故障恢复:当原主节点恢复时,哨兵会将其重新加入集群作为从节点,保持主从复制的正常工作。

通过使用哨兵,Redis可以在主节点故障时自动实现故障转移,提供高可用性和容错能力,同时减少了手动干预的需求。哨兵可以监控多个Redis节点,并支持多个哨兵组成的集群,以提供更高的可靠性和扩展性。

二、使用哨兵

(1)搭建主从复制服务

启动一个

一主二从

的redis系统,启动参考:

Linux下使用命令行和配置文件两种方式实现主从复制-CSDN博客

主数据库启动在6381端口,从数据库启动在6382 6383端口。

查看主从复制配置信息:

(2)配置哨兵

建立一个配置文件,如 sentinel.conf 内容如下:

#zy-master表示要监控的主数据库名字,可以自定义
sentinel monitor zy-master 127.0.0.1 6381 1
port 26380

(3)启动哨兵

redis-sentinel sentinel.conf

启动后,哨兵会输出如下内容:

(4)验证哨兵的作用(停止6381节点)

杀死主库的服务,即关闭运行在6381端口的实例

等待指定事件后(可以配置,默认30秒),哨兵会输出如下内容:

到 6383 的实例中查看,可以看到已经成为了主节点:

(5)重新启动6381节点

再次查看6383的主从复制信息:

三、原理

1.下线检测

哨兵和主数据库的连接建立完成后,哨兵会定时执行下面3个操作:

  1. 心跳检查(Heartbeat Checks):哨兵会定期向主数据库发送心跳检查,以确保主数据库的健康状态。这样可以及时发现主数据库是否仍然正常工作。

  2. 主观下线检测(Subjective Down Detection):如果哨兵在一定时间内无法与主数据库进行通信,它会认为主数据库发生了故障,并将其标记为主观下线(Subjectively Down)状态。哨兵会将这一信息传播给其他哨兵和相关节点。

  3. 客观下线检测(Objective Down Detection):当多个哨兵都将主数据库标记为主观下线状态后,它们将进行投票并达成共识,确认主数据库的客观下线(Objectively Down)状态。这时哨兵会执行故障转移操作,选择一个从数据库提升为新的主数据库。

sentinel monitor zy-master 127.0.0.1 6381 1


这里的最后一个参数 1 就是最低通过票数

如果配置成 2 ,就表示至少要有两个Sentinel节点认为该主数据库主观下线时,当前哨兵节点才会认为该主数据库客观下线。需要进行故障恢复。但是故障恢复需要由一个领头的哨兵来完成,这样可以保证同一时间只有一个哨兵节点来进行故障恢复。

2. 哨兵的部署

哨兵以独立进程的方式对一个主从系统进行监控,监控的效果好坏取决于哨兵的视角是否具有代表性,如果一个主从系统配置的哨兵较少,哨兵对整个系统的判断的可靠性就会降低。极端情况下,当只有一个哨兵时,哨兵本身就可能会发生单点故障。整体来讲,相对稳妥的哨兵部署方案是使得哨兵的视角

尽可能地与每一个节点的视角一致

,即:

(1)为每个节点(无论是主库还是从库)都部署一个哨兵

(2)使每个哨兵与其对应的节点的网络环境相同或相近。

同时设置


quorum(最低通过票数)


的值为


N/2 + 1


(N为哨兵数量),这样使得只有大部分哨兵节点同意后才会进行故障恢复。



版权声明:本文为weixin_49561506原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。