当前位置: 首页 > news >正文

Redis 三种集群模式详解

前言

        在现代分布式系统架构中,缓存层的高可用性和扩展性至关重要。Redis 作为最流行的内存数据库之一,提供了多种集群模式来满足不同场景下的需求。无论是简单的数据备份还是大规模分布式部署,Redis 都能提供相应的解决方案。本文将详细介绍 Redis 的三种主流集群模式:主从复制、哨兵模式  Cluster 集群模式,帮助读者理解每种模式的工作原理、适用场景及实践方法,为构建稳定可靠的 Redis 架构提供指导。

1 Redis 三种模式概述

        Redis 集群支持三种模式:主从复制哨兵模式Cluster集群模式。它们分别适用于不同的高可用和分布式需求场景。

主从复制(Replication)

  • 基础高可用方案,支持数据多机备份和读操作的负载均衡。

  • 缺点:故障恢复需手动;写操作无法负载均衡;存储受单机限制。

哨兵模式(Sentinel)

  • 在主从复制基础上实现自动故障恢复

  • 缺点:写操作无法负载均衡;存储受单机限制;从节点故障需额外处理。

集群模式(Cluster)

  • 完善的分布式高可用方案,支持写负载均衡和突破单机存储限制。


2 Redis 主从复制

2.1 主从复制的作用

  • 数据冗余:热备份机制

  • 故障恢复:从节点可快速替代主节点

  • 负载均衡:读写分离提升读并发能力

  • 高可用基础:哨兵和集群模式的基础

2.2 主从复制流程

  1. Slave 发送 SYNC 命令请求同步

  2. Master 启动后台进程生成RDB快照,并缓存写命令

  3. Master 发送RDB文件至Slave,Slave加载到内存

  4. Master 发送缓存的写命令至Slave

  5. 多个Slave连接时,Master统一处理并分发数据

2.3 搭建示例(Master: 192.168.10.77,Slaves: 192.168.10.88/99)

bash

