Redis主从复制模式详细介绍
1. 主从复制概述
主从复制(Master-Slave Replication)是Redis最基本的高可用架构,一个主节点(Master)可以有多个从节点(Slave),主节点负责写操作,从节点负责读操作。
2. 工作原理
2.1 复制过程
-
建立连接
- 从节点发送SYNC/PSYNC命令给主节点
- 主节点收到命令后开始准备RDB文件
- 主节点创建后台进程生成RDB文件
-
数据同步
- 主节点将RDB文件发送给从节点
- 从节点清空当前数据库
- 从节点加载RDB文件
- 主节点将缓冲区命令发送给从节点
-
命令传播
- 主节点持续将写命令发送给从节点
- 从节点执行接收到的命令
- 保持数据一致性
2.2 复制类型
-
全量复制
- 适用于第一次复制
- 主节点将所有数据发送给从节点
- 过程较慢,消耗网络带宽
-
部分复制
- 适用于断线重连
- 只复制断线期间的数据
- 效率较高
3. 配置方法
3.1 从节点配置
方法1:配置文件redis.conf
slaveof 127.0.0.1 6379
slave-read-only yes
方法2:命令行配置
redis-cli> SLAVEOF 127.0.0.1 6379
3.2 主节点配置
redis.conf
bind 0.0.0.0
protected-mode no
3.3 安全配置
设置主节点访问密码
requirepass master_password
从节点访问主节点的密码
masterauth master_password
4. 监控和管理
4.1 状态查看命令
查看复制相关信息
INFO replication
查看主从连接状态
ROLE
查看从节点延迟
REDIS-CLI --stat
4.2 常用管理命令
断开主从关系
SLAVEOF NO ONE
手动触发同步
SLAVEOF 127.0.0.1 6379
查看复制积压缓冲区
INFO replication
5. 优化建议
5.1 网络优化
- 主从节点最好在同一内网
- 配置合适的TCP keepalive
- 设置合理的超时时间
5.2 性能优化
设置复制积压缓冲区大小
repl-backlog-size 1mb
设置复制超时时间
repl-timeout 60
设置TCP keepalive
tcp-keepalive 300
5.3 配置优化
从节点优先使用磁盘加载
repl-diskless-sync no
设置同步延迟
repl-diskless-sync-delay 5
设置复制积压缓冲区过期时间
repl-backlog-ttl 3600
6. 常见问题处理
6.1 复制中断
原因:
- 网络问题
- 主节点重启
- 内存不足
解决方案:
- 检查网络连接
- 增加超时时间
- 扩充内存
- 开启自动重连
6.2 数据不一致
原因:
- 网络延迟
- 配置错误
- 人为操作
解决方案:
- 手动触发全量同步
- 检查配置参数
- 监控主从延迟
6.3 性能问题
原因:
- 全量复制频繁
- 网络带宽不足
- 从节点太多
解决方案:
- 优化复制策略
- 提升网络带宽
- 合理控制从节点数量
7. 最佳实践
7.1 架构建议
- 一主多从,不建议超过3个从节点
- 主从节点配置相同
- 主从节点版本一致
7.2 配置建议
主节点配置
protected-mode no
requirepass password
maxmemory 4gb
从节点配置
slaveof master_ip master_port
masterauth password
slave-read-only yes
7.3 运维建议
- 定期备份数据
- 监控主从延迟
- 设置警告阈值
- 做好容灾预案
8. 使用场景
8.1 适用场景
- 读多写少的应用
- 数据备份需求
- 小规模集群
- 开发测试环境
8.2 不适用场景
- 写入压力大
- 需要自动故障转移
- 大规模集群
- 高可用要求严格
9. 监控指标
9.1 关键指标
- 主从延迟时间
- 连接状态
- 复制积压缓冲区大小
- 同步失败次数
9.2 监控命令
延迟监控
redis-cli info replication | grep lag
状态监控
redis-cli info replication | grep state
内存监控
redis-cli info memory
10. 总结
Redis主从复制模式是一个简单但实用的高可用方案,适合中小规模应用。它的优点是配置简单、维护方便,缺点是不支持自动故障转移。在实际使用中,需要根据业务需求做好监控和优化,确保数据的可靠性和一致性。