深入剖析 Redis 的三种集群方式以及实战配置

 更新时间:2026年03月25日 10:27:18   作者:Thomas.Sir  
本文深入解析Redis三种集群部署方式,文章包含完整的配置示例和操作指南,为Redis集群部署提供实用参考,感兴趣的朋友跟随小编一起看看吧

Redis作为高性能内存数据库,其集群化部署是解决单节点性能瓶颈与实现高可用的关键。本篇将深入剖析三种主流的集群方式:主从复制、哨兵模式(Sentinel)与官方集群(Cluster),并为您提供详细的搭建指南与配置示例。

一、主从复制 (Master-Slave Replication)

主从复制是最基础的集群模式,通过一个主节点(Master)和一个或多个从节点(Slave)实现读写分离。主节点负责处理写操作,从节点负责处理读操作,并实时从主节点同步数据。

1. 核心原理

  • 数据同步 :从节点启动后,向主节点发送 `SYNC` 命令。主节点执行 `bgsave` 生成RDB快照并发送给从节点,同时将快照期间的写命令记录到复制积压缓冲区。从节点加载RDB并执行缓冲区中的命令,完成初始化同步。
  • 增量同步 :初始化后,主节点每次执行的写命令都会同步发送给从节点,实现增量同步。

2. 搭建步骤与配置

以下以单机伪集群为例,在一台服务器上启动3个Redis实例(1个主节点,2个从节点)。

主节点配置 (redis-master.conf):

# 端口
port 6379
# 后台运行
daemonize yes
# PID文件
pidfile /var/run/redis_6379.pid
# 日志文件
logfile "/usr/local/redis-cluster/logs/redis_6379.log"
# 工作目录
dir /usr/local/redis-cluster/data
# 持久化
dbfilename dump-6379.rdb
# 开启AOF
appendonly yes
appendfilename "appendonly-6379.aof"

从节点1配置 (redis-slave1.conf):

# 端口
port 6380
# 后台运行
daemonize yes
# PID文件
pidfile /var/run/redis_6380.pid
# 日志文件
logfile "/usr/local/redis-cluster/logs/redis_6380.log"
# 工作目录
dir /usr/local/redis-cluster/data
# 持久化
dbfilename dump-6380.rdb
# 开启AOF
appendonly yes
appendfilename "appendonly-6380.aof"
# 指定主节点
replicaof 127.0.0.1 6379
# 主节点密码(如果设置了)
masterauth 123456

从节点2配置 (redis-slave2.conf):

# 端口
port 6381
# 后台运行
daemonize yes
# PID文件
pidfile /var/run/redis_6381.pid
# 日志文件
logfile "/usr/local/redis-cluster/logs/redis_6381.log"
# 工作目录
dir /usr/local/redis-cluster/data
# 持久化
dbfilename dump-6381.rdb
# 开启AOF
appendonly yes
appendfilename "appendonly-6381.aof"
# 指定主节点
replicaof 127.0.0.1 6379
# 主节点密码(如果设置了)
masterauth 123456

3. 启动服务

redis-server /usr/local/redis-cluster/conf/redis-master.conf
redis-server /usr/local/redis-cluster/conf/redis-slave1.conf
redis-server /usr/local/redis-cluster/conf/redis-slave2.conf

4. 验证主从关系

# 连接主节点
redis-cli -p 6379
127.0.0.1:6379> info replication
# 连接从节点
redis-cli -p 6380
127.0.0.1:6380> info replication

5. 全量复制与增量复制对比

二、哨兵模式 (Sentinel)

哨兵模式在主从复制的基础上增加了高可用(HA)能力。通过多个哨兵进程监控主从节点,当主节点故障时,哨兵会自动选举一个从节点升级为新的主节点,并通知其他从节点切换主节点,实现故障转移。

1. 核心原理

  • 监控 :哨兵进程持续监控主节点和从节点的健康状态。
  • 通知 :当某个节点(主或从)出现故障时,哨兵会向系统管理员发送通知。
  • 故障转移 :当主节点故障时,哨兵会选举一个从节点成为新的主节点,并让其他从节点指向新的主节点。

2. 搭建步骤与配置

