1、前言 搭建Redis集群前,必须先确保单机版Redis正常运行。单机部署是集群的基础,若未完成则后续步骤无法进行。单机安装可参考《Linux服务器Redis 6.x安装、配置》一文,按步骤操作即可。 2、主从复制优势 读写分离,提升性能 容灾快速恢复 主节点负责写入操作,从节点专门处理读取请求。
搭建Redis集群前,必须先确保单机版Redis正常运行。单机部署是集群的基础,若未完成则后续步骤无法进行。单机安装可参考《Linux服务器Redis 6.x安装、配置》一文,按步骤操作即可。
主节点负责写入操作,从节点专门处理读取请求。二者分工明确,有效分散服务器压力,实现性能扩展。
长期稳定更新的攒劲资源: >>>点此立即查看<<<

本次演示搭建一主一从的集群架构,共3组。生产环境中可将每组实例部署在不同服务器,此处为便于演示,在同一台机器上通过不同端口号区分实例。
注意: 若使用云服务器,需在安全组和防火墙中开放两个端口段:Redis客户端端口(例如7001-7006)和Redis总线端口(客户端端口+10000,例如17001-17006)。两者缺一不可。
mkdir /usr/local/redis/cluster -p
在cluster目录下创建redis7001目录,部署单机版Redis,端口设置为7001。此步骤与单机安装完全相同,不再重复说明。
关闭7001单机实例后,修改配置文件:
vim /usr/local/redis/cluster/redis7001/config/redis.conf
内容如下:
daemonize yes 注释 bind 127.0.0.1 protected-mode no daemonize yes cluster-enabled yes logfile "/usr/local/redis/cluster/redis7001/log/redis.log" port 7001 # 直接指定即可,无需手动创建conf文件 cluster-config-file nodes-7001.conf #集群对外暴漏的IP及端口 cluster-announce-ip 111.xxx.xxx.175 cluster-announce-port 7001
关键配置项:cluster-enabled yes必须启用;cluster-config-file由系统自动生成,无需提前创建;外网IP和端口需填写实际公网IP。
将redis7001目录复制六份,分别对应7002至7006:
cp redis7001/ redis7002 -r ...... cp redis7001/ redis7006 -r

其他实例均由7001复制得到,只需修改以下参数:
# 将logfile中的redis700x改为对应文件夹名,例如redis7002 logfile "/usr/local/redis/cluster/redis700x/log/redis.log" # 将port改为对应端口,例如7002 port 700x # 将cluster-config-file改为对应端口,例如nodes-7002.conf cluster-config-file nodes-700x.conf # 将cluster-announce-port改为对应端口 cluster-announce-port 700x
重复以上操作,修改7002至7006的配置文件。
所有实例部署在同一台机器,手动逐一启停效率低,建议编写两个脚本。脚本存放于/usr/local/redis/cluster目录。
启动脚本:
vim start-all.sh
内容:
cd redis7001/bin ./redis-server ../config/redis.conf cd ../.. cd redis7002/bin ./redis-server ../config/redis.conf cd ../.. cd redis7003/bin ./redis-server ../config/redis.conf cd ../.. cd redis7004/bin ./redis-server ../config/redis.conf cd ../.. cd redis7005/bin ./redis-server ../config/redis.conf cd ../.. cd redis7006/bin ./redis-server ../config/redis.conf cd ../..
授权:
chmod u+x start-all.sh
关闭脚本:
vim shutdow-all.sh
内容:
redis7001/bin/redis-cli -p 7001 shutdown redis7001/bin/redis-cli -p 7002 shutdown redis7001/bin/redis-cli -p 7003 shutdown redis7001/bin/redis-cli -p 7004 shutdown redis7001/bin/redis-cli -p 7005 shutdown redis7001/bin/redis-cli -p 7006 shutdown
同样授权:
chmod u+x shutdow-all.sh
1、启动所有节点
sh start-all.sh

2、创建集群连接
进入集群目录,执行创建命令。注意,集群至少需要三个主节点(投票机制要求半数以上),六个实例会自动分配主从关系。
cd /usr/local/redis/cluster/redis7001/bin ./redis-cli --cluster create 162.14.119.135:7001 162.14.119.135:7002 162.14.119.135:7003 162.14.119.135:7004 162.14.119.135:7005 162.14.119.135:7006 --cluster-replicas 1
参数--cluster-replicas 1表示每个主节点配备一个从节点。


3、集群连接测试
连接任意节点:
cd redis7001/bin ./redis-cli -h 162.14.119.135 -c -p 7001
执行set操作,客户端会自动跳转至7002节点——说明该键的哈希槽落在7002上。再执行get操作,可以正常获取值,集群路由功能正常。

重新连接7001,然后get刚刚存储的name,Redis会自动从7002取回数据,体验与单机完全一致。

