复制状态一眼看清
INFO replication 段落是判断主从拓扑与健康度的第一手数据:role 决定后面的字段布局,主库侧给出各从库的地址、在线状态、已同步偏移与滞后秒数,从库侧给出所属主库地址、链路状态、最后一次收到数据距今多久。排障时先读这一段,再决定要不要翻慢日志和网络指标。
基本信息
| 命令 | redis-cli INFO replication(可加 -h/-p 指定实例) |
|---|---|
| 适用版本 | Redis 2.8 及以上,字段随版本持续增补 |
| 权限 | 只读账号即可,不需要管理员权限 |
| 输出 | 纯文本段落,每行 key:value |
典型使用场景
- 核对主从拓扑:确认从库挂在预期的节点上,有没有意料之外的级联复制
- 判断复制健康:链路是否为 up、滞后是否在阈值内、偏移是否还在前进
- 排查从库掉线:区分是被主库主动断开(输出缓冲超限)还是自身网络问题
- 切换前后确认:切换前确认目标从库偏移已追平,切换后确认原主已转为从库
- 容量与延迟评估:用偏移差值估算落后数据量,判断链路带宽是否够用
排查示例
排查示例
redis-cli INFO replication | grep role # 先确认这台是主还是从
redis-cli INFO replication | grep -E 'connected_slaves|master_repl_offset' # 主库视角
redis-cli -h 10.0.0.12 INFO replication | grep master_link_status # 从库链路状态
watch -n 5 "redis-cli INFO replication | grep -E 'slave[0-9]+:.*lag'" # 持续观察滞后
redis-cli INFO replication | grep master_last_io_seconds_ago # 从库最后一次收到数据主库字段读法
| 字段 | 含义 | 正常与异常 |
|---|---|---|
| role | master 或 slave,决定后续字段布局 | 与预期角色不符先查复制关系 |
| connected_slaves | 已连接的从库数量 | 少于拓扑记录说明有从库掉线 |
| slaveN:ip= port= state= | 第 N 个从库的地址与状态 | state 非 online 即异常 |
| slaveN 的 offset | 该从库已同步到的偏移 | 与主库差值持续扩大即落后 |
| slaveN 的 lag | 距上次收到确认的秒数 | 持续大于 10 秒视为滞后 |
| master_repl_offset | 主库写入总偏移 | 突降说明实例被重置或换主 |
| repl_backlog_active / size | 复制积压缓冲状态与大小 | size 过小会频繁触发全量同步 |
从库字段读法
| 字段 | 含义 | 正常与异常 |
|---|---|---|
| master_host / master_port | 所属主库地址 | 与拓扑记录不符说明被人改过 |
| master_link_status | up 或 down | down 期间从库可能仍在提供旧数据 |
| master_last_io_seconds_ago | 距上次收到主库数据的秒数 | 超过几个心跳周期即异常 |
| master_sync_in_progress | 是否正在全量同步 | 为 1 时数据尚不完整 |
| slave_repl_offset | 从库已应用的数据偏移 | 与主库偏移之差反映积压量 |
| slave_priority | 参与主库选举的优先级 | 值越小越优先被提升 |
字段名保留 slave 前缀属于历史命名,与 replica 同义(REPLICAOF 是 SLAVEOF 的别名)。不同版本会增补字段,解析脚本按前缀匹配比写死完整字段名更稳。
判断滞后不要只看 lag:它是秒级粗粒度且可能瞬时归零,结合主从 offset 差值更可靠;换算落后字节量时用 master_repl_offset 减去从库侧偏移即可。