Redis集群Docker Compose

5
我正在努力创建一个Docker Compose来创建Redis集群。我看到Bitnami有一个Redis Cluster镜像,我尝试了一下,但我的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,正在学习中,非常感谢任何帮助。提前致谢。


我认为你正在使用默认的redis镜像,该镜像默认使用6379端口。因此,你的节点0的端口配置应该是6380:6379,节点1是6381:6379,以此类推。你可以尝试一下,看看会发生什么。 - Shawrup
嗨@Shawrup,我更新了docker-compose,并在创建集群时更改了IP,但是我遇到了这个错误 [ERR]节点192.168.32.2:6379未配置为集群节点。 - Nguyễn Đức Tâm
1
我猜测您没有配置Redis支持集群。您需要更新redis.conf文件。您可以在此处找到文档:https://redis.io/topics/cluster-tutorial。或者,您可以使用此链接:https://github.com/bitnami/bitnami-docker-redis-cluster/blob/master/docker-compose.yml,这似乎有一个内置集群支持的映像。 - Shawrup
我已经添加了一个 command 标签,并成功创建了一个 Redis 集群。如果您了解如何从 Spring Boot 应用程序连接到 Redis 集群,那将非常感激。 - Nguyễn Đức Tâm
@NguyễnĐứcTâm,你解决了吗? - Rani Selvaraj
1个回答

5

这样做的方法并不明显,因为Redis Cluster与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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接