Redis高可用(主从复制、哨兵模式)详解

Redis高可用(主从复制、哨兵模式)详解

在这里插入图片描述

Redis是一种高性能的键值存储系统,能够通过多种机制来实现高可用性,这些机制主要包括主从复制(Replication)和哨兵模式(Sentinel)。

Redis 主从复制(Replication)

一、主从复制简介

Redis的主从复制是一种实现数据冗余和读写分离的机制,通过将数据从主节点(Master)复制到一个或多个从节点(Slave),确保系统中有多个副本以提高数据可靠性和读取性能。

二、工作原理

1. 主节点和从节点
  • 主节点(Master):处理所有的写操作,并将数据变化传播到从节点。

在这里插入图片描述

  • 从节点(Slave):复制主节点的数据,并提供只读访问。当主节点发生变化时,从节点会同步这些变化。

在这里插入图片描述

2. 数据传输方式:异步复制
  • Redis的主从复制主要是异步的,即主节点在完成写操作后并不等待从节点的确认。
  • 从节点会周期性地向主节点请求同步数据。

在这里插入图片描述

三、主从复制过程

在这里插入图片描述

1. 初次同步(全量复制)

当一个从节点第一次连接到主节点或重新连接时,会进行全量复制:

  1. 从节点发送同步命令:从节点向主节点发送PSYNC命令,请求同步数据。
  2. 主节点生成RDB文件:主节点执行一个后台保存操作(BGSAVE),并生成一个新的RDB快照文件。
  3. 主节点发送RDB文件:生成的RDB文件通过网络发送到从节点,从节点接收后加载到内存中。

在这里插入图片描述

  1. 主节点发送缓冲区数据:在主节点生成RDB文件期间,所有写操作的命令会被暂存在缓冲区中。RDB文件发送完毕后,这些缓冲区中的命令会被依次发送给从节点。
  2. 从节点应用命令:从节点将接收到的增量命令应用到自身的数据集中,以保持与主节点的数据一致。
    在这里插入图片描述
2. 增量同步(部分复制)

在全量复制之后,主从节点之间进行的是增量同步,也称为部分复制:

  1. 增量复制:主节点将所有新的写操作命令发送给从节点。
  2. 命令传播:主节点会对每个写操作生成相应的Redis命令,并通过复制流发送给从节点。
  3. 从节点执行命令:从节点接收到命令后,立即执行这些命令来更新自身数据。
3. 断线重连
  • 在网络故障或其他原因导致主从断线时,从节点会自动尝试重新连接主节点。
  • 如果重新连接成功,并且主节点的复制积压缓冲区(Replication Backlog)中仍然有未发送给从节点的数据,则可以进行部分复制,避免重新进行全量复制。

四、配置步骤

1. 主节点配置

主节点不需要特别配置,只需启动一个Redis实例即可。

2. 从节点配置

在从节点的配置文件(redis.conf)(永久的)中,设置以下参数:

在这里插入图片描述

replicaof <master-ip> <master-port>

如果主节点的IP地址为192.168.1.100,端口为6379,配置如下:

replicaof 192.168.1.100 6379

或者在从节点运行时(暂时的)使用命令:

SLAVEOF 192.168.1.100 6379

在这里插入图片描述

五、复制细节和优化

1. 复制积压缓冲区(Replication Backlog)
  • 定义:这是一个固定大小的环形缓冲区,用于存储最近的写操作命令。

在这里插入图片描述

  • 作用:在从节点短时间断开后重连时,可以利用缓冲区中的数据进行部分复制,避免全量复制。
  • 配置:可以通过repl-backlog-size参数设置缓冲区大小。
2. 心跳机制
  • 作用:保持主从节点之间的连接存活,并监控复制状态。
  • 机制:从节点周期性地发送PING命令给主节点,主节点响应PONG。如果主节点长时间没有收到从节点的心跳,会标记该从节点为失效。
