Redis哨兵原理,我忍你很久了!

1. Redis哨兵简介

Redis(Remote Dictionary Server)是一种开源的基于键值对的 NoSQL 数据库,其由Salvatore Sanfilippo 开创。每个键都是独一无二的,其可以存储多达232字节的字符串或二进制数据。Redis的内存特性和易于使用的APIs已经使其变得非常流行。

但是,Redis本身不支持高可用性(High Availability,HA),当主节点发生故障时,Redis将无法自动切换到从节点,并继续提供服务。因此,Redis的开发人员推出了一个名为“Sentinel”的工具,该工具可以监控多个Redis节点,并在主节点出现故障时自动完成故障转移。

2. Redis哨兵架构

Redis Sentinel架构包含多个Redis节点,其中每个节点都可以用作主节点,从节点或哨兵节点。主节点和从节点是Redis节点的两种常见类型。哨兵节点是一种特殊类型的节点,用于监视Redis节点的工作情况并执行故障转移。

2.1 主从复制

Redis主从复制是一种异步复制机制,其中数据从主节点复制到一个或多个从节点。主节点将执行所有写操作,并向所有连接的从节点发送写操作。从节点只能被用于读取,因为写入只能由主节点执行。此外,Redis数据同步过程是基于复制的,从一台Redis节点向另一台节点复制数据。

下面是一个 Redis 主从复制的示例,其中主节点(192.168.5.2:6379)有两个从节点。

port 6379

host 192.168.5.2

replicaof 192.168.5.1 6379

port 6380

host 192.168.5.3

replicaof 192.168.5.1 6379

port 6381

host 192.168.5.4

replicaof 192.168.5.1 6379

2.2 Redis哨兵

Redis哨兵是一个特殊的Redis节点类型,可以用于监视多个Redis节点,并在主节点出现故障时协调故障转移。在具有哨兵的Redis群集中,哨兵节点通过将其角色设置为监视程序来运行。

在默认情况下,哨兵会每间隔10秒到60秒之间的随机时间间隔检查Master节点是否正常,并且如果Master节点异常,则触发故障转移程序。

3. Redis哨兵故障转移

Redis哨兵故障转移的核心思想是在主节点发生故障时,将某个从节点升级为新的主节点,并将其他从节点切换到新的主节点。哨兵维护多个Redis节点的状态信息,并在主节点发生故障时自动完成故障转移。

因此,哨兵必须检测和监视状态信息,包括:

Master节点是否在线?

Slave节点是否正常工作?

节点是否是可用的?

节点可用性的优先级如何?

当主节点发生故障时,哨兵触发故障转移,并按以下步骤处理:

1. 向其他哨兵请求是否认为当前主节点已经下线。

2. 如果大多数哨兵回复主节点已下线,则执行故障转移,否则这个哨兵继续等待。

3. 哨兵选举新主节点。如:根据优先级选择等计算方法选主,并降低所有Salve节点与主节点之间的复制延迟,待数据同步完成。

4. 当主节点不再宕机,并且剩余的从节点成功同步新的主节点时,Redis哨兵可通过以下步骤恢复:对于每个从节点,哨兵向其发送 SLAVEOF NO ONE 命令,将其转换为主节点,并将其余的从节点切换到新主节点。

4. 总结

Redis哨兵是Redis群集中的重要组件,用于自动检测主节点的故障并协作进行故障转移。哨兵通过在多个Redis节点之间进行状态信息交换来实现监视和检测,以保持高可用性和可拓展性。并且在发生故障是,哨兵将让一个或多个从节点成为新的主节点,并将其他从节点连接到该新主节点。

数据库标签