同样以单机伪集群为例,部署1个主节点、2个从节点和3个哨兵节点。

主节点配置 (redis-master.conf):

port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
logfile "/usr/local/redis-cluster/logs/redis_6379.log"
dir /usr/local/redis-cluster/data
dbfilename dump-6379.rdb
appendonly yes
appendfilename "appendonly-6379.aof"
# 设置密码(可选)
requirepass 123456

从节点1配置 (redis-slave1.conf):

port 6380
daemonize yes
pidfile /var/run/redis_6380.pid
logfile "/usr/local/redis-cluster/logs/redis_6380.log"
dir /usr/local/redis-cluster/data
dbfilename dump-6380.rdb
appendonly yes
appendfilename "appendonly-6380.aof"
# 指向主节点
replicaof 127.0.0.1 6379
# 如果主节点有密码
masterauth 123456

哨兵1配置 (sentinel1.conf):

port 26379
daemonize yes
pidfile /var/run/redis-sentinel_26379.pid
logfile "/usr/local/redis-cluster/logs/sentinel_26379.log"
dir /usr/local/redis-cluster/data
# 监控主节点
sentinel monitor mymaster 127.0.0.1 6379 2
# 密码(如果主节点有)
sentinel auth-pass mymaster 123456
# 故障转移超时时间
sentinel down-after-milliseconds mymaster 5000
# 故障转移后最多保留的失败次数
sentinel failover-timeout mymaster 10000
# 故障转移时最多同时迁移的key数量
sentinel parallel-syncs mymaster 1

哨兵2配置 (sentinel2.conf):

port 26380
daemonize yes
pidfile /var/run/redis-sentinel_26380.pid
logfile "/usr/local/redis-cluster/logs/sentinel_26380.log"
dir /usr/local/redis-cluster/data
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1

哨兵3配置 (sentinel3.conf):

port 26381
daemonize yes
pidfile /var/run/redis-sentinel_26381.pid
logfile "/usr/local/redis-cluster/logs/sentinel_26381.log"
dir /usr/local/redis-cluster/data
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1

3. 启动服务

# 启动Redis节点
redis-server /usr/local/redis-cluster/conf/redis-master.conf
redis-server /usr/local/redis-cluster/conf/redis-slave1.conf
redis-server /usr/local/redis-cluster/conf/redis-slave2.conf
# 启动哨兵
redis-sentinel /usr/local/redis-cluster/conf/sentinel1.conf
redis-sentinel /usr/local/redis-cluster/conf/sentinel2.conf
redis-sentinel /usr/local/redis-cluster/conf/sentinel3.conf
            

4. 测试故障转移

# 连接哨兵查看主节点
redis-cli -p 26379
127.0.0.1:26379> sentinel master mymaster
# 关闭主节点
redis-cli -p 6379 shutdown
# 等待哨兵选举后,再次查看
127.0.0.1:26379> sentinel master mymaster

三、官方集群 (Redis Cluster)

Redis Cluster是官方提供的分布式解决方案,通过数据分片(Sharding)解决单节点内存限制问题,并内置高可用能力。它不需要中间件,节点间直接通信。

1. 核心原理

  • 数据分片 :Redis Cluster将16384个哈希槽(Hash Slot)分布在多个主节点上。
  • 哈希槽分配 :每个键通过CRC16算法计算后对16384取模,决定其所在的哈希槽。
  • 高可用 :每个主节点都绑定一个或多个从节点。当主节点故障时,从节点会升级为新的主节点。

2. 搭建步骤与配置

以单机伪集群为例,部署3个主节点和3个从节点。

主节点1配置 (redis-7000.conf):

port 7000
daemonize yes
pidfile /var/run/redis_7000.pid
logfile "/usr/local/redis-cluster/logs/redis_7000.log"
dir /usr/local/redis-cluster/data
dbfilename dump-7000.rdb
appendonly yes
appendfilename "appendonly-7000.aof"
# 开启集群模式
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
# 关闭集群完整性检查(单机测试)
cluster-require-full-coverage no

从节点1配置 (redis-7003.conf):

