You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Docker环境中通过docker-compose创建Redis Cluster及选用适配镜像

用Docker Compose搭建Redis Cluster集群(支持主从复制)

Hey there! 要搭建支持主从复制的Redis Cluster,完全不用折腾自定义镜像——官方的redis镜像就自带了集群所需的所有工具和配置支持,直接用它就行。下面给你一套完整的实操方案,一步到位搞定集群搭建。

第一步:编写docker-compose.yml配置文件

我们用6个节点来搭建标准的3主3从集群(Redis Cluster至少需要3个主节点,搭配从节点实现高可用)。创建一个docker-compose.yml文件,内容如下:

version: '3.8'

services:
  redis-node-1:
    image: redis:7.2  # 生产环境建议指定具体版本,避免镜像更新带来的兼容问题
    container_name: redis-node-1
    ports:
      - "7001:6379"    # 客户端连接端口
      - "17001:16379"  # 集群节点间通信端口
    volumes:
      - ./redis-data/node-1:/data  # 持久化数据目录
    command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    networks:
      - redis-cluster-net

  redis-node-2:
    image: redis:7.2
    container_name: redis-node-2
    ports:
      - "7002:6379"
      - "17002:16379"
    volumes:
      - ./redis-data/node-2:/data
    command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    networks:
      - redis-cluster-net

  redis-node-3:
    image: redis:7.2
    container_name: redis-node-3
    ports:
      - "7003:6379"
      - "17003:16379"
    volumes:
      - ./redis-data/node-3:/data
    command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    networks:
      - redis-cluster-net

  redis-node-4:
    image: redis:7.2
    container_name: redis-node-4
    ports:
      - "7004:6379"
      - "17004:16379"
    volumes:
      - ./redis-data/node-4:/data
    command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    networks:
      - redis-cluster-net

  redis-node-5:
    image: redis:7.2
    container_name: redis-node-5
    ports:
      - "7005:6379"
      - "17005:16379"
    volumes:
      - ./redis-data/node-5:/data
    command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    networks:
      - redis-cluster-net

  redis-node-6:
    image: redis:7.2
    container_name: redis-node-6
    ports:
      - "7006:6379"
      - "17006:16379"
    volumes:
      - ./redis-data/node-6:/data
    command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes
    networks:
      - redis-cluster-net

networks:
  redis-cluster-net:
    driver: bridge

配置参数说明

  • --cluster-enabled yes:开启Redis集群模式
  • --cluster-config-file nodes.conf:集群节点的元数据存储文件,自动生成
  • --cluster-node-timeout 5000:节点超时时间(毫秒),超时后会触发故障转移
  • --appendonly yes:开启AOF持久化,避免容器重启后数据丢失

第二步:启动Redis节点

先创建数据目录并设置权限(避免Redis进程无法读写):

mkdir -p ./redis-data/node-{1..6} && chmod -R 777 ./redis-data

然后启动所有容器:

docker-compose up -d

docker-compose ps检查所有节点是否正常运行。

第三步:初始化Redis Cluster

进入任意一个节点(比如redis-node-1),用内置的redis-cli执行集群初始化命令:

docker exec -it redis-node-1 redis-cli --cluster create \
  redis-node-1:6379 redis-node-2:6379 redis-node-3:6379 \
  redis-node-4:6379 redis-node-5:6379 redis-node-6:6379 \
  --cluster-replicas 1
  • --cluster-replicas 1表示每个主节点对应1个从节点,命令执行后会自动分配3主3从的架构
  • 终端会提示你确认集群配置,输入yes即可完成初始化

第四步:验证集群状态

进入任意节点的集群模式客户端:

docker exec -it redis-node-1 redis-cli -c

执行以下命令验证:

# 查看集群整体状态
127.0.0.1:6379> cluster info
# 查看所有节点的主从关系
127.0.0.1:6379> cluster nodes

如果看到cluster_state:ok,就说明集群已经正常运行了。

主从复制与高可用说明

  • 初始化时,节点4、5、6会自动成为节点1、2、3的从节点,同步主节点的数据
  • 当某个主节点故障时,集群会自动从对应的从节点中选举新的主节点,实现无感知故障转移
  • 你也可以手动调整主从关系,比如在从节点执行cluster replicate <主节点ID>

内容的提问来源于stack exchange,提问作者Anshuman Bardhan

火山引擎 最新活动