当前位置: 首页 > 知识库问答 >
问题:

网络分段情况下具有ZooKeeper发现行为的Apache Ignite集群

宇文梓
2023-03-14

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

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

我们计划将ZooKeeper发现用于Ignite Cluster,并希望将ZooKeeper群集节点放置到三个DC:每个DC一个节点。

我们计划仅将Ignite群集节点放置在主DCs中(DC1和DC2)。DC1和DC2将具有相同数量的点火节点。

建筑图式

如果主DCs 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-失败和分裂的大脑处理告诉我们:

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

在这种情况下,协调人能否选择半点火簇中的一个作为主点火簇?

共有2个答案

罗渝
2023-03-14

您可以查看https://apacheignite.readme.io/docs/zookeeper-discovery#section-failures-and-split-brain-handling的"ZooKeeper集群分割"部分

你总共有3个节点,动物园管理员需要超过一半的节点,在你的情况下是2个节点,在一个仍然在工作的分段中决定哪个分段应该关闭。从你当前的架构来看,你有三个分段,每个分段只有一个节点。所以没有一个分段包含超过一半的节点(在你的情况下是2个节点),那么我认为结果应该是关闭你身边的所有三个节点,然后所有点燃节点也会因为无法连接到zKnodes而关闭。

谭铭
2023-03-14

无论ZooKeeper的行为如何,如果DC1和DC2之间失去连接,集群将无法正常运行。ZooKeeper负责发现SPI,但不负责要求所有节点之间完全连接的通信SPI

因此,即使发现SPI能够解决丢失连接的问题,缓存操作也不会成功。

不建议包含与集群其余部分连接缓慢的节点,因为它们会减慢所有操作并使集群不稳定。在这种情况下,最好设置两个单独的集群并配置它们之间的复制(例如,GridGain提供了这样的能力:https://www.gridgain.com/products/software/enterprise-edition/data-center-replication)

如果要实现防止群集之间失去连接的保护,还可以查看SegmentationResolver。

 类似资料:
  • 问题内容: 我想问一下我是否可以在没有安装Web服务器的情况下运行php。我是否必须像CGI一样使用php并通过命令行运行我的页面?如果是这样,我必须通过安装php选择哪些步骤?我是说偏好设置为CGI以及该步骤之后的组件? 我安装了php 5.3.3,但似乎无法正常工作,我收到几则消息,提示缺少php5ts.dll,当我将该文件放在ext文件夹中时,会出现其他错误消息。是否需要使用任何配置文件或步

  • 我有一个java 1.6应用程序,使用jdbc驱动程序在Oracle数据库中使用批插入插入来插入记录。正如您所知,在Statement对象上有一个名为executeBatch()的方法,我们用于批量更新。它有一个int数组的返回类型,其中包含每个记录的执行结果。但它也会在出错时抛出BatchUpdateException,我们也可以从中得到结果int数组。我的问题是,在什么样的错误情况下,我应该期

  • 文档说这个库运行在GPU上。如果我功能强大的笔记本电脑没有GPU,我还能运行Deeplearning4J吗?

  • 我试图用这个应用程序发送消息到我的手机,而不使用网络用法,但我的代码不工作。我遵循了一些教程,检查了android dev,我没有发现任何东西(在我的logcat中我没有错误)。你能帮我找出我的问题吗。 我关于编译、编译器和电话的信息: > Android Studio 1.0.1 制作假消息,我应该在默认的短信应用程序上看到什么:

  • 可以在系统不繁忙或者临时下线前检测客户端和server或者proxy 的带宽: 1)使用 iperf -s 命令将 Iperf 启动为 server 模式: iperf –s ———————————————————— Server listening on TCP port 5001 TCP window size: 8.00 KByte (default) ———————————————————

  • 摘要 本文介绍 RT-Thread NetUtils 的使用方法,帮助开发者更好地使用 RT-Thread NetUtils 组件来解决网络开发过程中遇到的问题。 简介 在进行网络相关的产品开发和调试时,一些好用的小工具往往能取到事半功倍的效果。 RT-Thread NetUtils 组件基于此应用场景,开发和封装了一系列简洁好用的网络工具集合,为开发者提供便利。 为了方便用户开发网络应用,RT-