Redis 三主三从集群部署的完整方案

一、架构设计原理‌

  1. 分布式数据分片
    哈希槽机制‌:Redis Cluster 将数据划分为 16384 个槽位,每个主节点负责部分槽位(如主节点1管理槽0-5460,主节点2管理5461-10922等)。
    自动负载均衡‌:数据按哈希值分配到不同节点,避免单点性能瓶颈。
    高可用基础‌:每个主节点配置至少一个从节点,主节点故障时自动切换从节点接替。
  2. 故障转移流程
    哨兵协同‌:3个哨兵节点通过投票机制(quorum=2)决策主节点状态。
    状态检测‌:哨兵每隔1秒向主节点发送PING,若5秒内无响应标记为主观下线,超过半数哨兵确认则触发客观下线。
    选举新主‌:优先选择数据同步最完整的从节点晋升为新主。
    二、部署实施步骤‌
  3. 节点规划
    角色 IP地址 端口 说明
    主节点1 10.0.1.10 6379 管理槽位0-5460
    主节点2 10.0.1.11 6379 管理槽位5461-10922
    主节点3 10.0.1.12 6379 管理槽位10923-16383
    从节点1 10.0.1.20 6379 复制主节点1数据
    从节点2 10.0.1.21 6379 复制主节点2数据
    从节点3 10.0.1.22 6379 复制主节点3数据
    哨兵节点 10.0.1.30-32 26379 监控所有主节点状态
  4. 配置文件核心参数
    主从节点配置‌:
    plaintext
    Copy Code
    cluster-enabled yes # 启用集群模式
    cluster-node-timeout 5000 # 节点超时时间(毫秒)
    requirepass maple168 # 访问密码
    masterauth maple168 # 主从同步密码

哨兵节点配置‌:

plaintext

Copy Code

sentinel monitor master1 10.0.1.10 6379 2

sentinel auth-pass master1 maple168

sentinel down-after-milliseconds master1 5000

  1. 集群初始化命令
    bash
    Copy Code

在所有节点启动Redis服务

redis-server /etc/redis/redis.conf

使用redis-cli工具创建集群

redis-cli -a maple168 --cluster create

10.0.1.10:6379 10.0.1.11:6379 10.0.1.12:6379

10.0.1.20:6379 10.0.1.21:6379 10.0.1.22:6379

--cluster-replicas 1

注:--cluster-replicas 1表示每个主节点分配1个从节点

三、关键验证操作‌

  1. 集群状态检查
    bash
    Copy Code

查看槽位分配与节点角色

redis-cli -a maple168 --cluster check 10.0.1.10:6379

输出示例:

M: 10.0.1.10:6379 (主节点) slots:0-5460

S: 10.0.1.20:6379 (从节点) replicates 10.0.1.10

  1. 数据路由测试
    bash
    Copy Code

写入数据观察自动路由

redis-cli -a maple168 -c -h 10.0.1.10 set user:1001 "data"

返回响应:-> Redirected to slot 9842 located at 10.0.1.11:6379

跨节点读取验证

redis-cli -a maple168 -c -h 10.0.1.12 get user:1001

  1. 故障模拟恢复
    手动关闭主节点1‌:
    bash
    Copy Code
    redis-cli -a maple168 -h 10.0.1.10 shutdown

观察哨兵日志‌:

log

Copy Code

+sdown master master1 10.0.1.10:6379 # 主观下线

+odown master master1 10.0.1.10:6379 # 客观下线

+vote-for-leader 哨兵ID # 选举新主

+failover-end master1 10.0.1.20:6379 # 从节点1晋升

验证新主节点‌:

bash

Copy Code

redis-cli -a maple168 -h 10.0.1.20 info replication | grep role

预期输出:role:master

四、运维优化建议‌

  1. 网络层面
    带宽保障‌:主从节点间建议使用万兆内网,减少同步延迟。
    端口开放‌:
    主从通信:TCP 6379
    集群总线:TCP 16379(端口=6379+10000)
    哨兵通信:TCP 26379
  2. 内存与持久化
    内存限制‌:配置maxmemory 16gb(根据物理内存80%设置),防止OOM。
    持久化策略‌:
    主节点关闭AOF(appendonly no),避免写放大。
    从节点开启AOF(appendonly yes),追加写入保障数据安全。
  3. 监控告警
    指标采集‌:
    内存使用率(used_memory)
    键空间命中率(keyspace_hits/keyspace_misses)
    主从延迟(master_repl_offset与slave_repl_offset差值)
    推荐工具:Prometheus + Redis Exporter + Grafana 可视化仪表盘。
    五、典型故障处理‌
  4. 脑裂问题(Split-Brain)
    现象‌:网络分区导致多个主节点同时写入。
    解决方案‌:
    设置min-replicas-to-write 1,主节点需至少1个从节点在线才允许写入。
    配置cluster-require-full-coverage no,部分槽位不可用时仍提供服务。
  5. 数据同步延迟
    排查步骤‌:
    检查主从节点网络带宽(iftop或nload)。
    查看repl_backlog_size是否过小(建议≥512MB)。
    检查从节点是否执行耗时命令(如KEYS *阻塞进程)。
  6. 节点无法加入集群
    常见原因‌:
    防火墙拦截集群总线端口(16379)。
    密码不一致(requirepass与masterauth需完全相同)。
    节点时间不同步(需配置NTP服务)。

通过以上方案,可实现具备自动分片、故障秒级切换的 Redis 三主三从生产级集群,支撑高并发读写与数据高可用需求。

相关推荐
姜鱼问生7 小时前
Nginx 缓存命中率监控:从 X-Cache-Status 到实时统计
运维·nginx·缓存
IvorySQL8 小时前
PostgreSQL 日报|修复截断 zstd 备份检测(10 月 9 日)
数据库·postgresql
刘胡子大叔9 小时前
SQL 脚本的导入顺序
数据库·sql
代码什么用9 小时前
Spring对IoC的实现
数据库·spring
禾小西10 小时前
07丨Redis 哨兵机制:主库故障后,如何恢复服务?
java·开发语言·redis
hz5678911 小时前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件
广州浮点FLOATLIC11 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
程序员Sunday11 小时前
MySQL 为什么使用 B+ 树索引?把范围查询、回表和覆盖索引连起来
数据库·mysql
半杯咖啡半行码12 小时前
Qt开发实战:数据库、MV 模式、QProcess与串口通信全攻略
数据库·qt
小米里的大麦12 小时前
16 MySQL 事务
数据库·mysql