8.5.4 复制、集群与网络故障排查
复制、集群与网络故障排查#
本节聚焦 Redis 复制链路、集群分片与网络层面的常见故障,提供原理草图、排查命令、恢复流程与演练练习,确保数据一致性与服务可用性。
一、复制故障排查#
1. 状态检查与关键指标
# 连接主库
redis-cli -h 10.0.0.10 -p 6379 INFO replication
# 预期:role:master / connected_slaves / master_repl_offset
# 连接从库
redis-cli -h 10.0.0.11 -p 6379 INFO replication
# 预期:role:slave / master_link_status:up / master_last_io_seconds_ago:<=1
# 快速识别角色
redis-cli -h 10.0.0.10 -p 6379 ROLE
# 监控复制延迟与积压缓冲区
redis-cli -h 10.0.0.10 -p 6379 CONFIG GET repl-backlog-*
2. 常见问题与处理(含配置示例)
- 全量同步频繁(
Full resync) - 原因:
repl-backlog-size过小、网络抖动、主库重启频繁 - 处理:增大
repl-backlog-size,设置repl-backlog-ttl
# /etc/redis/redis.conf
repl-backlog-size 256mb
repl-backlog-ttl 3600
# 使配置生效(无需重启)
redis-cli -h 10.0.0.10 -p 6379 CONFIG SET repl-backlog-size 268435456
redis-cli -h 10.0.0.10 -p 6379 CONFIG SET repl-backlog-ttl 3600
- 复制延迟高
- 原因:主库写入高峰、从库慢、网络抖动
- 处理:检查慢查询、提升从库资源、开启无盘复制
# 查看慢日志
redis-cli -h 10.0.0.10 -p 6379 SLOWLOG GET 10
# 启用无盘复制
redis-cli -h 10.0.0.10 -p 6379 CONFIG SET repl-diskless-sync yes
- 断链重连失败
- 原因:
masterauth错误、protected-mode、防火墙阻断 - 处理:校验认证配置、开放端口、检查
bind
# 从库配置
# /etc/redis/redis.conf
replicaof 10.0.0.10 6379
masterauth "StrongPass"
# 检查端口连通
nc -zv 10.0.0.10 6379
3. 一致性与数据丢失控制
# 要求至少2个从库、延迟不超过2秒
redis-cli -h 10.0.0.10 -p 6379 CONFIG SET min-replicas-to-write 2
redis-cli -h 10.0.0.10 -p 6379 CONFIG SET min-replicas-max-lag 2
# 检查配置是否生效
redis-cli -h 10.0.0.10 -p 6379 CONFIG GET min-replicas-*
二、集群故障排查#
1. 集群状态与健康检查
# 集群基本状态
redis-cli -c -h 10.0.0.21 -p 6379 CLUSTER INFO
# 节点拓扑与健康
redis-cli -c -h 10.0.0.21 -p 6379 CLUSTER NODES
# 自动诊断槽位与节点
redis-cli --cluster check 10.0.0.21:6379
2. 常见问题处理
- 槽位丢失/未分配
# 为节点补槽(示例:补0~5000)
redis-cli -c -h 10.0.0.21 -p 6379 CLUSTER ADDSLOTS {0..5000}
- 主节点下线导致不可用
- 排查
cluster-require-full-coverage是否严格要求全覆盖
# 临时允许服务降级(不推荐长期)
redis-cli -c -h 10.0.0.21 -p 6379 CONFIG SET cluster-require-full-coverage no
- 频繁故障转移
- 排查心跳超时与资源压力
# 调整节点超时
redis-cli -c -h 10.0.0.21 -p 6379 CONFIG SET cluster-node-timeout 10000
3. 迁移与重分片风险控制
# 执行重分片(避免高峰期)
redis-cli --cluster reshard 10.0.0.21:6379
# 查看集群key分布与热点风险(抽样)
redis-cli -c -h 10.0.0.21 -p 6379 --scan --pattern "*"
三、网络故障排查#
1. 网络连通性与延迟
# 基础连通性
ping -c 3 10.0.0.10
# 路由与抖动
traceroute 10.0.0.10
mtr -rw 10.0.0.10
# Redis端口监听
ss -tulnp | grep 6379
2. 连接耗尽与超时
# 连接数与阻塞客户端
redis-cli -h 10.0.0.10 -p 6379 INFO clients
# 调整最大连接数
redis-cli -h 10.0.0.10 -p 6379 CONFIG SET maxclients 10000
3. 防火墙与安全策略
# 检查端口开放(Redis与集群总线)
nc -zv 10.0.0.10 6379
nc -zv 10.0.0.10 16379
# Linux防火墙放行
iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
iptables -I INPUT -p tcp --dport 16379 -j ACCEPT
四、故障恢复与演练建议#
1. 单点故障演练
# 模拟主库宕机
systemctl stop redis
# 在从库查看是否完成切换(若使用哨兵/集群)
redis-cli -h 10.0.0.11 -p 6379 ROLE
2. 数据不一致处理
# 检查主从偏移
redis-cli -h 10.0.0.10 -p 6379 INFO replication | grep master_repl_offset
redis-cli -h 10.0.0.11 -p 6379 INFO replication | grep slave_repl_offset
# 必要时全量重建(从库)
redis-cli -h 10.0.0.11 -p 6379 SLAVEOF 10.0.0.10 6379
3. 练习题(带命令要求)
- 练习1:模拟网络抖动后从库重新全量同步,记录 master_link_status 变化与 Full resync 日志。
- 练习2:将 repl-backlog-size 调整为 64MB 与 256MB,比较断链后恢复时间。
- 练习3:在集群中人为下线主节点,观察 CLUSTER NODES 的 fail 标记与故障转移耗时。
通过“指标→命令→处理→演练”闭环,能够快速定位复制、集群与网络链路的故障根因,降低不可用时间并提升 Redis 高可用稳定性。