我正在努力创建 Docker Compose 来创建 Redis 集群。我看到 Bitnami 有一个 Redis 集群映像,我尝试了,但由于以下错误,我的 Spring Boot 应用程序无法连接到它:
我尝试了另一种方法是创建 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 集群不容易与 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
。
我遇到了同样的问题,非常感谢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'