Docker-compose部署redis-cluster集群的完整步骤

 更新时间:2026年01月10日 09:55:40   作者:creator_Li  
这篇文章给大家介绍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:环境准备

检查 Docker 和 Docker Compose 是否安装:

# 检查Docker
docker -v
# 检查Docker Compose
docker-compose -v
# 若未安装,先安装(以CentOS为例)
yum install -y docker docker-compose
systemctl start docker && systemctl enable docker

替换配置中的宿主机 IP:将所有 redis*.conf 和集群创建命令中的 172.13.3.160 替换为你的宿主机实际 IP(可通过 ifconfig/ip addr 查看)。

关闭防火墙 / 开放端口(二选一,推荐开放端口更安全):

# 方式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:创建目录和配置文件

创建项目目录(统一管理文件):

mkdir -p redis-cluster/{7001,7002,7003,7004,7005,7006}/data
cd redis-cluster

生成 6 个 Redis 配置文件(以 redis1.conf 为例,其他仅改端口):

# 创建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

创建 docker-compose.yml 文件:

# 注意:新版本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:启动容器

# 启动并后台运行容器
docker-compose up -d
# 检查容器状态(6个容器都应是Up状态)
docker-compose ps
# 或
docker ps | grep redis

步骤 4:初始化 Redis Cluster 集群

进入任意一个 Redis 容器(比如 redis1):

docker exec -it redis1 /bin/bash

执行集群创建命令(替换为你的宿主机 IP):

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:验证集群是否正常

连接集群(-c 表示开启集群模式,自动重定向):

redis-cli -c -p 7001

查看集群节点信息:

redis

127.0.0.1:7001> cluster nodes
# 输出会显示6个节点,标注主(master)/从(slave)、槽位分配等信息

测试数据读写(验证集群分片):

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的节点并返回结果

三、常用运维命令

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

四、常见问题及解决方法

  • 集群创建失败:Could not connect to xxx:7001
    • 原因:端口未开放、宿主机 IP 配置错误、容器网络模式问题;
    • 解决:检查防火墙 / 端口、确认 cluster-announce-ip 是宿主机 IP、添加 network_mode: "host"
  • 容器启动后日志报错:Cluster state changed: fail
    • 原因:节点间总线端口(17001-17006)未开放;
    • 解决:开放 17001-17006 端口,重启容器。
  • 数据写入后重启容器丢失
    • 原因:数据目录未挂载或权限问题;
    • 解决:检查 volumes 挂载路径是否正确,给本地数据目录赋权:
  • 运行
chmod 777 -R 700*/data

总结

  1. 部署核心:替换宿主机 IP + 开放所有端口(7001-7006、17001-17006) + 初始化集群命令
  2. 关键配置:cluster-announce-ip 必须是宿主机 IP,protected-mode no 关闭保护模式;
  3. 避坑点:添加 network_mode: host 避免容器网络隔离导致的通信失败,开启 AOF 持久化防止数据丢失。

到此这篇关于Docker-compose部署redis-cluster集群的文章就介绍到这了,更多相关Docker compose redis-cluster集群内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker desktop实现一分钟部署searxng

    docker desktop实现一分钟部署searxng

    这篇文章主要介绍了docker desktop实现一分钟部署searxng,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • docker下迁移elasticsearch问题以及解决方案

    docker下迁移elasticsearch问题以及解决方案

    文章描述了如何将Elasticsearch数据从一个服务器迁移到另一个服务器,包括数据挂载、版本一致性、启动命令的匹配以及可能遇到的权限和节点故障问题的解决方法
    2024-11-11
  • Docker安装和基础用法 Docker入门教程第二篇

    Docker安装和基础用法 Docker入门教程第二篇

    这篇文章主要介绍了Docker安装和基础用法,Docker入门教程第二篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • Docker内置网络模式分析

    Docker内置网络模式分析

    这篇文章主要为大家介绍了Docker内置网络模式分析及使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Docker简单安装与应用入门教程

    Docker简单安装与应用入门教程

    这篇文章主要介绍了Docker简单安装与应用,结合实例形式分析了Docker常见的安装、应用构建、终端访问等操作相关实现技巧与注意事项,需要的朋友可以参考下
    2018-06-06
  • Docker目录迁移的详细执行步骤(按脚本流程)

    Docker目录迁移的详细执行步骤(按脚本流程)

    我们在生产环境中安装Docker时,默认的安装目录是 /var/lib/docker,而通常情况下,规划给系统盘的目录一般为50G,该目录是比较小的,一旦容器过多或容器日志过多,就可能出现Docker无法运行的情况,所以我们进行Docker目录迁移,本文给大家介绍了Docker目录迁移的详细步骤
    2025-07-07
  • Docker挂载资料卷保存MySQL数据

    Docker挂载资料卷保存MySQL数据

    这篇文章介绍了Docker挂载资料卷保存MySQL数据的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-01-01
  • Docker端口暴露的几种方式

    Docker端口暴露的几种方式

    主要介绍了Docker端口暴露的几种方式,包括-p(--publish)、-P(--publish-all)和EXPOSE,具有一定的参考价值,感兴趣的可以了解一下
    2025-12-12
  • 在CentOS 7上安装Docker环境的方法与注意事项

    在CentOS 7上安装Docker环境的方法与注意事项

    这篇文章主要介绍了在CentOS 7上安装Docker环境的方法与注意事项,需要的朋友可以参考下
    2016-10-10
  • 在docker中配置Oracle11g的过程

    在docker中配置Oracle11g的过程

    这篇文章主要介绍了在docker中配置Oracle11g ,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04

最新评论