问题标签 [splitbrain]

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 投票
2 回答
503 浏览

akka - 使用 Akka Cluster 检测被杀死的节点

我正在使用 Akka Cluster 2.4.8 开发一个项目。

有没有办法使用 AkkCluster 检测崩溃的节点(如computer failurekill -9等)?

我目前有一个 3 节点环境,使用static-quorum裂脑解决策略。

我希望在杀死一个实例时,剩余的集群成员会将其标记为DOWN. 但是,它仍然存在UNREACHABLE(见下文)。有没有办法做到这一点?

0 投票
0 回答
27 浏览

elasticsearch - 不同设置的elasticsearch实例可以加入同一个集群吗?

我有一个 2 节点 ES 集群。我最近使用以下启用了脚本:

我知道这需要我重启 ES 服务,所以我决定遵循这个滚动重启指南: https ://www.elastic.co/guide/en/elasticsearch/guide/current/_rolling_restarts.html

因此,我尝试在具有所有主分片的节点上重新启动 ES 服务,并验证其他节点上的副本分片已被提升为主分片。问题是重新启动的节点也报告主分片并且无法加入集群。我假设这是因为集群不能有 2 个主节点。

所以我的问题是,我的集群是如何获得 2 个主节点的?是因为脑裂(1 个节点重启太快,认为它仍然是主节点)还是因为 2 个节点上的不同设置导致无法加入同一个集群?

0 投票
0 回答
146 浏览

java - Split Brain Merge 上的 ReplicatedMap EntryListener 事件

ReplicatedMap<String, String>在我的 Hazelcast 集群中使用了一个。每个节点hazelcastInstance.getLocalEndpoint().getUuid()在此映射中都有其键 ( ) 和一些数据(JSON 字符串)。使用这张地图,我实现了一个服务,每个节点都有自己的数据存储,可以访问其他节点的数据,并观察变化。

但是,我很难让裂脑行为正确。

当脑裂合并发生时,我想收到一个entryAddedentryUpdated事件。然而,这种情况并非如此。我认为这是设计使然(?)。EntryListenerReplicatedMap

你能想到什么解决方案来解决这个问题?

想法:

  • MembershipListener可以检测裂脑合并。问题: 中的数据ReplicatedMap不一定已经准备好 - 它可能在memberAdded事件被调用之前或之后准备好。
  • 实施MergePolicy,例如:

    问题:当裂脑合并两个节点时,这可以正常工作。但是,使用四个节点(两台不同机器上的每台机器两个节点),它会消除值并且似乎随机运行。我怀疑我的理解通常是错误的,因为这种方法没有按预期工作。正因为如此,我还没有分析四个节点的行为——分析四个日志文件也是相当耗时的。

0 投票
0 回答
328 浏览

elasticsearch - ES 2 个节点 Master Master 集群

ES 配置:

节点 1:

节点 2:

在此配置之前,我的一个节点(节点 -1)上存在 ES 数据,而节点 2 上没有数据。

现在,当我搜索索引时,我从两个节点都得到结果,两个节点都显示 Node-1 被选为主节点。

但是当我在节点 1 上停止我的 ES 时,然后在节点 2 上它被选为主节点,但我的数据没有在这里同步。

Node-2 上存在索引,但 ES 数据上不存在。

两个节点上的数据如何同步?

0 投票
1 回答
1694 浏览

kubernetes - 机架间脑裂场景中的 Kubernetes HA 集群故障行为是什么?

我对多主 Kubernetes 在发生不同类型故障时的行为感兴趣,特别是如果主节点位于不同的机架上。

  • 设想:

    • 2 个机架,R1,R2。

    • API大师:

      • R1 上的 M1,R2 上的 M2。
    • 工作节点:

      • R1 上的 W1,R2 上的 W2。
    • 等等:

      • 一个完全独立的 HA Etcd 集群,包含 3 个节点(即它不在 API 主节点上运行)。

我的失败问题基本上是围绕裂脑场景:

如果 M1 是活动的主设备,并且 R1 失去与 Etcd 和 R2 的连接,但 R2/M2 与 Etcd 有连接,会发生什么情况?即是什么具体导致了领导选举?

如果 R1/W1 上有一个 Pod P1,M1 是 active master,而 R1 与 R2 和 Etcd 断开连接,会发生什么?P1 是继续运行,还是被杀死?M2 是否在 R2 上启动 P (P2) 的单独实例?如果是这样,P1 和 P2 可以同时运行吗?

如果 R2/W2 上有一个 Pod P2 并且 M1 是活动的 master(即 pod 位于与 master 不同的机架上)并且 R1 失去了与 R2 和 Etcd 的连接,那么 P2 会发生什么?它会继续运行并由 M2 接管吗?

