适用场景:
创建主从关系时默认参数 --cluster-replicas 1
会自动分配从节点。
为了能精确控制 Redis Cluster 的主从拓扑结构,我们通过 Redis Cluster 的手动分片功能来实现
一、手动指定主从关系的方法
使用 redis-cli --cluster-replicas 0
先创建纯主节点集群,再通过 CLUSTER REPLICATE
命令手动分配从节点。
步骤 1:创建仅包含主节点的集群
redis-cli --cluster create \172.18.0.2:7001 172.18.0.3:7002 172.18.0.4:7003 \--cluster-replicas 0 # 不自动分配从节点,仅创建3个主节点
步骤 2:获取主节点 ID
redis-cli -c -h 172.18.0.2 -p 7001 cluster nodes
输出示例(截取部分):
a7aa5... 172.18.0.2:7001 myself,master - 0 1684224000000 1 connected 0-5460
b3bb6... 172.18.0.3:7002 master - 0 1684224001000 2 connected 5461-10922
c2cc7... 172.18.0.4:7003 master - 0 1684224002000 3 connected 10923-16383
记录每个主节点的 ID(如 a7aa5...
、b3bb6...
、c2cc7...
)。
步骤 3:将从节点分配给指定主节点
# 让 172.18.0.5 成为 172.18.0.2 的从节点
redis-cli -c -h 172.18.0.5 -p 7004 cluster replicate a7aa5...# 让 172.18.0.6 成为 172.18.0.3 的从节点
redis-cli -c -h 172.18.0.6 -p 7005 cluster replicate b3bb6...# 让 172.18.0.7 成为 172.18.0.4 的从节点
redis-cli -c -h 172.18.0.7 -p 7006 cluster replicate c2cc7...
二、验证主从关系
# 查看任意节点的集群状态
redis-cli -c -h 172.18.0.2 -p 7001 cluster nodes
输出应显示明确的主从关系,例如:
a7aa5... 172.18.0.2:7001 myself,master - 0 1684224000000 1 connected 0-5460
b3bb6... 172.18.0.3:7002 master - 0 1684224001000 2 connected 5461-10922
c2cc7... 172.18.0.4:7003 master - 0 1684224002000 3 connected 10923-16383
d4dd8... 172.18.0.5:7004 slave a7aa5... 0 1684224003000 4 connected
e5ee9... 172.18.0.6:7005 slave b3bb6... 0 1684224004000 5 connected
f6ff0... 172.18.0.7:7006 slave c2cc7... 0 1684224005000 6 connected
三、完整脚本示例
以下是自动化上述过程的脚本:
#!/bin/bash# 创建主节点集群
redis-cli --cluster create \172.18.0.2:7001 172.18.0.3:7002 172.18.0.4:7003 \--cluster-replicas 0# 获取主节点 ID
MASTER1_ID=$(redis-cli -c -h 172.18.0.2 -p 7001 cluster nodes | grep "172.18.0.2:7001" | awk '{print $1}')
MASTER2_ID=$(redis-cli -c -h 172.18.0.2 -p 7001 cluster nodes | grep "172.18.0.3:7002" | awk '{print $1}')
MASTER3_ID=$(redis-cli -c -h 172.18.0.2 -p 7001 cluster nodes | grep "172.18.0.4:7003" | awk '{print $1}')# 分配从节点
redis-cli -c -h 172.18.0.5 -p 7004 cluster replicate $MASTER1_ID
redis-cli -c -h 172.18.0.6 -p 7005 cluster replicate $MASTER2_ID
redis-cli -c -h 172.18.0.7 -p 7006 cluster replicate $MASTER3_ID# 验证集群状态
echo "集群状态:"
redis-cli -c -h 172.18.0.2 -p 7001 cluster nodes
四、注意事项
- 节点启动顺序:
确保所有节点(包括主从)都已启动并运行,否则CLUSTER REPLICATE
可能失败。 - 数据一致性:
手动分配从节点后,从节点会自动同步主节点的数据。同步期间可能影响性能。 - 故障转移:
主节点故障时,对应的从节点会自动提升为主节点,与自动分配的效果相同。 - 配置持久化:
节点配置会保存在nodes.conf
文件中(通过cluster-config-file
指定),重启后仍然有效。