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

相关推荐
rufeike38 分钟前
Redis学习笔记
redis·笔记·学习
Estar.Lee3 小时前
MySQL中外键约束详解 外键在表关系维护中的作用
运维·数据库·mysql·api·免费api
灯琰14 小时前
五款MySQL 可视化客户端软件
数据库·mysql
两袖清风9984 小时前
【MySQL】三大范式
数据库·mysql
CHEN5_025 小时前
Redis分布式缓存(RDB、AOF、主从同步)
redis·分布式·缓存
Wooden-Flute5 小时前
八、数据库恢复技术
服务器·数据库·oracle
南棱笑笑生5 小时前
20250611在全志H3平台的Nano Pi NEO CORE开发板上运行Ubuntu Core16.04时让4G模块EC200A-CN使用AT命令拨号上网
linux·数据库·ubuntu
文牧之6 小时前
PostgreSQL 的扩展pg_surgery
运维·数据库·postgresql
眠修7 小时前
MongoDB 数据库应用
数据库·mongodb