news 2026/4/18 8:46:42

Docker-compose部署redis-cluster集群

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker-compose部署redis-cluster集群

一、核心配置解析(先理解关键参数)

1. Redis 配置文件(redis1.conf/redis2.conf...)核心参数
参数作用
port 7001Redis 节点的服务端口(6 个节点对应 7001-7006)
protected-mode no关闭保护模式(允许跨机器访问,集群部署必须关闭)
cluster-enabled yes开启集群模式(Redis Cluster 核心开关)
cluster-config-file nodes.conf集群节点信息文件(自动生成,无需手动修改)
cluster-node-timeout 5000集群节点超时时间(5 秒,超时则判定节点不可用)
cluster-announce-ip 172.13.3.160集群对外公告的 IP(必须是宿主机可访问的 IP,容器内 IP 不行)
cluster-announce-port 7001集群对外公告的服务端口(和 port 一致)
cluster-announce-bus-port 17001集群节点间通信的总线端口(服务端口 + 10000)
appendonly yes开启 AOF 持久化(防止集群重启数据丢失)
2. docker-compose.yml 核心配置
  • &redis-image:YAML 锚点语法,复用redis:5.0.7镜像,避免重复写;
  • volumes:挂载本地配置文件到容器内(./redis1.conf:/home/redis/cluster/redis.conf)、挂载数据目录(./7001/data:/data),保证配置生效和数据持久化;
  • ports:映射端口(服务端口 + 总线端口),必须全部开放,否则集群节点无法通信。

二、完整部署步骤(适配通用 Linux 环境,如 CentOS/Ubuntu)

步骤 1:环境准备
  1. 检查 Docker 和 Docker Compose 是否安装:

    bash

    运行

    # 检查Docker docker -v # 检查Docker Compose docker-compose -v # 若未安装,先安装(以CentOS为例) yum install -y docker docker-compose systemctl start docker && systemctl enable docker
  2. 替换配置中的宿主机 IP:将所有redis*.conf和集群创建命令中的172.13.3.160替换为你的宿主机实际 IP(可通过ifconfig/ip addr查看)。
  3. 关闭防火墙 / 开放端口(二选一,推荐开放端口更安全):

    bash

    运行

    # 方式1:临时关闭防火墙(CentOS) systemctl stop firewalld && systemctl disable firewalld # 方式2:开放所需端口(推荐,CentOS) firewall-cmd --add-port=7001-7006/tcp --permanent firewall-cmd --add-port=17001-17006/tcp --permanent firewall-cmd --reload # Ubuntu 防火墙开放端口 ufw allow 7001-7006/tcp ufw allow 17001-17006/tcp ufw reload
步骤 2:创建目录和配置文件
  1. 创建项目目录(统一管理文件):

    bash

    运行

    mkdir -p redis-cluster/{7001,7002,7003,7004,7005,7006}/data cd redis-cluster
  2. 生成 6 个 Redis 配置文件(以 redis1.conf 为例,其他仅改端口):

    bash

    运行

    # 创建redis1.conf cat > redis1.conf << EOF port 7001 protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 cluster-announce-ip 你的宿主机IP cluster-announce-port 7001 cluster-announce-bus-port 17001 appendonly yes pidfile /var/run/redis_7001.pid EOF # 快速生成redis2-redis6.conf(替换端口) for port in {2..6}; do cp redis1.conf redis${port}.conf sed -i "s/7001/700${port}/g" redis${port}.conf sed -i "s/17001/1700${port}/g" redis${port}.conf sed -i "s/redis_7001/redis_700${port}/g" redis${port}.conf done
  3. 创建 docker-compose.yml 文件:

    yaml

    # 注意:新版本Docker Compose可删除version字段(避免过时警告) x-image: &redis-image redis:5.0.7 services: redis1: image: *redis-image container_name: redis1 command: ["redis-server", "/home/redis/cluster/redis.conf"] volumes: - ./redis1.conf:/home/redis/cluster/redis.conf - ./7001/data:/data ports: - 7001:7001 - 17001:17001 # 可选:添加网络模式,避免IP问题 network_mode: "host" redis2: image: *redis-image container_name: redis2 command: ["redis-server", "/home/redis/cluster/redis.conf"] volumes: - ./redis2.conf:/home/redis/cluster/redis.conf - ./7002/data:/data ports: - 7002:7002 - 17002:17002 network_mode: "host" redis3: image: *redis-image container_name: redis3 command: ["redis-server", "/home/redis/cluster/redis.conf"] volumes: - ./redis3.conf:/home/redis/cluster/redis.conf - ./7003/data:/data ports: - 7003:7003 - 17003:17003 network_mode: "host" redis4: image: *redis-image container_name: redis4 command: ["redis-server", "/home/redis/cluster/redis.conf"] volumes: - ./redis4.conf:/home/redis/cluster/redis.conf - ./7004/data:/data ports: - 7004:7004 - 17004:17004 network_mode: "host" redis5: image: *redis-image container_name: redis5 command: ["redis-server", "/home/redis/cluster/redis.conf"] volumes: - ./redis5.conf:/home/redis/cluster/redis.conf - ./7005/data:/data ports: - 7005:7005 - 17005:17005 network_mode: "host" redis6: image: *redis-image container_name: redis6 command: ["redis-server", "/home/redis/cluster/redis.conf"] volumes: - ./redis6.conf:/home/redis/cluster/redis.conf - ./7006/data:/data ports: - 7006:7006 - 17006:17006 network_mode: "host"
    ✨ 关键优化:添加network_mode: "host",让容器使用宿主机网络,避免容器内 IP 和宿主机 IP 不一致导致集群通信失败。