SpringBoot整合Redis单机版较为常见,切换为集群版仅需修改配置文件。以yaml格式为例:
spring:
redis:
cluster:
nodes:
- 162.14.119.135:7001
- 162.14.119.135:7002
- 162.14.119.135:7003
- 162.14.119.135:7004
- 162.14.119.135:7005
- 162.14.119.135:7006
#连接超时时间
timeout: 3600ms
#密码
password:
lettuce:
pool:
max-active: 8
max-wait: -1ms
max-idle: 8
min-idle: 1
shutdown-timeout: 500ms
操作步骤:将单机配置中的host和port替换为cluster.nodes列表即可。
操作前,先通过redis-cli --cluster check ip:port查看集群状态,获取各节点ID及主从关系。

删除命令格式:redis-cli --cluster del-node ip:port id
./redis-cli --cluster del-node 162.14.119.135:7006 fbb17810c3df7038baf9e9f9a83b7d4a38283c29

被删除的节点重启后不会自动加入集群——它变为独立的master节点。需先执行cluster reset,再通过add-node重新加入。此处以之前删除的7006为例,若使用全新实例,流程相同。
重置节点:
# 确保7006节点已启动 ./redis-cli -h 162.14.119.135 -c -p 7006 cluster reset

加入集群:
./redis-cli --cluster add-node 162.14.119.135:7006 162.14.119.135:7002 --cluster-sla ve --cluster-master-id d882c3ab7f37613663d7f063c4d7eae5cefd7fb7
参数说明:add-node后第一个参数为新节点,第二个为集群中任意现有节点;--cluster-sla ve指定新节点作为从节点;--cluster-master-id指定所属的主节点ID,若不指定则随机分配。

查看集群情况:
./redis-cli --cluster check 162.14.119.135:7001

删除主节点比从节点复杂,需先将该节点负责的哈希槽迁移到其他主节点,然后才能执行删除操作。例如删除7003节点(ID为9f1e025a88826db82a4b6fc60a707dcbf7b2d6eb)。

执行槽迁移:
./redis-cli --cluster reshard 162.14.119.135:7003
以下截图来自其他场景,操作步骤完全一致:

槽迁移完成后,删除节点:
./redis-cli --cluster del-node 162.14.119.135:7003 9f1e025a88826db82a4b6fc60a707dcbf7b2d6eb

执行check后,7003节点已消失。

以全新实例演示。将redis7001复制为redis7007,修改配置后启动。
加入集群:
./redis-cli --cluster add-node 162.14.119.135:7007 162.14.119.135:7001
查看集群情况:
./redis-cli --cluster check 162.14.119.135:7001

分配槽点:
./redis-cli --cluster reshard 162.14.119.135:7007
以下截图来自其他场景,操作步骤相同:

分配从节点: 分配槽点时,若集群中有多余的从节点,它们会自动挂载到新主节点下;若没有,可参考前面6.2节手动添加从节点。
每个哈希槽由一个主节点和若干个从节点组成。例如,六个节点中A、B、C为主节点,A1、B1、C1为对应的从节点。若A宕机,集群通过投票将A1提升为主节点,A1继承A的全部数据——相当于副本接管,集群继续正常运行。
投票由集群中所有主节点参与。当半数以上主节点与故障主节点通信超时,即判定该主节点失效。因此集群至少需要3个主节点,每个主节点至少一个从节点,总计至少6个Redis实例。
导致集群不可用的情况:
集群不可用时,所有操作将返回(error) CLUSTERDOWN The cluster is down错误。
主节点7001,从节点7004:

手动关闭7001,等待一段时间(默认15秒),7004从节点自动升为主节点并继承数据。7001重新启动后,自动成为7004的从节点。

注意: 超时时间可通过cluster-node-timeout配置项调整。
重新启动7001节点,它自动成为7004的从节点。

需要从头搭建集群时,操作步骤如下:
1. 关闭集群所有实例。
2. 删除每个实例bin目录下的aof、rdb、nodes.conf文件。
3. 重新创建集群:
./redis-cli --cluster create 162.14.119.135:7001 162.14.119.135:7002 162.14.119.135:7003 162.14.119.135:7004 162.14.119.135:7005 162.14.119.135:7006 --cluster-replicas 1 # 查看集群情况 ./redis-cli --cluster check 162.14.119.135:7001
Redis集群的核心机制是数据自动分片——将数据分散存储到不同主节点,再由主节点同步至从节点,实现高可用。
整个集群包含16384个哈希槽,每个键通过哈希算法映射到对应槽位,然后存储到负责该槽的主节点。集群中每个节点负责一部分槽。以三个主节点为例:
增删节点时,系统会重新分配这些槽,数据随之自动迁移。
以上是Redis 6.x集群从搭建到运维的完整实践指南,涵盖主从复制、故障转移、节点管理等关键环节。希望本文能帮助您快速掌握集群部署与维护。如有问题,欢迎交流讨论。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述