0 投票
1 回答
2344 浏览

redis - 带哨兵的 Redis 在裂脑后如何表现?

问题是关于 Redis 服务器和哨兵配置的。

有两个子网,我想总共有 4 个 redis 服务器,每个子网中有 2 个。由于可能存在连接问题,我想配置哨兵以允许大脑分裂以实现高可用性。

因此,当发生连接问题时,会出现两个独立工作一段时间的 Redis 设置。

现在的问题是子网连接恢复后会发生什么。哨兵会检测到脑裂和两个主人?接下来他们将只选择master,而第二个将被降级为slave?来自幸存主机的数据将被推送到降级的主机,他需要删除在连接问题期间获得的所有数据差异?

我可以配置一些东西以合并数据吗?

0 投票
1 回答
303 浏览

drbd - DRBD 脑裂最佳方案

我有 2 个 drbd 节点(主要/次要),我尝试解决脑裂问题而不会丢失任何数据。

我的自动解决配置:

如何找到最后更新的节点?有什么命令之类的吗?

0 投票
0 回答
1002 浏览

performance - 仅具有两个节点的 Elasticsearch 集群

我有一个两节点规模的 ES 集群。在 ES 的配置中,我将 设置discovery.zen.minimum_master_nodes2,其他所有设置保持默认(两个节点都是主节点,两个节点都是数据节点,两个节点都是摄取)。

在大多数博客中,我看到人们提出了至少一个三节点集群。
我基本上有两个问题:

  1. 我是否需要担心我的双节点集群的脑裂问题?
  2. 当您只有两个节点时,如何配置节点相关角色(master、data、ingest)?
0 投票
2 回答
484 浏览

apache-zookeeper - Apache Ignite Cluster 在网络分段情况下具有 ZooKeeper 发现行为

我们正在开发基于 Apache Ignite 的分布式系统架构。系统对容错有严格的要求。

为此,我们有三个数据中心 (DC):其中两个是主 DC(DC1 和 DC2),一个是备用 DC(DC3)。我们在主要 DC 之间有一个快速以太网通道。DC1 和 DC2 通过 40 GbE 连接。Reserve DC3 通过慢速通道 1 GbE 连接到 DC1 和 DC2。

我们计划将 ZooKeeper Discovery 用于 Ignite Cluster,并希望将 ZooKeeper Cluster 节点放置到三个 DC:每个 DC 1 个节点。

我们计划仅将 Ignite Cluster 节点放置在主 DC(到 DC1 和 DC2)中。DC1 和 DC2 将具有相同数量的 Ignite 节点。

架构图

如果主 DC DC1 和 DC2 之间的 40GbE 通道关闭,当发生网络分段时,Ignite Cluster 会发生什么情况?

比如DC3中的ZK3节点是leader,ZK1和ZK2是follower,这种情况下leader节点可以和两个follower通信,follower之间就失去了联系。ZooKeeper 集群保持在集合中。

来自 DC1 的 Ignite Cluster 节点可以与 ZK1 和 ZK3 节点以及 DC1 中的彼此通信。来自 DC2 的 Ignite Cluster 节点可以与 ZK2 和 ZK3 节点以及 DC2 中的彼此之间进行通信。

在这种网络分段情况下,如何解决脑裂情况,或者我们得到两个独立的 Ignite 集群?

文档https://apacheignite.readme.io/docs/zookeeper-discovery#section-failures-and-split-brain-handling告诉我们:

每当一个节点发现它无法连接到集群中的某些其他节点时,它就会通过向 ZooKeeper 集群发布特殊请求来启动通信故障解决过程。当进程启动时,所有节点都尝试相互连接,并将连接尝试的结果发送到协调进程的节点(协调节点)。基于此信息,协调节点创建表示集群中网络情况的连接图。进一步的操作取决于网络分段的类型。

在这种情况下,协调器可以选择半个 Ignite 集群中的一个作为主要集群吗?

0 投票
2 回答
166 浏览

hazelcast - Hazelcast Near Cache 不受脑裂保护(法定人数)控制

我在spring boot项目中使用了嵌入式hazelcast 4.0.1来管理项目的缓存。我设置了Near Cache,还设置了脑裂保护功能,4.0之前叫Quorum。

然而,我发现了一个问题。比如我把缓存操作放在一个服务上:

如果Near Cache中已经缓存了正确的数据,即使裂脑保护生效,服务仍然会返回正确的结果,而不是被裂脑保护拒绝。

我怎样才能让近缓存也受到裂脑保护的控制?希望出现脑裂时,小集群不能正常运行,只有大集群才能正常运行。

以下是项目中近缓存配置和脑裂保护配置代码: