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}; do
  cd /etc/redis/redis-cluster/redis600$d
  redis-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集群通过数据分片实现真正分布式,支持水平扩展。选择时需根据数据规模、性能需求和运维复杂度权衡,从简到繁逐步演进。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值