3. 复制延迟
  • 定义:从节点同步数据的速度可能会滞后于主节点,产生延迟。
  • 原因:网络状况、从节点负载等。
  • 监控:可以通过INFO replication命令查看复制延迟。

二、Redis哨兵模式(Sentinel)

在这里插入图片描述
Redis Sentinel是一个健壮的分布式系统,其中多个Sentinel需要就给定的主节点不再可用的事实达成一致。然后,故障转移过程开始选择一个新的主节点。

在这里插入图片描述

一、工作原理

哨兵模式通过一组哨兵进程来监控主从结构的健康状态,确保系统的自动化故障转移和通知功能。

在这里插入图片描述
哨兵(Sentinel)是一个重要的组件,负责监控Redis集群中的主节点(Master)和从节点(Slave),并在主节点失效时自动进行故障转移。

1. 监控
  • 哨兵群集:通常由多个哨兵节点组成,它们通过选举形成一个领导者,负责执行监控任务。
  • 监控对象:哨兵节点定期向Redis主节点和从节点发送PING命令,检查它们是否可达。

在这里插入图片描述

2. 故障检测
  • 主节点失效检测:当哨兵节点检测到主节点不可达时,会将其标记为下线。
  • 从节点失效检测:如果一个从节点失效,哨兵会通知主节点,并在必要时将其重新配置为新的从节点。
3. 故障转移
  • 选举领导者:哨兵群集中的哨兵会进行选举,选择一个哨兵作为领导者负责执行故障转移操作。

在这里插入图片描述

  • 选举条件:通过Raft算法进行选举,选举条件包括优先级、运行ID等。
4. 自动故障转移
  • 故障转移过程
    • 哨兵检测到主节点失效后,从当前的从节点中选举一个升级为新的主节点。
    • 哨兵更新集群中其他从节点的配置,使它们成为新主节点的从节点。
    • 客户端和应用可以通过哨兵的监听地址连接到新的主节点。
5. 手动故障转移
  • 手动干预:管理员可以通过哨兵提供的命令手动触发故障转移过程,以便在维护期间进行控制和调整。

二、哨兵选举机制

在Redis Sentinel中,选举机制是确保在主节点(Master)失效后,哨兵群集能够协作选举出一个新的主节点的关键过程。
在这里插入图片描述

1. 哨兵领导者选举

Redis Sentinel中的哨兵节点在运行时会进行领导者选举,领导者负责执行故障检测和故障转移操作。选举过程基于Raft算法的思想,但具体实现可能有所不同。

  • 哨兵运行ID(runid):每个哨兵节点在启动时生成一个唯一的runid,用于标识该哨兵节点的身份。

  • 优先级(priority):哨兵节点可以配置一个优先级,用于决定在选举领导者时的重要性。

选举条件:
  • 单一领导者:在任何时刻,哨兵群集中应该只有一个领导者,以确保操作的一致性和可靠性。

  • 运行ID比较:哨兵根据各自的运行ID来决定谁应该成为领导者。通常,具有最新运行ID的哨兵会有更高的优先级。

  • 优先级考量:如果多个哨兵具有相同的运行ID,优先级较高的哨兵将更有可能被选为领导者。

2. 主节点故障后的选举过程

当哨兵检测到Redis的主节点失效时,选举新的主节点的过程通常如下:

  • 哨兵检测失效:一旦哨兵节点检测到主节点不可用(例如通过心跳检测),它会开始选举新的主节点。

  • 选举领导者:哨兵群集中的哨兵节点开始通信,以决定哪一个哨兵节点将负责执行故障转移。通常,哨兵节点会互相通信,比较彼此的优先级和运行ID来决定新的领导者。

  • 执行故障转移:一旦新的领导者选举出来,它将负责将一个从节点提升为新的主节点,并更新其他哨兵节点和从节点的配置,确保整个Redis集群能够继续工作。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喻师傅

谢谢您!我会继续努力创作!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值