port 7003
daemonize yes
pidfile /var/run/redis_7003.pid
logfile "/usr/local/redis-cluster/logs/redis_7003.log"
dir /usr/local/redis-cluster/data
dbfilename dump-7003.rdb
appendonly yes
appendfilename "appendonly-7003.aof"
# 开启集群模式
cluster-enabled yes
cluster-config-file nodes-7003.conf
cluster-node-timeout 5000
# 指定主节点
replicaof 127.0.0.1 7000

依次创建 `redis-7001.conf`, `redis-7002.conf`, `redis-7004.conf`, `redis-7005.conf`, `redis-7006.conf`,并修改端口号。

3. 启动服务

redis-server /usr/local/redis-cluster/conf/redis-7000.conf
redis-server /usr/local/redis-cluster/conf/redis-7001.conf
redis-server /usr/local/redis-cluster/conf/redis-7002.conf
redis-server /usr/local/redis-cluster/conf/redis-7003.conf
redis-server /usr/local/redis-cluster/conf/redis-7004.conf
redis-server /usr/local/redis-cluster/conf/redis-7005.conf
redis-server /usr/local/redis-cluster/conf/redis-7006.conf

4. 创建集群

# 进入Redis源码目录
cd /path/to/redis-5.0.5/src
# 使用官方工具创建集群
./redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1

执行命令后,会提示输入 `yes` 来确认分配哈希槽和创建集群。

5. 连接集群

# 使用 -c 参数连接集群
redis-cli -c -p 7000
# 设置key
127.0.0.1:7000> set name "redis-cluster"
# 读取key(可能重定向到其他节点)
127.0.0.1:7000> get name
-> Redirected to slot [12182] located at 127.0.0.1:7002
"redis-cluster"
127.0.0.1:7002>

四、总结与对比

特性主从复制哨兵模式官方集群
读写分离
数据分片
高可用✅ (自动故障转移)✅ (内置)
部署复杂度
适用场景读多写少、简单扩展需要高可用、读写分离大数据量、高并发

到此这篇关于深入剖析 Redis 的三种集群方式以及实战配置的文章就介绍到这了,更多相关Redis 三种集群内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Redis连接池配置方式

    Redis连接池配置方式

    文章介绍了Redis连接池的配置方法,包括与数据库连接时引入连接池的必要性、Java中使用Redis连接池的示例、jar包准备、编写配置代码以及连接池参数的设置
    2024-12-12
  • redis-cli创建redis集群的实现

    redis-cli创建redis集群的实现

    本文主要介绍了redis-cli创建redis集群的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • 详解redis分布式锁的这些坑

    详解redis分布式锁的这些坑

    在很多互联网产品应用中,有些场景需要加锁处理,比如:秒杀,全局递增ID等等。大部分的解决方案是基于DB实现的,Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系。
    2021-05-05
  • Redisson分布式限流的实现原理解析

    Redisson分布式限流的实现原理解析

    这篇文章主要为大家介绍了Redisson分布式限流的实现原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Redis利用Pipeline加速查询速度的方法

    Redis利用Pipeline加速查询速度的方法

    这篇文章主要给大家介绍了关于Redis利用Pipeline加速查询速度的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Redis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • redis事务_动力节点Java学院整理

    redis事务_动力节点Java学院整理

    这篇文章主要介绍了redis事务,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 如何高效使用Redis作为LRU缓存

    如何高效使用Redis作为LRU缓存

    这篇文章主要介绍了如何高效使用Redis作为LRU缓存,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • 浅谈Redis Key 命名规范文档

    浅谈Redis Key 命名规范文档

    本文介绍了Redis键名命名规范,包括命名格式、具体规范、数据类型扩展命名、时间敏感型键名、规范总结以及实际应用示例,感兴趣的可以了解一下
    2025-05-05
  • Redis的哨兵模式工作流程及原理详解

    Redis的哨兵模式工作流程及原理详解

    Redis哨兵模式是高可用解决方案,通过监控、故障检测、自动故障转移和配置更新保障服务连续,本文给大家介绍Redis的哨兵模式工作流程及原理详解,感兴趣的朋友一起看看吧
    2025-08-08
  • redis复制集群搭建的实现

    redis复制集群搭建的实现

    redis 复制集群是开发中一种比较常用的集群模式,本文主要介绍了redis复制集群搭建的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08

最新评论