当前位置: 首页
数据库
Linux下Redis6.x集群搭建与主从复制详解

Linux下Redis6.x集群搭建与主从复制详解

时间:2026-07-28
转载

基于Linux环境,通过多实例主从复制搭建Redis6 x集群,实现读写分离与自动故障转移,涵盖集群创建、节点增删、槽点迁移及投票机制,采用去中心化架构确保高可用性,并支持数据自动分片、动态扩容及负载均衡。

1、前言

在正式搭建集群之前,必须先将单机版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(公网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

操作非常简单,只需将单机版配置中的host和port替换为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指定它要挂载到哪个主节点下。如果不指定,系统会随机分配给一个主节点。

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的全部数据——相当于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个哈希槽,每个键通过hash算法计算出所属槽位,然后存储到对应的主节点上。集群中的每个节点负责一部分槽位。以三个主节点为例:

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

当增删节点时,实际就是重新分配这些槽位,同时数据也会随之迁移。

总结

以上便是Redis 6.x集群从搭建到运维的完整实践指南。主从复制、故障转移、节点管理、集群原理等关键知识点均已覆盖,希望能够帮助你快速上手。如有疑问,欢迎交流探讨。

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
Redis是什么:核心特性、架构与应用场景解析

Redis是什么:核心特性、架构与应用场景解析

Redis是一款基于内存的键值型NoSQL数据库,以超高读写速度和丰富的数据结构著称。本文系统梳理Redis的核心特性、架构组成、性能优势及典型应用场景,并通过与Memcached、MySQL、MongoDB的对比,帮助开发者快速判断Redis是否适合当前业务需求。

时间:2026-09-01 06:20
Windows 安装 MongoDB 完整图文教程

Windows 安装 MongoDB 完整图文教程

本文详细介绍在 Windows 系统上安装 MongoDB 的完整流程。从官网下载 MSI 安装包开始,逐步演示自定义安装路径、配置 Windows 服务、跳过 MongoDB Compass 等关键选项,并提供通过系统服务列表验证安装是否成功的方法,帮助开发者快速搭建本地 MongoDB 环境。

时间:2026-09-01 06:20
Linux 安装 MongoDB 完整指南:依赖配置、环境变量与服务启动

Linux 安装 MongoDB 完整指南:依赖配置、环境变量与服务启动

本文详解在 Linux 系统下安装 MongoDB 的完整流程,涵盖依赖包安装、二进制包下载解压、环境变量配置、数据与日志目录创建及服务启动验证。通过标准化命令与路径说明,帮助开发者快速完成部署并确认服务状态。

时间:2026-09-01 06:20
MacOS安装MongoDB完整教程

MacOS安装MongoDB完整教程

本文介绍在MacOS系统下安装MongoDB的完整流程,涵盖下载、解压、目录配置、环境变量设置及服务启动。通过明确的命令与参数说明,帮助开发者快速完成环境搭建并验证安装结果。

时间:2026-09-01 06:19
Ubuntu系统安装与配置Redis完整指南

Ubuntu系统安装与配置Redis完整指南

本文详解在Ubuntu系统中安装Redis的两种主流方式:apt在线安装与源码编译安装。涵盖版本选择逻辑、服务启停与状态检查、连接验证方法,以及在线练习工具与桌面GUI客户端的对比与使用建议,帮助开发者快速搭建并验证Redis运行环境。

时间:2026-09-01 06:19
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全