Redis在Ubuntu上的扩容流程(以集群模式为例)
在新服务器或现有服务器上部署Redis实例,确保配置与现有集群一致(关键参数:cluster-enabled yes、cluster-config-file nodes-<port>.conf、cluster-node-timeout),并启动服务。
示例配置(/etc/redis/redis.conf):
bind 0.0.0.0 # 允许远程访问(根据网络环境调整)
port 6385 # 新节点端口(需唯一)
cluster-enabled yes
cluster-config-file nodes-6385.conf
cluster-node-timeout 5000
appendonly yes
requirepass yourpassword # 若集群有密码,需一致
启动服务并验证状态:
sudo systemctl restart redis-server
sudo systemctl status redis-server # 确认服务运行正常
使用redis-cli的--cluster add-node命令,将新节点添加到现有集群(需替换为现有集群中任意节点的IP和端口):
redis-cli -a yourpassword --cluster add-node <新节点IP>:<新节点端口> <现有集群节点IP>:<现有集群端口>
示例(添加主节点):
redis-cli -a yourpassword --cluster add-node 192.168.1.100:6385 192.168.1.10:6379
此时新节点会加入集群,但未分配哈希槽(slots: (0 slots)),无法存储数据。
使用redis-cli --cluster reshard命令,将现有集群的哈希槽迁移到新节点(Redis集群共16384个槽,需合理分配):
redis-cli -a yourpassword --cluster reshard <现有集群节点IP>:<现有集群端口>
按提示输入以下信息:
4096(建议平均分配,避免单个节点负载过高);redis-cli -p <新节点端口> cluster nodes获取);all(从所有现有主节点平均迁移槽)或指定具体节点ID(如d04e524daec4d8e22bdada7f21a9487c2d3e1057)。yes确认迁移。若需为新主节点添加从节点,重复步骤1(配置从节点的redis.conf,端口如6386),启动服务后,使用--cluster replicate命令将新节点设为从节点:
redis-cli -a yourpassword --cluster replicate <新主节点ID> <从节点IP>:<从节点端口>
示例:
redis-cli -a yourpassword --cluster replicate 46f0b68b3f605b3369d3843a89a2b4a164ed21e8 192.168.1.100:6386
通过redis-cli -p <从节点端口> cluster nodes验证从节点状态(slave标识)。
redis-cli -a yourpassword --cluster slots
确认新节点已分配到指定范围的槽(如4096-8191)。redis-cli -a yourpassword --cluster check <现有集群节点IP>:<现有集群端口>
确认所有节点状态为ok,槽总数为16384。redis-cli -a yourpassword -c -h 192.168.1.100 -p 6379 set key_new "value_new"
redis-cli -a yourpassword -c -h 192.168.1.100 -p 6379 get key_new
redis-cli --cluster save或复制数据目录);cluster-config-file、cluster-node-timeout等参数需与现有集群一致;