步骤 3:启动容器

bash

运行

# 启动并后台运行容器 docker-compose up -d # 检查容器状态(6个容器都应是Up状态) docker-compose ps # 或 docker ps | grep redis
步骤 4:初始化 Redis Cluster 集群
  1. 进入任意一个 Redis 容器(比如 redis1):

    bash

    运行

    docker exec -it redis1 /bin/bash
  2. 执行集群创建命令(替换为你的宿主机 IP):

    bash

    运行

    redis-cli --cluster create 你的宿主机IP:7001 你的宿主机IP:7002 你的宿主机IP:7003 你的宿主机IP:7004 你的宿主机IP:7005 你的宿主机IP:7006 --cluster-replicas 1
    • --cluster-replicas 1:表示每个主节点对应 1 个从节点,最终形成 3 主 3 从的集群;
    • 执行后会提示集群规划,输入yes确认即可。
步骤 5:验证集群是否正常
  1. 连接集群(-c 表示开启集群模式,自动重定向):

    bash

    运行

    redis-cli -c -p 7001
  2. 查看集群节点信息:

    redis

    127.0.0.1:7001> cluster nodes # 输出会显示6个节点,标注主(master)/从(slave)、槽位分配等信息
  3. 测试数据读写(验证集群分片):

    redis

    127.0.0.1:7001> set name test OK 127.0.0.1:7001> get name "test" # 切换节点测试(比如7002) 127.0.0.1:7001> exit redis-cli -c -p 7002 127.0.0.1:7002> get name # 会自动重定向到存储该key的节点并返回结果

三、常用运维命令

bash

运行

# 停止集群容器 docker-compose stop # 启动集群容器 docker-compose start # 彻底删除集群(含数据,谨慎使用) docker-compose down rm -rf 700*/data/* # 删除持久化数据 # 查看集群状态 docker exec -it redis1 redis-cli -c -p 7001 cluster info

四、常见问题及解决方法

  1. 集群创建失败:Could not connect to xxx:7001

    • 原因:端口未开放、宿主机 IP 配置错误、容器网络模式问题;
    • 解决:检查防火墙 / 端口、确认cluster-announce-ip是宿主机 IP、添加network_mode: "host"
  2. 容器启动后日志报错:Cluster state changed: fail

    • 原因:节点间总线端口(17001-17006)未开放;
    • 解决:开放 17001-17006 端口,重启容器。
  3. 数据写入后重启容器丢失

    • 原因:数据目录未挂载或权限问题;
    • 解决:检查volumes挂载路径是否正确,给本地数据目录赋权:

      bash

      运行

      chmod 777 -R 700*/data

总结

  1. 部署核心:替换宿主机 IP + 开放所有端口(7001-7006、17001-17006) + 初始化集群命令
  2. 关键配置:cluster-announce-ip必须是宿主机 IP,protected-mode no关闭保护模式;
  3. 避坑点:添加network_mode: host避免容器网络隔离导致的通信失败,开启 AOF 持久化防止数据丢失。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 19:04:16

手把手教你用LITELLM快速接入大语言模型,无需复杂配置。

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 编写一个面向新手的LITELLM入门教程代码示例。要求&#xff1a;1) 从安装开始逐步讲解&#xff1b;2) 包含3个最简单的使用示例&#xff1b;3) 每个示例都有详细注释和预期输出&am…

作者头像 李华
网站建设 2026/4/18 8:34:40

IPERF在企业网络优化中的实战案例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个IPERF实战应用案例库&#xff0c;包含多个企业网络优化场景&#xff08;如数据中心、远程办公、云服务等&#xff09;。每个案例应包括测试配置、执行步骤、结果分析和优化…

作者头像 李华
网站建设 2026/4/18 7:19:00

EXT2FSD文件系统驱动开发:AI如何加速Linux与Windows互通

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个Windows平台下的EXT2/3/4文件系统驱动程序&#xff0c;要求&#xff1a;1.支持读写EXT2/3/4分区 2.提供NTFS类似的权限管理接口 3.包含磁盘检测和修复工具 4.实现与Window…

作者头像 李华
网站建设 2026/4/17 15:39:40

汽车4S店维修单据图像处理:GLM-4.6V-Flash-WEB助力数字化转型

汽车4S店维修单据图像处理&#xff1a;GLM-4.6V-Flash-WEB助力数字化转型 在一家繁忙的汽车4S店&#xff0c;每天都有几十甚至上百张手写或打印的维修工单被技师拍照上传。这些图像里藏着客户姓名、车牌号、更换项目和费用明细&#xff0c;是后续结算与服务跟踪的关键依据。然而…

作者头像 李华
网站建设 2026/4/18 12:51:29

从开源模型到生产级应用:我们提供的GLM-4.6V-Flash-WEB全栈支持

从开源模型到生产级应用&#xff1a;我们提供的GLM-4.6V-Flash-WEB全栈支持 在今天&#xff0c;越来越多企业希望将多模态AI能力嵌入实际业务——无论是自动审核用户上传的图片内容&#xff0c;还是让客服系统“看懂”截图中的问题。但现实往往令人沮丧&#xff1a;很多开源视觉…

作者头像 李华
网站建设 2026/4/17 17:56:12

亲测好用!自考必备8款AI论文写作软件TOP8测评

亲测好用&#xff01;自考必备8款AI论文写作软件TOP8测评 2026年自考AI论文写作工具测评&#xff1a;为何需要这份榜单&#xff1f; 随着人工智能技术的不断进步&#xff0c;越来越多的自考生开始借助AI写作工具提升论文撰写效率。然而&#xff0c;面对市场上琳琅满目的软件&am…

作者头像 李华