语境
我正在尝试设置一个 redis 集群,以便它在 docker 集群上运行,以实现最大的自动修复。
更准确地说,我有一个 docker compose 文件,它定义了一个具有 3 个副本的服务。每个服务副本都有一个正在运行的 redis-server。然后我在每个副本中都有一个程序,它监听 docker 集群上的变化,并在满足条件时启动集群(每 3 个 redis 服务器相互认识)。
设置redis集群工作正常,集群形成,所有redis-servers通信良好,但redis-servers之间的通信是在docker集群内部。
问题
当我尝试从 docker 集群外部进行通信时,由于入口模式,我能够与 redis-server 通信,但是当我尝试添加信息(例如:set foo bar)并且客户端被移动到另一个 redis-服务器通信挂起并最终超时。
代码
这是 docker-compose 文件。
version: "3.3"
services:
redis-cluster:
image: redis-srv-instance
volumes:
- /var/run/:/var/run
deploy:
mode: replicated
#endpoint_mode: dnsrr
replicas: 3
resources:
limits:
cpus: '0.5'
memory: 512M
ports:
- target: 6379
published: 30000
protocol: tcp
mode: ingress
显示问题的命令流。
客户
~ ./redis-cli -c -p 30000
127.0.0.1:30000>
Redis 服务器
OK
1506533095.032738 [0 10.255.0.2:59700] "COMMAND"
1506533098.335858 [0 10.255.0.2:59700] "info"
客户
127.0.0.1:30000> set ghb fki
OK
Redis 服务器
1506533566.481334 [0 10.255.0.2:59718] "COMMAND"
1506533571.315238 [0 10.255.0.2:59718] "set" "ghb" "fki"
客户
127.0.0.1:30000> set rte fgh
-> Redirected to slot [3830] located at 10.0.0.3:6379
Could not connect to Redis at 10.0.0.3:6379: Operation timed out
Could not connect to Redis at 10.0.0.3:6379: Operation timed out
(150.31s)
not connected>
有任何想法吗?我也尝试过制作我的一个代理/负载平衡器,但没有奏效。
谢谢!祝你今天过得愉快。