redis主从同步延迟通过计算master_repl_offset与slave_repl_offset差值判断,需分别连接主从节点获取offset,用bc或awk计算,同时验证master_link_status为up且master_last_io_seconds_ago≤3秒。

直接在 Linux Shell 中检查 Redis 主从同步延迟,核心是获取主从 offset 差值并判断是否超阈值。不依赖外部监控系统,适合脚本化巡检或告警触发。
用 redis-cli + info replication 提取 offset 差值
主从延迟本质是 master_repl_offset - slave_repl_offset 的字节数差距。需分别连主、从节点获取:
- 查主节点 offset:
redis-cli -h master_ip -p 6379 INFO replication | grep master_repl_offset | cut -d: -f2 | tr -d '\r\n' - 查从节点 offset:
redis-cli -h slave_ip -p 6379 INFO replication | grep slave_repl_offset | cut -d: -f2 | tr -d '\r\n' - 差值计算建议用
bc或awk避免 bash 整数限制(尤其大 offset 场景)
一行命令完成判断(推荐用于定时脚本)
以下示例判断延迟是否 ≥ 10000 字节:
master_off=$(redis-cli -h 10.0.1.10 -p 6379 INFO replication 2>/dev/null | awk -F': ' '/master_repl_offset/ {print $2}'); \
slave_off=$(redis-cli -h 10.0.1.11 -p 6379 INFO replication 2>/dev/null | awk -F': ' '/slave_repl_offset/ {print $2}'); \
if [ -n "$master_off" ] && [ -n "$slave_off" ] && [ $(echo "$master_off - $slave_off" | bc) -ge 10000 ]; then \
echo "ALERT: replication lag >= 10000 bytes"; exit 1; \
else \
echo "OK: replication in sync"; exit 0; \
fi
注意:务必加 2>/dev/null 屏蔽连接失败报错,避免干扰判断逻辑;bc 需提前安装。
补充验证:检查主从连接状态和心跳
仅看 offset 不够,还需确认链路是否“假在线”:
- 从节点执行:
redis-cli INFO replication | grep master_link_status—— 必须为up - 同时检查:
redis-cli INFO replication | grep master_last_io_seconds_ago—— 值应 ≤ 3(单位秒),持续 > 5 表示心跳异常 - 两项都正常但 offset 差值大,说明数据已发到从节点但未解析完(如 CPU 高、大 key、Lua 阻塞)
规避常见陷阱
实际使用中容易出错的点:
- 误在主节点上运行
slave_repl_offset查询 —— 该字段只存在于从节点的 INFO 输出中 - 未处理连接超时或认证失败,导致变量为空,
bc报错或比较结果异常 - 用
ping或telnet判断连通性 —— TCP 端口通 ≠ 复制链路通(Redis 复制走专有协议,ICMP/Ping 无意义) - 忽略从节点可能有多个 —— 若一主多从,需对每个从节点单独校验











