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 三主三从生产级集群,支撑高并发读写与数据高可用需求。

相关推荐
ClickHouseDB31 分钟前
ClickHouse Cloud 与 Snowflake 实时性价比对比:CostBench 测试中的 412 倍差距来
运维·数据库·系统架构
m0_6399069435 分钟前
Redis入门|五种数据结构、使用场景、持久化RDB&AOF
数据结构·数据库·redis
时间售卖铺2 小时前
触发器与函数实战:MySQL高效编程秘诀
运维·数据库·mysql·云原生
qetfw2 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
数智园区合作社3 小时前
问数平台怎么把同一个指标锁成一个数
大数据·数据库·人工智能·ai
lbb 小魔仙3 小时前
Windows搭建PaddleOCR+飞书Webhook自动打卡通知机器人:识别、推送与远程触发完整教程
数据库·人工智能·prometheus·时序数据库
captain3764 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
心中有你02144 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
龙亘川5 小时前
综合素质评价业务建模:从过程性评价到成长档案全链路闭环
数据库·智慧城市·数据可视化
数据库小组5 小时前
NineData 实战教程:MySQL 5.5 数据迁移同步到 MySQL 8.0(跨版本升级)
数据库·mysql·mysql优化·数据库开发·数据库迁移·版本升级·数据复制