问题标签 [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 回答
1317 浏览

ubuntu - Redis 3.2 哨兵不工作

我的 Redis Sentinel 故障转移不工作,当 master 完成后,没有进行握手,也没有发生故障转移;然而,当主节点恢复正常状态或关闭时,哨兵会显示。我的 sentinel.conf 文件内容如下:

Redis.conf 文件非常标准,redis 可以正常工作。

我真的很感激这方面的任何帮助。

0 投票
1 回答
5391 浏览

ubuntu - 无法在 UbuntuBash 上使用 redis-cli 连接到 Sentinel

我已经在 Windows 10 PC 上安装了 Ubuntu Bash。之后使用apt-get install命令安装 Redis 我可以使用命令连接到 redisredis-cli信息显示详细信息

之后,我创建了一个副本,我也可以连接到该副本

发布我使用从文件夹安装的默认配置文件启动 Sentinel /etc/redis/

我用来启动redis的命令是sudo redis-server /etc/redis/sentinel1.conf --sentinel

但是如果我尝试使用redis-cli -p 26379命令进行连接,我会收到此错误

我检查了 sentinel.conf 文件,指定的端口是 26379

我什至尝试用redis-sentinel /path/to/sentinel.conf 但同样的错误启动哨兵。

相同的设置在虚拟机上运行的 Ubuntu 上运行良好

编辑

我在 WIndows 10 Bash 上运行 Ubuntu 所以netstat -tunlpa命令显示了这个

ps aux| grep redis命令输出是这样的

它显示 Sentinel 正在端口 26379 上运行

0 投票
0 回答
112 浏览

redis - 如何为 Redis sentinel 故障转移场景编写集成测试用例

我一直在使用 Redis 并在 c# 中使用 stackexchange 客户端库。我使用名为“Redis inside”的第三方库编写了一些集成测试用例。

现在我必须为哨兵故障转移案例编写集成测试用例。

有没有人做过这方面的工作?

谢谢!

0 投票
1 回答
519 浏览

redis - Redis Replication 和 Redis Sentinel 的区别

我试图了解 Redis 复制(在此处描述)是否与 Redis Sentinel(在此处描述)相关,或者是完全不同的数据复制方法。

0 投票
0 回答
1188 浏览

amazon-web-services - 使用哨兵在 AWS 上设置 Redis HA - 不同哨兵看到的 redis 节点最终进入无限循环

我们的设置

  • 每个 AWS 悉尼 AZ 上的 3 个 redis 哨兵
  • 2 到 500 个 redis 节点,具有一个主节点和多个从节点,使用 AWS 自动扩展组策略自动水平扩展
  • 1x 写入 ELB,将流量推送到主服务器
  • 1x 读取 ELB,将流量推送到从站
  • 1x Sentinel ELB,将流量推送到哨兵
  • 1x 辅导员(更多内容见下文)

这个设置被复制到两个集群中,我们称之为metadatacache。我们想部署更多的集群。

促进者

是我们构建的一个 python 守护进程,它订阅 sentinels pub/sub 并监听+switch-master消息。以下是辅导员采取的行动:

  1. 检测到由 +switch-master 触发的主故障转移
  2. 使用查询新主人的哨兵SENTINEL get-master-addr-by-name mymaster
  3. 使用 RedisClusterNodeRole = 从属标记旧主控
  4. 使用 RedisClusterNodeRole = master 标记新 master
  5. 将新的 master 添加到我们的写入 ELB
  6. 从我们读取的 ELB 中移除新的主控
  7. 从我们的写入 ELB 中删除旧的 master
  8. 尝试将旧的 master 添加到我们的读取 ELB(如果服务器关闭,这将失败,这很好)

问题

因为奴隶每天可以根据流量来来去去多次,所以我们最终会遇到一些奴隶属于两个集群中的哨兵争夺同一个奴隶。发生这种情况是因为 IP 池在集群之间共享,并且据我们所知,从属 ID 是它们的 IP。

以下是如何复制:

  1. 集群缓存有一个 IP为 172.24.249.152的 master
  2. 集群缓存有一个主故障转移,将 IP为172.24.246.142的从属设备升级为主设备。IP 为 172.24.249.152 的节点现已关闭
  3. 集群元数据向上扩展,DHCP 分配 IP 172.24.249.152(集群缓存上的前一个主节点)
  4. 集群缓存将看到它以前的主服务器现在已启动,并将尝试将其重新配置为 172.24.246.142 的从服务器(缓存集群上的新主服务器)
  5. 集群元数据将在 172.24.246.142 上触发 +sdown在一段时间后 -sdown 后跟 +slave-reconf-sent 发送给它以尝试将其重新配置为元数据集群的从属
  6. 集群缓存将尝试执行与集群元数据在第 5 点所做的相同的操作。

哨兵被困在这个无休止的循环中,永远为该资源而战。即使我们只有一个哨兵组管理具有不同主名称的两个 redis 集群,也会发生这种情况。这使我们相信,哨兵并不知道不同集群之间的资源,而是它们只是分别为每个集群做合乎逻辑的事情。

我们尝试过的解决方案

  1. 在 +sdown 事件之后触发一个SENTINEL reset mymaster,试图让哨兵忘记那个节点。这样做的问题是,如果该集群正在执行主故障转移,它可能会产生竞争条件。我们成功地复制了这个假设并且留下了不同步的哨兵,其中一个指向一个主节点,另外两个指向另一个。
  2. 将网络隔离为每个集群一个 IP 池。这是可行的,因为 IP 永远不会被重用,而且当我们需要一个新的集群时,它也会让事情变得不那么灵活和复杂。这是我们最终寻求的解决方案,但如果可能,我们希望避免它。

理想的解决方案

  1. Redis sentinel 提供了一个SENTINEL removeslave 172.24.246.142 mymaster我们可以在每次从站上发生 +sdown 事件时运行的。这将使该集群忘记从属曾经存在过,而不会产生 a 所具有的副作用SENTINEL reset mymaster

  2. 停止仅通过 IP 识别从属设备的唯一性。也许添加一个 redis 服务器启动时间戳或任何其他标记,以防止关闭的从属服务器和使用相同 IP 恢复的新服务器被视为同一个节点。

问题

你们能想到任何其他不涉及更改 redis 哨兵代码并且不需要在集群之间隔离 IP 池的解决方案吗?

0 投票
1 回答
2959 浏览

redis - How can I disable redis master-slave replication with Sentinel

We have an application with Redis Sentinel(3 sentinel 1 master 1 slave). We don't need replication at all. How can I turn off replication?

0 投票
1 回答
679 浏览

redis - Redis master 故障转移后的回退

我们正在尝试将我们的 redis/sentinel 集群从 2.8 升级到 3.2。升级将在交通繁忙的情况下进行。我们不能接受任何停机时间。

我们的设置有 6 个 redis/sentinel(3 个站点,每个站点上有 2 台服务器,每个服务器都有一个 redis 实例和正在运行的哨兵)。显然我们有 1 个 master 和 5 个 slave。我们计划一个一个地升级我们的服务器,让我们的主服务器作为最后一个升级。

当我们准备好升级我们的主服务器时,所有从服务器都将在 3.2 上运行,并且这些从服务器能够与运行在 2.8 上的主服务器同步
一旦我们停止主服务器(2.8)或手动请求故障转移,一个新服务器(3.2 ) 将成为主人。

我们希望保留我们的旧 master(2.8) 一段时间,以便在我们发现新设置有任何问题时能够回退。不幸的是,由于 RDB 格式不同,旧的 redis(2.8) 从站无法与新的主站 (3.2) 同步。我们可以停止我们的旧服务器 slave(2.8),但如果我们发现 3.2 有问题,我们也希望能够作为主服务器回退到 2.8。由于 2.8 无法与 3.2 同步,所以它不会有任何数据,因此无法被哨兵选举为新的 master。

问题是如何在不丢失任何数据的情况下从 3.2 回退到 2.8?

0 投票
2 回答
1155 浏览

redis - Redis Slave - 在复制握手中向主服务器发送命令:-写入主服务器:未知错误

我对设置 redis sentinel 有点陌生,但关注了几篇关于它的在线帖子,它看起来相当简单。当我启动它们时,我的任何奴隶都出现以下错误。以下是每台机器上的错误和配置。它们都在运行 Windows Server 2012 R2 Standard,并且我安装了 Redis 3.2.100 x64。

节点1 - redis.conf

Node2 - redis.conf

启动 node2 (redis-server.exe node2\redis.conf) 时收到的日志输出

node1 和 node2 上的防火墙都关闭了,我可以在它们之间成功 ping。我在同一台服务器上测试了运行 node1 和 node2 配置,效果很好,所以它似乎是机器对机器。似乎找不到与此错误消息相关的任何内容。

有什么想法吗?

0 投票
1 回答
280 浏览

redis - twemproxy 可以负载均衡读取请求吗?

我想将 redis 与 master 和 slave 一起使用。即几个碎片。每个分片有一个 master 和几个 slave。

是否可以将 twemproxy 配置为使用 master 写入和 slave 读取?还是所有请求都会交给主人?

0 投票
1 回答
865 浏览

redis - Redis哨兵故障转移,选择特定的master

我有 3 个复制的 Redis 实例在 3 台不同的机器上运行:A、B 和 C。我最初选择 A 作为我的主服务器。我还有 3 个哨兵(每台机器上 1 个)监控 A。

如果 A 出现故障,我希望哨兵选择一个特定的主服务器进行故障转移(比如 B)。有没有办法选择一个特定的主人而不是把它留给哨兵的选举机制?

由于我在任何地方都找不到这个问题,我认为这不是标准程序,所以我将解释其背后的原因:我的应用程序在负载均衡器后面的 A、B 和 C 上运行。主服务器使用其本地Redis 数据库,该数据库被复制到其他两个从服务器。

当 A 发生故障时,负载均衡器可以选择 B 作为主节点,而 Redis 哨兵可以选择 C ​​作为 Redis 主节点。正如我刚才所说,我需要实例是本地的,所以我需要将 B 指定为 Redis 主控。