上下文
我正在尝试设置一个redis集群,以便它运行在一个对接集群之上,以实现最大限度的自动修复。
更准确地说,我有一个docker复合文件,它定义了一个包含3个副本的服务。每个服务副本都有一个运行的redis服务器。然后,我在每个副本中都有一个程序,该程序侦听停靠者集群上的更改,并在满足条件时启动集群(每个3台红服务器都知道对方)。
设置redis集群工作正常,集群已经形成,所有redis服务器都能很好地通信,但是redis服务器之间的通信在停靠服务器集群内。
问题
当我试图从码头集群之外进行通信时,由于入口模式,我可以与redis服务器对话,但是当我尝试添加信息(例如:设置foo bar)时,客户端被移动到另一个redis服务器,通信挂起,并最终超时。
码
这是停靠-合成文件。
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
OKRedis服务器
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>有什么想法吗?我也试过让我的一个代理/负载均衡器,但没有工作。
谢谢!祝您今天愉快。
发布于 2017-09-27 18:01:51
对于这个用例,哨兵可能会有所帮助。Redis本身并不是高可用性的。另一边的哨兵是一个分布式系统,可以为您完成以下工作:
虽然我以前已经对这个主题做过研究,但我还没有设法找到一个有用的例子。
发布于 2017-09-27 19:44:53
redis-cli将在入口网络中获取redis服务器ip,并尝试通过该ip直接访问远程redis服务器。这就是redis-cli显示Redirected to slot [3830] located at 10.0.0.3:6379的原因。但是这个内部的10.0.0.3是不能被redis-cli访问的。
一种解决方案是运行另一个代理服务,它与redis集群连接到同一个网络上。应用程序将所有请求发送到该代理服务,代理服务与redis集群进行对话。
或者,您可以创建使用网桥网络并将redis端口公开给节点的3群服务。您的内部程序需要相应地更改。
https://stackoverflow.com/questions/46454117
复制相似问题