Redis集群配置关键步骤
apt
、yum
)或源码编译安装。每台节点的redis.conf
需调整以下关键参数:
cluster-enabled yes
(必须设置为yes
,否则节点以单机模式运行)。cluster-config-file nodes-<port>.conf
(如nodes-7000.conf
),节点会自动维护该文件记录集群状态(无需人工修改)。cluster-node-timeout 15000
(单位:毫秒),用于判定节点失联(如超过该时间无法连接大部分主节点,节点将停止接收请求)。appendonly yes
(开启AOF持久化),appendfsync everysec
(折衷性能与数据安全,每秒同步一次),避免数据丢失。bind 0.0.0.0
(允许所有IP访问,若需限制可指定具体IP)、protected-mode no
(关闭保护模式,需配合集群密码)、requirepass yourpassword
(集群密码,所有节点需一致)、masterauth yourpassword
(从节点连接主节点的认证密码)。cluster-port <Redis端口+10000>
(如7000端口的集群总线端口为17000),用于节点间通信(Gossip协议交换信息)。在每个节点上执行以下命令启动Redis实例(需指定对应的配置文件路径):
redis-server /path/to/redis-<port>.conf
示例(6个节点):
redis-server /etc/redis/redis-7000.conf
redis-server /etc/redis/redis-7001.conf
# ... 其他节点
启动后,可通过redis-cli -p <port> ping
验证节点是否正常运行(返回PONG
表示成功)。
使用redis-cli
工具初始化集群(推荐方式),任选一台节点执行:
redis-cli --cluster create \
<node1-ip>:<port> <node2-ip>:<port> <node3-ip>:<port> \ # 3个主节点
<node4-ip>:<port> <node5-ip>:<port> <node6-ip>:<port> \ # 3个从节点
--cluster-replicas 1 # 每个主节点配1个从节点
示例(6个节点IP为192.168.1.1-6,端口7000-7005):
redis-cli --cluster create \
192.168.1.1:7000 192.168.1.2:7000 192.168.1.3:7000 \
192.168.1.4:7000 192.168.1.5:7000 192.168.1.6:7000 \
--cluster-replicas 1
执行后会提示确认节点分配,输入yes
即可完成集群创建。
redis-cli -h <node-ip> -p <port> cluster info
关键指标:cluster_state:ok
(集群正常)、slots_assigned:16384
(所有槽已分配)、cluster_size:3
(3个主节点)。redis-cli -h <node-ip> -p <port> cluster nodes
输出应显示6个节点,包含主从角色(master
/slave
)、槽位范围(如0-5460
)及节点ID。redis-cli -h 192.168.1.1 -p 7000 set foo bar
若槽位不属于当前节点,会返回MOVED 3999 192.168.1.2:7000
,客户端需重定向到目标节点。# 添加节点到集群
redis-cli --cluster add-node new_node_ip:new_port existing_node_ip:existing_port
# 重新分片(将300个槽从现有节点迁移到新节点)
redis-cli --cluster reshard existing_node_ip:existing_port
# 输入要移动的槽数、目标节点ID(新节点ID)、源节点ID(all表示从所有主节点平均分配)
# 迁移槽(将节点7005的槽迁移到节点7000)
redis-cli --cluster reshard 7000
# 输入要移动的槽数(节点7005的槽数)、目标节点ID(7000的ID)、源节点ID(7005的ID)
# 移除节点
redis-cli --cluster del-node new_node_ip:new_port node_id
cluster-node-timeout
超时),也可手动触发:redis-cli -h <slave-ip> -p <slave-port> cluster failover
手动故障转移需输入yes
确认。