【问题标题】:Redis Cluster not promoting Slave to master when master fails当主服务器失败时,Redis 集群不会将从服务器提升为主服务器
【发布时间】:2017-03-16 01:14:17
【问题描述】:

我在 Windows 2012 机器上运行 4 节点 REDIS CLUSTER。

我的设置是 1 个 Master 和 3 个 Slave。当我通过服务组件结束主服务时,我的所有从服务器都不会自动提升为主服务。我如何让奴隶们认识到大师正在失败,并在他们看到失败后立即提升他们。下面是我的 Redis 配置。这是所有节点的相同配置文件,唯一的区别是每个节点的端口都不同

port 30002 cluster-enabled yes cluster-config-file nodes.conf appendonly yes loglevel notice logfile "log" syslog-enabled yes syslog-ident redis maxmemory 200mb maxmemory-policy volatile-ttl

编辑

我还需要提供哪些其他信息才能更轻松地帮助解决此问题。

编辑 2

我的最终游戏是一个 redis 集群,我希望这个集群有 1 个主节点和 3 个从节点。我想要一个拥有 1 个主设备和 3 个从设备的集群的原因是,我想避免安装 REDIS Sentinel。我希望集群将 slave 提升为 master,而不是 redis sentinel 这样做。

我的安装过程如下

  • 创建 4 个文件夹(A、B、C、D)
  • 在每个文件夹中复制 REDIS 64 msi for windows
  • 在文件夹 A、B、C、D 中放入一个配置文件,就像上面的一样,但端口不同
  • 使用文件夹 A、B、C、D 安装 redis 服务
  • 启动所有服务
  • 为文件夹 A、B、C、D 做 Redis 聚会
  • 将文件夹 A 的复制添加到文件夹 B、C、D
  • 将所有键分配给文件夹 A 上的 redis 实例

voila 集群设置,文件夹 A 是主文件夹,B、C、D 是 A 的从属。现在唯一的问题是,当 A 出现故障时,没有一个从属(B、C、D)自动提升。

编辑

master的redis.conf文件

port 30001 cluster-enabled yes cluster-config-file nodes.conf appendonly yes loglevel notice logfile "log" syslog-enabled yes syslog-ident redis maxmemory 200mb maxmemory-policy volatile-ttl

运行前集群节点的输出sc stop redismasteralpha

05a73c800cccfd8b11d33232887570c52a326afe 10.144.62.3:30002 slave 20be3e69195744aa379124d19a836650c72c23ba 0 1478637832268 5 connected
20be3e69195744aa379124d19a836650c72c23ba 10.144.62.3:30001 master - 0 1478637837736 5 connected 0-16383
d60d3d0a9f12ef37c997fe44389996d8c7f19c2c 10.144.62.3:30000 myself,slave 20be3e69195744aa379124d19a836650c72c23ba 0 0 1 connected
fda22db5ed5d25e2a8fba82122b47818fba248ce 10.144.62.3:30003 slave 20be3e69195744aa379124d19a836650c72c23ba 0 1478637836644 5 connected

停止服务后

05a73c800cccfd8b11d33232887570c52a326afe 10.144.62.3:30002 myself,slave 20be3e69195744aa379124d19a836650c72c23ba 0 0 3 connected
d60d3d0a9f12ef37c997fe44389996d8c7f19c2c 10.144.62.3:30000 slave,fail 20be3e69195744aa379124d19a836650c72c23ba 1478637948956 1478637947808 5 disconnected
fda22db5ed5d25e2a8fba82122b47818fba248ce 10.144.62.3:30003 slave 20be3e69195744aa379124d19a836650c72c23ba 0 1478638078833 5 connected
20be3e69195744aa379124d19a836650c72c23ba 10.144.62.3:30001 master,fail? - 1478638034799 1478638031628 5 connected 0-16383

master,fail 状态无论等待多久都不会改变

服务停止后的集群信息

cluster_state:fail

cluster_slots_assigned:16384

cluster_slots_ok:0

cluster_slots_pfail:16384

cluster_slots_fail:0

cluster_known_nodes:4

cluster_size:1

cluster_current_epoch:5

cluster_my_epoch:5

cluster_stats_messages_sent:1075189

cluster_stats_messages_received:930887

【问题讨论】:

  • 你想设置一个有 4 个节点的Redis Cluster 吗?还是只有一个带有 3 个从站的 Redis 实例?似乎您想要后者,但是,您正在设置前者。
  • 您能帮我做几件事吗:#1 我们可以检查您的 redis.conf 文件以查看从属优先级吗? #2 你如何杀死你的主节点? #3 在 redis-cli 中,CLUSTER INFO 和 CLUSTER NODES 的输出是什么?
  • @LeftyGBalogh 已更新

标签: redis


【解决方案1】:

据我所知,redis 集群不会与少于 3 个 master 一起工作。

看看redis cluster tutorial上的这个注释:

请注意,按预期工作的最小集群需要 至少包含三个主节点。对于您的第一次测试,它是 强烈建议启动一个包含三个主节点的六节点集群,并且 三个奴隶。

【讨论】:

  • 我用 3 个 master 和 3 个 slave 进行了全新安装,节点的响应就像我想要的那样。除了集群教程建议它是否有任何其他文档说明,集群故障转移不适用于少于 X 的主服务器?
  • 不,我没有找到任何其他官方文档说明该最小值。
  • 如果 2 天内没有人能找到那个文件,我会给你赏金。
  • 好的:)。这两个 SO 问题是相关的:thisthis
  • 忘了我之前问过这个问题
【解决方案2】:

Redis 集群至少需要 3 个主节点,否则它将无法工作。

添加从属取决于用户,但如果没有 3 个主节点,您将无法进一步移动。 要在 Windows 中设置集群,您可以按照我测试过的下面提到的链接进行操作。

Redis cluster setup guide

【讨论】:

    猜你喜欢
    • 2021-04-21
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 2016-03-25
    相关资源
    最近更新 更多