redis 全量复制条件

本文详细解析了Redis主从复制过程中触发全量复制的多种情况,包括初次连接、主节点runid变更及复制积压缓冲区数据丢失等,并提供了调整repl-backlog-size和client-output-buffer-limit参数来优化主从同步效率的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下情况备节点会做全量复制:
1. 备节点第一次连到主节点。
2. 节点重启,主节点runid会变,备节点runid会丢失,redis <4.0 会发生全量复制。
3. 部分复制失败,以下条件会产生改原因:
    -> 主备失联超过repl-backlog-ttl(默认60分钟),导致复制积压缓冲区数据被清空。
        解决办法:计算合理的repl-backlog-size值大小
                  通过主库每秒增量的master复制偏移量master_repl_offset(info replication指令获取)大小,如每秒offset增加是5MB,那么主实例复制积压缓冲区要保留最近60秒写入内容,backlog_size设置就得大于300MB(60*5)。而从实例重启加载RDB文件是较耗时的过程,如重启某个重实例需120秒(RDB大小和CPU配置相关),那么主实例backlog_size就得设置至少600MB.
    -> 主备失联时间在repl-backlog-ttl之内,但是slave的offset与master可提供部分复制的条件不符,比如复制积压缓冲区的未被同步的数据被部分冲掉或者slave记录的偏移量大于server的记录的偏移量。
        解决办法同上。
        
client-output-buffer-limit这个配置也可能影响主备同步,先看下这个参数配置是什么样的:

client-output-buffer-limit slave 256mb 64mb 60
这里对是客服端是slave的做限制
256mb 是一个硬性限制,当output-buffer的大小大于256mb之后就会断开连接
64mb 60 是一个软限制,当output-buffer的大小大于64mb并且超过了60秒的时候就会断开连接

如果主备全量同步时间过久而且同步时的命令流量过大会导致client output buffer>256M或者>64M 持续的时间超过60秒,则master会主动断开slave,slave后面会再次连接,做全量同步,如果还有相同的问题那么主备会不停的做全量复制长期占有系统资源和网络资源。
解决办法是output-buffer或者关闭限制。

redis主从复制原来推荐文章:

https://blog.youkuaiyun.com/gqtcgq/article/details/51287116

### Redis 主从复制的知识点与学习目标 Redis 主从复制是一种用于实现高可用性和数据冗余的技术方案,其核心目的是通过多个副本提高系统的可靠性和性能。以下是关于 Redis 主从复制的主要知识点和学习目标: --- ### 一、主从复制的核心知识点 #### 1. **主从复制的基本概念** - Redis 支持单向复制功能,即一个 Master(主节点)可以有多个 Slave(从节点)。Slave 节点会自动同步 Master 的数据变化[^1]。 - 复制过程中,Master 不会被阻塞,从而保持对外提供服务的能力。 #### 2. **主从复制的工作机制** - **全量同步**:当 Slave 第一次连接到 Master 或者发生断线重连时,Master 会生成一份 RDB 快照并将其发送给 Slave[^3]。 ```bash # 查看当前主从状态 redis-cli info replication ``` - **部分重同步**:如果网络中断时间较短,Slave 可以基于之前接收到的缓冲区数据继续同步,而无需重新执行全量同步[^5]。 #### 3. **配置方法** - 手动配置:编辑 `redis.conf` 文件,添加如下内容来指定 Master 地址和端口[^2]。 ```conf replicaof <master-ip> <master-port> ``` - 动态配置:通过 CLI 命令实时设置主从关系。 ```bash redis-cli SLAVEOF <master-ip> <master-port> ``` #### 4. **应用场景** - **读写分离**:将大部分读请求分配给 Slave 节点,减轻 Master 的负载压力[^1]。 - **数据备份**:利用 Slave 定期保存数据快照,增强灾难恢复能力。 - **故障转移**:配合 Sentinel 或 Cluster 实现自动化故障切换[^3]。 #### 5. **延迟检测与优化** - 使用脚本监测主从之间的偏移差值,及时发现潜在问题。 ```bash #! /bin/bash MASTER_OFFSET=$(redis-cli -h master-host -p 6379 info replication | grep master_repl_offset | cut -d: -f2) SLAVE_OFFSET=$(redis-cli -h slave-host -p 6380 info replication | grep master_repl_offset | cut -d: -f2) DELAY=$((MASTER_OFFSET - SLAVE_OFFSET)) if [ "$DELAY" -gt 100000 ]; then echo "ALERT: Replication delay exceeds 100,000 bytes" fi ``` #### 6. **故障切换流程** - 模拟主节点宕机: ```bash redis-cli -h master-host -p 6379 DEBUG SEGFAULT ``` - 观察从节点的状态变化: ```bash redis-cli -h slave-host -p 6380 info replication | grep master_link_status ``` - 如果启用了 Sentinel,系统会自动选举新的 Master 并通知客户端更新地址。 --- ### 二、学习目标 1. **理论层面** - 理解主从复制的作用及其在分布式架构中的重要性[^1]。 - 掌握 Redis全量同步与增量同步的具体实现细节[^5]。 2. **实践技能** - 能够独立完成 Redis 主从复制的手动配置及动态调整[^2]。 - 编写脚本来监控主从延迟,并针对异常情况进行排查和修复。 3. **高级应用** - 结合 Sentinel 或 Cluster 技术构建更复杂的高可用解决方案[^5]。 - 对比分析不同部署方式(如 Docker、源码编译等)的优势与局限性[^2]。 4. **性能调优** - 学习如何平衡主从数量以降低对 Master 的影响[^1]。 - 设计合理的拓扑结构满足特定业务需求的同时兼顾成本控制。 --- ### 三、操作指南 #### 1. **环境准备** - 下载并安装 Redis,确保版本兼容性。 - 配置防火墙规则开放必要的通信端口。 #### 2. **基础配置** - 修改 Master 和 Slave 的 `redis.conf` 文件,分别定义监听地址和其他必要参数。 - 在 Slave 配置中加入以下指令指向对应的 Master: ```conf replicaof <master-ip> <master-port> ``` #### 3. **启动服务** - 分别启动 Master 和 Slave 进程: ```bash redis-server /path/to/master/redis.conf redis-server /path/to/slave/redis.conf ``` #### 4. **验证效果** - 登录任意一个实例检查主从状态是否正常: ```bash redis-cli info replication ``` #### 5. **测试稳定性** - 断开网络观察 Slave 是否能够快速恢复同步。 - 测试极端条件下(如 Master 宕机)的整体表现。 --- ### 四、总结 通过对 Redis 主从复制的学习,不仅可以加深对内存数据库工作机制的理解,还能为后续探索更高阶的功能打下坚实的基础。无论是日常运维还是项目开发阶段,熟练运用这一特性都将极大提升工作效率和服务质量。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

金士顿

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值