#环境准备(关闭防火墙和增强功能)
systemctl stop firewalld
setenforce 0# 安装Redis
yum install -y gcc gcc-c++ make
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd /opt/redis-5.0.7/
make && make PREFIX=/usr/local/redis install
cd /opt/redis-5.0.7/utils
./install_server.sh                #一直回车
若出现
Please select the redis executable path []
则在后面加上 /usr/local/redis/bin/redis-server#创建软链接,便于系统识别
ln -s /usr/local/redis/bin/* /usr/local/bin/# Master配置(/etc/redis/6379.conf)
bind 0.0.0.0
daemonize yes
logfile /var/log/redis_6379.log
dir /var/lib/redis/6379
appendonly yes# Slave配置
bind 0.0.0.0
daemonize yes
logfile /var/log/redis_6379.log
dir /var/lib/redis/6379
appendonly yes
replicaof 192.168.10.23 6379   # 添加此行指向Master#配置完后重启服务
/etc/init.d/redis_6379 restart# 在Master节点上验证主从
redis-cli info replication


3. Redis 哨兵模式

3.1 哨兵功能

  • 监控:检查节点健康状态

  • 自动故障转移:Master宕机时自动提升Slave为新Master

  • 通知:向客户端发送故障转移结果

3.2 故障转移机制

  1. 哨兵通过心跳检测判断节点状态

  2. 主观下线 → 客观下线(需多数哨兵确认)

  3. Raft算法选举Leader哨兵

  4. Leader执行故障转移:

    1. 选择健康Slave提升为新Master

    2. 切换其他节点指向新Master

    3. 通知客户端

3.3 搭建示例

bash

# 哨兵配置(sentinel.conf)
protected-mode no
port 26379
daemonize yes
logfile "/var/log/sentinel.log"
dir "/var/lib/redis/6379"
sentinel monitor mymaster 192.168.10.23 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 180000# 启动哨兵
redis-sentinel sentinel.conf &# 验证
redis-cli -p 26379                #哨兵默认运行在端口26379
info Sentinel

4、故障模拟#查看redis-server 进程号
kill -9 进程号#验证结果
tail -f /var/log/sentinel.log#查看master是否被切换
redis-cli -p 26379 INFO Sentinel


4. Redis 集群模式(Cluster)

4.1 集群特性

  • 数据分片:16384个哈希槽分散到多个节点

  • 高可用:支持主从复制和自动故障转移

4.2 数据分片原理

  • 每个Key通过CRC16校验后取模16384决定所属哈希槽

  • 示例三节点集群:

    • 节点A:0-5460

    • 节点B:5461-10922

    • 节点C:10923-16383

4.3 搭建示例(例:在一台服务器上操作 6节点 3主3从)

bash

# 创建节点目录
mkdir -p /etc/redis/redis-cluster/redis600{1..6}
for i in {1..6}
do
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis600$i
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis600$i
done# 配置示例(redis6001/redis.conf)
port 6001                                #92行,修改,redis监听端口
#bind 127.0.0.1                            #69行,注释掉bind 项,默认监听所有网卡
protected-mode no                        #88行,修改,关闭保护模式
daemonize yes                            #136行,开启守护进程,以独立进程启动
cluster-enabled yes                        #832行,取消注释,开启群集功能
cluster-config-file nodes-6001.conf        #840行,取消注释,群集名称文件设置
cluster-node-timeout 15000                #846行,取消注释群集超时时间设置
appendonly yes                            #700行,修改,开启AOF持久化# 启动所有节点
for d in {1..6}; docd /etc/redis/redis-cluster/redis600$dredis-server redis.conf
done#查看服务状态
ps -ef | grep redis# 创建集群
redis-cli --cluster create \127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 \127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 \--cluster-replicas 1# 测试集群
redis-cli -p 6001 -c
127.0.0.1:6001> cluster slots# 故障模拟

5 总结

        Redis三种集群模式各有侧重:主从复制实现数据备份与读写分离,适合基础场景;哨兵模式在此基础上提供自动故障转移,保障高可用性;Cluster集群通过数据分片实现真正分布式,支持水平扩展。选择时需根据数据规模、性能需求和运维复杂度权衡,从简到繁逐步演进。


http://www.dtcms.com/a/391205.html

相关文章:

  • 打开hot100
  • Ant-Design Table中使用 AStatisticCountdown倒计时,鼠标在表格上移动时倒计时被重置
  • Linux crontab 定时任务工具使用
  • 阿里云RDS mysql8数据本地恢复,与本地主从同步(容器中)
  • 记录一次mysql启动失败问题解决
  • LeetCode算法练习:35.搜索插入位置
  • (1) 为什么推荐tauri框架
  • 嵌入式面试高频(八)!!!C++语言(嵌入式八股文,嵌入式面经)
  • Spring AI开发指导-工具调用
  • Linux 基本命令超详细解释第二期 | touch | cat | more | cp | mv | rm | which | find
  • [x-cmd] 安装指南
  • Altium Designer(AD24)原理图Move移动功能详细介绍图文教程
  • 部署java程序,服务器报403 Forbidden 问题的终极解决方案
  • 【LeetCode】链表经典问题解析:环形、回文与相交
  • 电磁超材料及其领域应用优势
  • STM32与Modbus RTU协议实战开发指南-fc3ab6a453
  • ArrayList 与 LinkedList 深度对比:从原理到场景的全方位解析
  • Ubuntu和windows复制粘贴互通
  • 银行回单 OCR 识别:财务自动化的 “数据入口“
  • 深兰科技陈海波的AI破局之道:打造软硬一体综合竞争力|《中国经营报》专访
  • 面试经验之mysql高级问答深度解析
  • 高质量票据识别数据集:1000张收据图像+2141个商品标注,支持OCR模型训练与文档理解研究
  • 嵌入式音视频开发——FFmpeg入门
  • MySQL索引篇---B+树在索引中的工作原理
  • 强化学习训练-数据处理
  • VirtualBox为ubuntu系统设置共享文件夹
  • Python实战进阶》No.41: 使用 Streamlit 快速构建 ML 应用
  • Salesforce 执行顺序(Order of Execution)详解
  • Linux内核进程管理子系统有什么第五十七回 —— 进程主结构详解(53)
  • Vue 记账凭证模块组件