首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在码头集群上运行redis群集?

如何在码头集群上运行redis群集?
EN

Stack Overflow用户
提问于 2017-09-27 17:44:08
回答 2查看 2.7K关注 0票数 1

上下文

我正在尝试设置一个redis集群,以便它运行在一个对接集群之上,以实现最大限度的自动修复。

更准确地说,我有一个docker复合文件,它定义了一个包含3个副本的服务。每个服务副本都有一个运行的redis服务器。然后,我在每个副本中都有一个程序,该程序侦听停靠者集群上的更改,并在满足条件时启动集群(每个3台红服务器都知道对方)。

设置redis集群工作正常,集群已经形成,所有redis服务器都能很好地通信,但是redis服务器之间的通信在停靠服务器集群内。

问题

当我试图从码头集群之外进行通信时,由于入口模式,我可以与redis服务器对话,但是当我尝试添加信息(例如:设置foo bar)时,客户端被移动到另一个redis服务器,通信挂起,并最终超时。

这是停靠-合成文件。

代码语言:javascript
运行
复制
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

显示问题的一系列命令。

客户端

代码语言:javascript
运行
复制
~ ./redis-cli -c -p 30000
127.0.0.1:30000>

Redis服务器

代码语言:javascript
运行
复制
OK
1506533095.032738 [0 10.255.0.2:59700] "COMMAND"
1506533098.335858 [0 10.255.0.2:59700] "info"

客户端

代码语言:javascript
运行
复制
127.0.0.1:30000> set ghb fki
OK

Redis服务器

代码语言:javascript
运行
复制
1506533566.481334 [0 10.255.0.2:59718] "COMMAND"
1506533571.315238 [0 10.255.0.2:59718] "set" "ghb" "fki"

客户端

代码语言:javascript
运行
复制
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>

有什么想法吗?我也试过让我的一个代理/负载均衡器,但没有工作。

谢谢!祝您今天愉快。

EN

回答 2

Stack Overflow用户

发布于 2017-09-27 18:01:51

对于这个用例,哨兵可能会有所帮助。Redis本身并不是高可用性的。另一边的哨兵是一个分布式系统,可以为您完成以下工作:

  • 将入口传送到当前的Redis主服务器。
  • 如果当前一个失败,请选择一个新的Redis主。

虽然我以前已经对这个主题做过研究,但我还没有设法找到一个有用的例子。

票数 1
EN

Stack Overflow用户

发布于 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群服务。您的内部程序需要相应地更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46454117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档