首页 > 数据库 >Linux搭建Redis6.x集群主从复制教程

Linux搭建Redis6.x集群主从复制教程

来源:互联网 2026-07-07 09:09:16

1、前言 搭建Redis集群前,必须先确保单机版Redis正常运行。单机部署是集群的基础,若未完成则后续步骤无法进行。单机安装可参考《Linux服务器Redis 6.x安装、配置》一文,按步骤操作即可。 2、主从复制优势 读写分离,提升性能 容灾快速恢复 主节点负责写入操作,从节点专门处理读取请求。

1、前言

搭建Redis集群前,必须先确保单机版Redis正常运行。单机部署是集群的基础,若未完成则后续步骤无法进行。单机安装可参考《Linux服务器Redis 6.x安装、配置》一文,按步骤操作即可。

2、主从复制优势

  • 读写分离,提升性能
  • 容灾快速恢复

主节点负责写入操作,从节点专门处理读取请求。二者分工明确,有效分散服务器压力,实现性能扩展。

长期稳定更新的攒劲资源: >>>点此立即查看<<<

Linux搭建Redis6.x集群主从复制教程

3、服务器准备

本次演示搭建一主一从的集群架构,共3组。生产环境中可将每组实例部署在不同服务器,此处为便于演示,在同一台机器上通过不同端口号区分实例。

注意: 若使用云服务器,需在安全组和防火墙中开放两个端口段:Redis客户端端口(例如7001-7006)和Redis总线端口(客户端端口+10000,例如17001-17006)。两者缺一不可。

4、环境搭建

4.1、创建集群工作目录

mkdir /usr/local/redis/cluster -p

4.2、搭建单机环境

cluster目录下创建redis7001目录,部署单机版Redis,端口设置为7001。此步骤与单机安装完全相同,不再重复说明。

4.3、集群配置

关闭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。

4.4、复制实例

将redis7001目录复制六份,分别对应7002至7006:

cp redis7001/ redis7002 -r
......
cp redis7001/ redis7006 -r

Linux搭建Redis6.x集群主从复制教程

4.5、修改其他实例配置文件

其他实例均由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的配置文件。

4.6、创建批量启动/关闭脚本

所有实例部署在同一台机器,手动逐一启停效率低,建议编写两个脚本。脚本存放于/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

4.7、创建集群

1、启动所有节点

sh start-all.sh

Linux搭建Redis6.x集群主从复制教程

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表示每个主节点配备一个从节点。

Linux搭建Redis6.x集群主从复制教程

Linux搭建Redis6.x集群主从复制教程

3、集群连接测试

连接任意节点:

cd redis7001/bin
./redis-cli -h 162.14.119.135 -c -p 7001

执行set操作,客户端会自动跳转至7002节点——说明该键的哈希槽落在7002上。再执行get操作,可以正常获取值,集群路由功能正常。

Linux搭建Redis6.x集群主从复制教程

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

Linux搭建Redis6.x集群主从复制教程

5、整合SpringBoot

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

操作步骤:将单机配置中的hostport替换为cluster.nodes列表即可。

6、删除与新增节点

操作前,先通过redis-cli --cluster check ip:port查看集群状态,获取各节点ID及主从关系。

Linux搭建Redis6.x集群主从复制教程

6.1、删除从节点

删除命令格式:redis-cli --cluster del-node ip:port id

./redis-cli --cluster del-node 162.14.119.135:7006 fbb17810c3df7038baf9e9f9a83b7d4a38283c29

Linux搭建Redis6.x集群主从复制教程

6.2、新增从节点

被删除的节点重启后不会自动加入集群——它变为独立的master节点。需先执行cluster reset,再通过add-node重新加入。此处以之前删除的7006为例,若使用全新实例,流程相同。

重置节点:

# 确保7006节点已启动
./redis-cli -h 162.14.119.135 -c -p 7006
cluster reset

Linux搭建Redis6.x集群主从复制教程

加入集群:

./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,若不指定则随机分配。

Linux搭建Redis6.x集群主从复制教程

查看集群情况:

./redis-cli --cluster check 162.14.119.135:7001

Linux搭建Redis6.x集群主从复制教程

6.3、删除主节点

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

Linux搭建Redis6.x集群主从复制教程

执行槽迁移:

./redis-cli --cluster reshard 162.14.119.135:7003

以下截图来自其他场景,操作步骤完全一致:

Linux搭建Redis6.x集群主从复制教程

槽迁移完成后,删除节点:

./redis-cli --cluster del-node 162.14.119.135:7003 9f1e025a88826db82a4b6fc60a707dcbf7b2d6eb

Linux搭建Redis6.x集群主从复制教程

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

Linux搭建Redis6.x集群主从复制教程

6.4、新增主节点

以全新实例演示。将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

Linux搭建Redis6.x集群主从复制教程

分配槽点:

./redis-cli --cluster reshard 162.14.119.135:7007

以下截图来自其他场景,操作步骤相同:

Linux搭建Redis6.x集群主从复制教程

分配从节点: 分配槽点时,若集群中有多余的从节点,它们会自动挂载到新主节点下;若没有,可参考前面6.2节手动添加从节点。

7、投票机制

每个哈希槽由一个主节点和若干个从节点组成。例如,六个节点中A、B、C为主节点,A1、B1、C1为对应的从节点。若A宕机,集群通过投票将A1提升为主节点,A1继承A的全部数据——相当于副本接管,集群继续正常运行。

投票由集群中所有主节点参与。当半数以上主节点与故障主节点通信超时,即判定该主节点失效。因此集群至少需要3个主节点,每个主节点至少一个从节点,总计至少6个Redis实例。

导致集群不可用的情况:

  • a: 某个主节点宕机且无可用从节点,集群进入fail状态。
  • b: 超过半数主节点宕机,无论从节点是否存在,集群均进入fail状态。

集群不可用时,所有操作将返回(error) CLUSTERDOWN The cluster is down错误。

8、主节点宕机演示

  • 当主节点宕机后,对应从节点自动升级为主节点。原主节点重新启动后,会以新主节点(原从节点)的从节点身份自动加入集群。
  • 若从节点宕机,重启后以原主节点的从节点身份重新加入集群。

宕机前

主节点7001,从节点7004:

Linux搭建Redis6.x集群主从复制教程

宕机后

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

Linux搭建Redis6.x集群主从复制教程

注意: 超时时间可通过cluster-node-timeout配置项调整。

宕机后恢复

重新启动7001节点,它自动成为7004的从节点。

Linux搭建Redis6.x集群主从复制教程

9、重置集群

需要从头搭建集群时,操作步骤如下:

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

10、集群原理

Redis集群的核心机制是数据自动分片——将数据分散存储到不同主节点,再由主节点同步至从节点,实现高可用。

整个集群包含16384个哈希槽,每个键通过哈希算法映射到对应槽位,然后存储到负责该槽的主节点。集群中每个节点负责一部分槽。以三个主节点为例:

  • 节点A负责槽位0至5460。
  • 节点B负责槽位5461至10922。
  • 节点C负责槽位10923至16383。

增删节点时,系统会重新分配这些槽,数据随之自动迁移。

总结

以上是Redis 6.x集群从搭建到运维的完整实践指南,涵盖主从复制、故障转移、节点管理等关键环节。希望本文能帮助您快速掌握集群部署与维护。如有问题,欢迎交流讨论。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备2026025700号-3 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。