问题标签 [redis-sentinel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
180 浏览

redis - Spring XD分布式模式redis配置

我正在尝试以分布式模式配置 spring XD,但不幸的是我无法这样做。我正在尝试使用 redis 支持模块间通道,并且我正在运行一个 3 节点 redis 3.0 集群。

我对配置的更改如下所示,如果我遗漏了什么或者我需要做任何其他事情以使我的 spring 实例以分布式模式运行,请告诉我:

xd-container 的 servers.yml 文件配置如下

如果我使用此配置运行 xd-container,我会得到错误堆栈跟踪,如下所示

如果我删除哨兵,哨兵:主,哨兵:节点,容器启动正常但在部署某些流时失败,错误日志如下所示

但是当尝试使用 JedisCluster 从 java 连接时,我的 redis 集群绝对没有问题。

我在这个配置中遗漏了什么吗?有什么想法或意见吗?

提前致谢。

0 投票
3 回答
3921 浏览

kubernetes - 在Kubernetes中创建redis sentinel集群,redis master无法获取slave源IP

我使用 K8s 示例在 Kubernetes 上创建一个可靠、可扩展的 Redis。 https://github.com/kubernetes/kubernetes/tree/master/examples/redis

Redis master 需要获取 slave 的 origin IP 并注册到 sentinel。当主控失败时,哨兵将使用切换主控。

但是我的docker启动时没有iptables=false这个标志(它会创建一个类似SNAT的iptables),所以redis的slave源IP会是SNAT,而master会得到flannel0的IP,比如172.16.103.0。

我还将法兰绒网络添加到节点之间的容器连接中。

所以问题是“是否有任何方法可以在不删除 iptables 标志的情况下获取源 IP,或者另一种方法来创建 Reliable redis 集群。”

0 投票
1 回答
469 浏览

redis - 重命名redis的配置命令后哨兵工作失败

我已经安装了最稳定的 redis (ver 3.2)。一切正常,直到我重命名 redis 的 CONFIG 命令,哨兵无法将奴隶提升为主人。认为问题是哨兵仍然使用CONFIG命令(已重命名)来更改redis的配置。有没有办法改变哨兵的配置(通过redis-cli或配置文件sentinel.conf)以适应redis配置(重命名配置命令)。如果没有,如何更改源代码?

谢谢

0 投票
0 回答
99 浏览

ruby-on-rails - Websocket-rails 和 redis-rb 不会在故障转移时恢复 Pub/Sub 通道

我在同步集群配置中使用 websocket-rails:

  • 2 个 Rails 实例(前端)
  • 2个Redis实例,一主一从(后端)
  • 所有节点上的 4 个 Sentinel 实例

Websocket-rails 通过向 Sentinel 查询当前 master 成功地通过 redis-rb 创建了一个连接。

还成功创建了一个 Redis Pub / Sub Channel 以在两个前端之间同步 websocket 事件:

故障转移时会出现问题。停止主 redis 节点后,哨兵成功处理了故障转移。几秒钟后,他们投票选出了一位新主人。

即使是前端客户端也可以在故障转移后成功连接到新的 redis 主服务器。我可以成功地从 rails 触发 Websocket Rails 通道,例如:

但是,与其他节点的同步失败。这是因为 websocket redis Pub/Sub 通道只存在于旧的 master 上,不存在于新的 master 上。

当然,当 rails 服务器重新启动时,websocket-rails 会重新创建通道。但这在我们的高可用环境中不是一个选项。

我想知道这是否已在类似的环境中解决。我一直在检查 websocket-rails 和 redis-rb 的文档,但我没有发现任何有用的东西。在我看来,redis 的行为是正确的,因为渠道无法复制。

我认为客户端应该在故障转移后重新创建通道,但我什至不确定这是否应该由 websocket-rails 或底层 redis-rb(甚至底层驱动程序)实现?

使用的版本:

  • 雷迪斯:3.2
  • websocket-rails:0.7.0
  • redis-rb:3.3.0

任何帮助表示赞赏。

附件 1:websocket rails 配置:

0 投票
1 回答
1851 浏览

redis - Redis Sentinel 从 Slave 读取并写入 Master

我们当前的 Redis 设置是一个 Web 应用程序客户端,使用 Jedis 直接连接,使用一个 JedisPool 写入单个 Redis 主服务器,使用第二个 JedisPool 读取单个 Redis 从属服务器。从站设置为复制主站。

我们正在转向在客户端上使用 JedisSentinelPool 并引入 Sentinel 以更干净地处理故障转移。As far as I know, it seems that the JedisSentinelPool only communicates with the currently elected master, so now all writes/reads go to the master. 与之前可以将读取分配给从属设备相比。

有什么方法可以使用 JedisSentinelPool 将读取分配给从站以实现负载平衡?或者有必要使用 JedisPool 手动实现这一点(如前所述)在这种情况下,如果 master 失败,JedisSentinelPool 现在将指向旧奴隶(新主人),JedisPool 仍将愚蠢地指向旧奴隶,并且有效旧奴隶(新主人)现在将处理读写?

Redis Sentinel(或其他)是否具有任何负载平衡(而不是故障转移)功能?我们目前只有一个slave,是否可以添加更多的slave来进行负载均衡?如果是这样,推荐的配置是什么?

任何建议,这里的实际经验将不胜感激。

0 投票
1 回答
289 浏览

redis - Redis 副本集、Celery 的故障转移

我们正在运行一个烧瓶应用程序,我们用 celery 进行所有繁重的处理。我们使用来自亚马逊的 redis 实例作为我们的消息代理。我们刚刚失败了,造成了很多痛苦和流血,所以我们正在研究故障转移策略。

出现在我们面前的第一个项目是 Celery sentinel。https://github.com/dealertrack/celery-redis-sentinel 这会给我们提供故障转移功能吗?

我们一直在做一些测试,但它似乎没有按预期工作。

0 投票
2 回答
6482 浏览

redis - Redis 哨兵不会自动发现其他哨兵

我已将 redis 配置为具有两个从属设备的主设备,每个从设备位于一个单独的盒子上。我还在每个盒子上运行了一个哨兵进程。这是此处文档中描述的设置:

http://redis.io/topics/sentinel#example-2-basic-setup-with-three-boxes

每个哨兵都可以连接到我的主人,并且可以看到奴隶。他们能够独立检测主设备或从设备是否出现故障。问题是哨兵无法检测到彼此。

我已经验证每个哨兵都__sentinel__:hello按预期向频道发布消息,但似乎他们都没有真正接收来自其他人的消息。

我如何让哨兵看到对方?

0 投票
1 回答
2671 浏览

php - PHP predis 连接到 Redis Sentinel

我已经使用记录的代码建立了到服务器的新 PHPpredis连接。我可以验证它是否连接正常,但我不知道如何简单地测试连接是否存在。redis

有没有一种方法可以测试连接是否良好,但实际上没有读/写它?isConnected()似乎不起作用。

0 投票
1 回答
6919 浏览

redis - 如何为 redis-cli 命令设置超时?

我有一个我正在尝试使用的健康检查,它远程执行从 redis 服务器到 redis-sentinels 的 redis-cli 命令。

有一个逻辑可以确定是否存在仲裁,除非哨兵的网络接口不可用,否则一切正常。在这种情况下,redis-cli 命令会无限期挂起,即使有两个健康的哨兵具有法定人数,健康检查也会失败。

我似乎找不到一种方法来为客户端的 redis-cli 设置超时以防止它挂起。redis-cli 有没有办法做到这一点,或者我必须走出命令以确保它不会无限期挂起?

0 投票
1 回答
493 浏览

redis - 多 az netsplit 后具有 2 个主控的 Redis Sentinel

你好堆栈社区,

我对特定问题案例的 Redis sentinel 有疑问。我将 AWS 与 Multi AZ 一起使用来创建一个 sensu 集群。

在 eu-central-1a 上,我有一个 sensu+redis(M)、一个 RBMQ+Sentinel 和另外 2 个 Sentinel。在 eu-central-1b 上也一样,但 redis 是我在这个 AZ 上的奴隶。

如果出现问题并且 eu-central-1a 无法与 eu-central-1b 通信怎么办?我认为eu-central-1b上的Sentinel应该将我的redis slave提升为master,因为他无法联系我的redis master。所以我应该有 2 个 redis master 在 2 个不同的 AZ 上一起运行。

但是当 AZ 之间的链接被检索到时,我仍然会有 2 个 master,有 2 个不同的数据。在这种情况下会发生什么?一个master将成为slave,并且数据将被复制而不会丢失?我们是否需要重新启动一个主人,他将成为奴隶?