本篇文章为你整理了分布式系统中的网络分区问题()的详细内容,包含有 分布式系统中的网络分区问题,希望能帮助你了解 分布式系统中的网络分区问题。
这篇文章主要讨论分布式系统中的网络分区问题,网络分区是指在分布式集群中,节点之间由于网络不通,导致集群中的节点形成不同的子集,子集中的节点可以相互通信,子集之间的网络是不通的。
什么是网络分区?
网络分区只在分布式集群中,节点之间由于网络不通,导致集群中节点形成不同的子集,子集中节点之间网络互通,而子集与子集之间网络不通。
如何判断是否发生了网络分区?
不同的集群架构网络分区的形态会有不同,可以从集中式架构和非集中式架构两方面考虑。
集中式架构下的网络分区
集中式架构中,Master节点通常以一主多备的形式部署,Slave和Master节点相连接,Master节点的主和备之间会通过心跳互相通信。
集中式架构中的网络分区主要是主节点与备节点之间网络不通,且一部分Slave节点只能与主Master节点联通,另一部分只能与备Master节点联通。
非集中式架构下的网络分区
非集中式架构中,节点是对称的,网络分区的形态是形成不同子集,子集内节点间可以互相通信,而子集之间不能通信。
上述两种架构中,要判断是否形成了网络分区,最朴素的方式就是判断节点之间心跳是否超时,然后将心跳可达的节点归属到一个子集中。
网络分区问题的处理方法
在检测到网络分区后,我们可以有不同的解决办法。
激进的办法,一旦发现节点不可达,则将节点从集群中删掉,并在新集群中选出新的主。
保守的办法,一旦发现某些节点不可达,则直接停止自己的服务,这样可以避免双主问题,但是使用这种方式,容易导致系统中所有的节点都停止服务,真个系统完全不可用。
Static Quorum方法
Static Quorum是一种固定票数的策略,在系统启动前,先设置一个固定票数,当发生网络分区后,如果一个分区中节点数大于等于这个固定的票数,则该分区为活动分区。
为了保证分区分区后,不会出现多个活动分区,引发双主或者多主问题,需要对固定票数的取值做一些约束,即:固定票数≤ 总节点数≤2* 固定票数 - 1。
这种方法的优点是简单易实现,缺点是:
分区数较少时,该方法工作得很好,但是当活动分区特别多时,由于各个分区的票数分散,不容易找出一个满足条件的分区,没有活动分区也就意味着集群不可用了。
由于票数是固定不变的,所以不适用于集群中有动态节点加入的场景。
Keep Majority方法
Keep Majority是指保留具有大多数节点的子集群。由于不限定每个分区的节点数超过一个固定的票数,所以可以应用于动态节点加入的场景。
这种方法不适用于生产多分区的场景,随着分区数量增加,节点分散,也很难在众多分区中出现1个节点数 w≥n/2 的分区。
仲裁机制方法
设置仲裁机制的核心是引入一个第三方组件或者节点作为仲裁者,该仲裁者和集群中的所有节点相连,集群中所有节点都将自己的心跳信息报这个这个中心节点。因此该中心节点用于全局心跳信息,可以根据全局心跳情况信息判断出有多少个分区。
基于共享资源的方法
基于共享资源方法的核心,就类似于分布式锁机制。即哪个子集群获得共享资源锁,就保留这个子集。
作者:李潘
出处:http://wing011203.cnblogs.com/
本文版权归作者和共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
以上就是分布式系统中的网络分区问题()的详细内容,想要了解更多 分布式系统中的网络分区问题的内容,请持续关注盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。