*Redis CLUSTER REPLICAS 命令
CLUSTER REPLICAS 返回指定主节点(master)的所有副本节点(replica)列表。
*语法
CLUSTER REPLICAS node-id
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| node-id | String | 是 | 目标主节点的节点 ID(40 位十六进制字符串) |
*返回值
- Array:副本节点信息数组,每个元素为一行文本,格式与 CLUSTER NODES 中副本行相同。若主节点没有副本,返回空数组。
*时间复杂度
O(1)
*
*示例
*查看主节点的副本
> CLUSTER REPLICAS 3c3a0c74aae0b56179ccb1a76b7850a3b1f1b26b
1) "e7d1eecce10fd2bb2b5f7755b0c1d6c2d1e1f2a3 192.168.1.13:6379@16379 slave 3c3a0c74aae0b56179ccb1a76b7850a3b1f1b26b 0 1700000003000 1 connected"
2) "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0 192.168.1.16:6379@16379 slave 3c3a0c74aae0b56179ccb1a76b7850a3b1f1b26b 0 1700000004000 1 connected"
*没有副本的主节点
> CLUSTER REPLICAS 67ed2db8d677e59ec4a4cefb06858cf2a1a89fa1
(empty array)
*错误的主节点 ID
> CLUSTER REPLICAS not-a-valid-node-id
(error) ERR Unknown node not-a-valid-node-id
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR Unknown node ... | 提供的 node-id 不存在或不是主节点 | 通过 CLUSTER NODES 确认正确的主节点 ID |
| ERR wrong number of arguments | 未提供 node-id 参数 | 补充目标主节点 ID |
| ERR This instance has cluster support disabled | 未启用集群模式 | 在 redis.conf 中设置 cluster-enabled yes |
*最佳实践
- 用于检查主节点的副本拓扑,评估高可用性。若主节点没有副本,故障时将无法自动转移,存在单点故障风险
- 副本行中的
lag信息(通过解析输出中的字段)可用于判断副本同步延迟 - 在故障转移后,原主节点可能变成副本,此时查询其 ID 会返回
ERR Unknown node(因为它不再是主节点)。建议查询前先通过 CLUSTER NODES 确认节点角色 - 生产环境建议监控每个主节点的副本数量,确保至少有一个在线副本
*FAQ
Q1: 为什么查询一个副本节点的 ID 会报错?
A: CLUSTER REPLICAS 只能查询主节点。查询副本节点会返回 ERR Unknown node,因为副本节点本身没有副本。
Q2: 如何获取副本的同步延迟?
A: 在 CLUSTER NODES 输出中,副本行倒数第二个字段(pong-recv 之后的字段)可间接反映延迟。更精确的延迟可使用 INFO replication 中的 master_last_io_seconds_ago 字段。
Q3: 可以查询 myself 主节点的副本吗?
A: 可以。只要当前节点是主节点,就可以用 CLUSTER REPLICAS 查询自身的节点 ID,返回其副本列表。