健康检查怎么设计
健康检查要分层:liveness 只回答「进程还活着吗」,用 PING 就够;readiness 还要回答「现在能接流量吗」,需要看角色、主从链路、持久化状态与内存水位。两层混用会放大故障——liveness 失败通常意味着重启,readiness 失败只是摘流量,用重命令做 liveness 探针会把一次紧张判成一路重启。
基本信息
| liveness 判据 | PING 返回 PONG |
|---|---|
| readiness 判据 | 角色、主从链路、持久化状态、内存水位 |
| 集群判据 | cluster_state 为 ok |
| 权限 | 建议用只读账号或 ACL 限定命令范围 |
| 频率与超时 | 压测校准,探针本身不能成为负载 |
| 禁忌 | DBSIZE、KEYS 等重命令不能做探针 |
典型使用场景
- 容器编排:liveness 与 readiness 分开配置,避免误重启
- 摘除坏节点:持久化失败或主从断链的节点从流量中摘掉
- 集群与哨兵:角色变化后 readiness 要跟着更新
- 上线灰度:探针确认新实例就绪后再放流量
- 告警消噪:探针只暴露必要信号,避免与业务监控重复告警
最小示例
最小示例
redis-cli PING # liveness:进程是否响应
redis-cli INFO persistence | grep -E 'rdb_last_bgsave_status|aof_last_write_status'
redis-cli INFO replication | grep -E 'role|master_link_status'
redis-cli -c CLUSTER INFO | grep cluster_state # 集群就绪状态
redis-cli INFO memory | grep -E 'maxmemory_human|used_memory_human' # 水位判断
redis-cli --user probe --pass <pw> PING # 专用只读账号做探针探针设计对照
| 层次 | 判据 | 误判风险 |
|---|---|---|
| liveness | PING 是否有响应 | 重命令探针会拖慢实例,甚至造成误重启 |
| readiness | 角色、链路、持久化、水位 | 只看存活会让坏节点继续接流量 |
| 集群就绪 | cluster_state 为 ok | 集群未就绪时接流量会持续报错 |
| 加载中状态 | 实例正在加载数据 | 与真故障混淆会造成不必要的重启 |
liveness 与 readiness 必须分开:前者失败会重启实例,后者失败只摘流量,用错层次会把「暂时不可用」升级成「反复重启」。
探针的频率与超时要压测校准,并给探针配只读账号;探针本身不能成为新的负载来源,也不该使用权限过大的账号。