Redis 集群 Docker 组合

问题描述 投票:0回答:2

我正在努力创建 Docker Compose 来创建 Redis 集群。我看到 Bitnami 有一个 Redis 集群映像,我尝试了,但由于以下错误,我的 Spring Boot 应用程序无法连接到它: enter image description here

我尝试了另一种方法是创建 2 个主从 Redis 实例,我可以连接到它。现在我尝试创建 6 个 Redis 实例,然后使用以下命令创建一个包含 3 个主服务器和 3 个从服务器的 Redis 集群:

redis-cli --cluster create 127.0.0.1:6380 127.0.0.1:6381 \
127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 --cluster-replicas 1

但是当我执行命令时它说

Could not connect to Redis at 127.0.0.1:6380: Connection refused

下面是我当前的 Docker-compose.yaml:

version: '3.8'
services:
  redis-node-0:
    image: redis:latest
    container_name: redis-0
    ports:
      - "6380:6379"
    command: ["redis-server","--appendonly yes","--cluster-enabled yes","--cluster-node-timeout 5000"]
    volumes:
      - redis-cluster_data-0:/redis/data

  redis-node-1:
    image: redis:latest
    container_name: redis-1
    ports:
      - "6381:6379"
    command: ["redis-server","--appendonly yes","--cluster-enabled yes","--cluster-node-timeout 5000"]  
    volumes:
      - redis-cluster_data-1:/redis/data

  redis-node-2:
    image: redis:latest
    container_name: redis-2
    ports:
      - "6382:6379"
    command: ["redis-server","--appendonly yes","--cluster-enabled yes","--cluster-node-timeout 5000"]
    volumes:
      - redis-cluster_data-2:/redis/data

  redis-node-3:
    image: redis:latest
    container_name: redis-3
    ports:
      - "6383:6379"
    command: ["redis-server","--appendonly yes","--cluster-enabled yes","--cluster-node-timeout 5000"]
    volumes:
      - redis-cluster_data-3:/redis/data

  redis-node-4:
    image: redis:latest
    container_name: redis-4
    ports:
      - "6384:6379"
    command: ["redis-server","--appendonly yes","--cluster-enabled yes","--cluster-node-timeout 5000"]
    volumes:
      - redis-cluster_data-4:/redis/data

  redis-node-5:
    image: redis:latest
    container_name: redis-5
    ports:
      - "6385:6379"
    command: ["redis-server","--appendonly yes","--cluster-enabled yes","--cluster-node-timeout 5000"]
    volumes:
      - redis-cluster_data-5:/redis/data


networks: 
  default:
    name: overlay
volumes:
  redis-cluster_data-0:
    driver: local
  redis-cluster_data-1:
    driver: local
  redis-cluster_data-2:
    driver: local
  redis-cluster_data-3:
    driver: local
  redis-cluster_data-4:
    driver: local
  redis-cluster_data-5:
    driver: local

我对 Docker 和 Redis 都是全新的,我正在学习,所以任何帮助将不胜感激。预先感谢。

spring-boot docker-compose redis-cluster
2个回答
10
投票

实现这一点的方法并不明显,因为 Redis 集群不容易与 Docker 桥接网络配合使用。设置单节点集群的最简单方法是欺骗并将其绑定到 127.0.0.1:

version: '3.8'

services:
  redis-single-node-cluster:
    image: docker.io/bitnami/redis-cluster:7.0
    environment:
      - 'ALLOW_EMPTY_PASSWORD=yes'
      - 'REDIS_CLUSTER_REPLICAS=0'
      - 'REDIS_NODES=127.0.0.1 127.0.0.1 127.0.0.1'
      - 'REDIS_CLUSTER_CREATOR=yes'
      - 'REDIS_CLUSTER_DYNAMIC_IPS=no'
      - 'REDIS_CLUSTER_ANNOUNCE_IP=127.0.0.1'
    ports:
      - '6379:6379'

然后您可以使用此 Spring Boot 配置连接到它:

spring:
  redis:
    cluster:
      nodes: [localhost:6379]
    ssl: false

如果您想设置多个节点,则必须创建自定义网络并分配静态 IP。您可能还需要设置

network_mode: host


0
投票

我遇到了同样的问题,非常感谢Michael Böckling的回答,但对我来说这不是最终的解决方案,除了我做了一些改变,也许这对某人有用

version: '3.8'

services:
  app:
    ...
    environment:
      - REDIS_URL=redis://:@redis-cluster:6379/0
    depends_on:
      redis-cluster:
        condition: service_started


  redis-cluster:
    image: docker.io/bitnami/redis-cluster:7.0
    environment:
      - 'ALLOW_EMPTY_PASSWORD=yes'
      - 'REDIS_CLUSTER_REPLICAS=0'
      - 'REDIS_NODES=redis-cluster redis-cluster redis-cluster'
      - 'REDIS_CLUSTER_CREATOR=yes'
      - 'REDIS_CLUSTER_DYNAMIC_IPS=no'
      - 'REDIS_CLUSTER_ANNOUNCE_IP=redis-cluster'
    ports:
      - '6379:6379'
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.