Plantre Plantre
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

plantre

一个后端开发者
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机组成原理

  • 操作系统

  • 计算机网络

  • 设计模式

  • Java

  • Spring

  • SpringCloud

  • MySQL

  • Redis

    • redis的槽

    • 集群搭建

      • redis3主3从搭建方式
        • redis3 主 3 从和哨兵模式什么区别
        • 修改集群
        • Redis Cluster 节点管理
        • 常用集群维护命令​
        • 一个项目有必要搭建多个redis集群吗,集群和集群之间什么关系
    • 分布式

    • Zookeeper

    • Dubbo

    • Kafka

    • 数据结构

    • 算法

    • OJ

    • 从道家哲学看计算机?
    • 后端
    • Redis
    • 集群搭建
    plantre
    2025-06-19
    目录

    redis3主3从搭建方式

    以下是通过 Docker 搭建 Redis 集群的完整方案,涵盖单机快速部署、多机生产级部署、验证测试及扩容管理,结合多个来源的最佳实践整理而成:


    # 🔧 一、单机快速搭建(开发测试)

    适用于本地学习或测试环境,一台机器模拟多节点集群。

    # 步骤:

    1. 编写 docker-compose.yml
      创建 6 个节点(3 主 3 从):

      version: '3.7'
      services:
        redis-node1:
          image: redis:latest
          ports: ["6371:6379", "16371:16379"]
          command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
        # 重复配置 redis-node2 到 redis-node6(端口递增:6372-6376, 16372-16376)
      
      1
      2
      3
      4
      5
      6
      7
    2. 启动容器

      docker-compose up -d
      
      1
    3. 创建集群

      docker exec -it redis-node1 redis-cli --cluster create \
        172.18.0.2:6379 172.18.0.3:6379 172.18.0.4:6379 \
        172.18.0.5:6379 172.18.0.6:6379 172.18.0.7:6379 \
        --cluster-replicas 1
      
      1
      2
      3
      4
      • --cluster-replicas 1:每个主节点配 1 个从节点。

    # ⚙️ 二、多机生产部署(3 台服务器)

    跨物理机部署,保障高可用。

    # 步骤:

    1. 每台服务器部署 2 个节点(共 6 节点)

      # 服务器 1(172.16.17.100)
      docker run -d --name redis-7000 -p 7000:7000 -p 17000:17000 \
        -e CLUSTER_ANNOUNCE_IP=172.16.17.100 redis:latest \
        redis-server --cluster-enabled yes --port 7000
      # 同服务器启动 redis-7001(端口 7001/17001)
      
      1
      2
      3
      4
      5

      重复操作:

      • 服务器 2(172.16.17.101):部署 redis-7002、redis-7003
      • 服务器 3(172.16.17.102):部署 redis-7004、redis-7005。
    2. 创建集群(任意一台服务器执行)

      docker exec -it redis-7000 redis-cli --cluster create \
        172.16.17.100:7000 172.16.17.100:7001 \
        172.16.17.101:7002 172.16.17.101:7003 \
        172.16.17.102:7004 172.16.17.102:7005 \
        --cluster-replicas 1
      
      1
      2
      3
      4
      5
      • 自动分配:主从节点会跨物理机分布(如主节点在服务器1,从节点在服务器2)。

    # ✅ 三、集群验证与测试

    确保集群正常工作并具备容错能力。

    1. 检查集群状态

      docker exec -it redis-7000 redis-cli cluster nodes
      
      1

      预期输出:

      • 3 个 master 在线,每个 master 有 1 个 slave
      • 所有 Slot(16384 个)已分配完成。
    2. 数据读写测试

      # 节点1写入
      docker exec -it redis-7000 redis-cli -c set user:101 "Alice"
      # 节点2读取(自动重定向)
      docker exec -it redis-7002 redis-cli -c get user:101  # 返回 "Alice"
      
      1
      2
      3
      4
    3. 故障转移测试

      # 停止主节点
      docker stop redis-7000
      # 等待 15 秒(cluster-node-timeout),检查从节点是否升主
      docker exec -it redis-7001 redis-cli cluster nodes | grep master
      
      1
      2
      3
      4

    # 🛠️ 四、扩容与管理

    # 扩容主节点

    1. 新增节点(例如端口 7006)
      docker run -d --name redis-7006 -p 7006:7006 -p 17006:17006 \
        -e CLUSTER_ANNOUNCE_IP=172.16.17.103 redis:latest \
        redis-server --cluster-enabled yes --port 7006
      
      1
      2
      3
    2. 加入集群并分配 Slot
      # 加入集群
      docker exec -it redis-7000 redis-cli --cluster add-node 172.16.17.103:7006 172.16.17.100:7000
      # 分配 Slot(从其他主节点迁移)
      docker exec -it redis-7000 redis-cli --cluster reshard 172.16.17.103:7006 --cluster-from <源节点ID> --cluster-slots 1000
      
      1
      2
      3
      4

    # 日常运维

    操作 命令
    节点安全关闭 docker stop redis-7000 && docker start redis-7000
    集群状态检查 docker exec -it redis-node1 redis-cli cluster info
    备份数据 挂载数据卷(-v /redis-data:/data),定期备份持久化文件

    # ⚠️ 关键配置与避坑指南

    1. 网络要求

      • 节点间需开放客户端端口(如 6379)和集群总线端口(+10000,如 16379)。
      • 跨服务器时禁用防火墙或放行端口:
        firewall-cmd --add-port={7000-7005}/tcp --permanent && firewall-cmd --reload
        
        1
    2. 配置一致性

      • 所有节点需启用集群模式:
        cluster-enabled yes
        cluster-node-timeout 15000  # 超时时间(毫秒)
        
        1
        2
      • 生产环境务必设置密码:
        requirepass yourpassword
        masterauth yourpassword
        
        1
        2
    3. 客户端连接配置(Spring Boot 示例)

      spring:
        redis:
          cluster:
            nodes:
              - 172.16.17.100:7000
              - 172.16.17.100:7001
              - 172.16.17.101:7002
              - 172.16.17.101:7003
              - 172.16.17.102:7004
              - 172.16.17.102:7005
          password: yourpassword
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11

    # 💎 总结

    • 单机部署:适合快速验证,使用 Docker Compose 一键启动。
    • 多机部署:生产首选,主从跨物理机,通过 CLUSTER_ANNOUNCE_IP 指定公网 IP。
    • 高可用核心:Slot 分片存储 + 主从自动故障转移(超时触发选举)。

    执行 docker-compose up -d 后若集群创建失败,检查节点日志:

    docker logs redis-node1  # 排查端口冲突或配置错误
    
    1
    编辑 (opens new window)
    上次更新: 2025/06/24, 00:41:57
    使用redis存key时,存到哪个主节点是怎么决定的
    redis3 主 3 从和哨兵模式什么区别

    ← 使用redis存key时,存到哪个主节点是怎么决定的 redis3 主 3 从和哨兵模式什么区别→

    最近更新
    01
    集成loki
    07-04
    02
    TCP的ESTABLISHED是什么意思
    06-24
    03
    安装1panel
    06-24
    更多文章>
    Theme by Vdoing | Copyright © 2025-2025 plantre | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式