目录
本文将说出如何确保从Zookeeper群集的一致性到Zookeeper,以确保数据一致性,然后启动Zookeeper群集的领导者选举,包括群集的三个节点的类型,ZAB中的四个节点状态协议,以及在两个案例选举的两个案例中。然后使用一个示例来说明ZAB协议中领导者中的单点问题,然后导致Paxos算法。该文章将分为两章。本文是第一部分。
首先,让我们看一下一致性的问题。
我们使用集群来提高整个系统的可用性,也就是说,即使挂了几个节点,整个群集仍然可以提供服务。Okay,在Zookeeper群集的每个节点上,其存储的数据是完整的数据,也是完整的数据,也就是说,在它们之间,每个存储在每个数据上的数据都是相同的数据,我们还提到每个集群都是群集中的每个群集。节点可以提供阅读服务,因此在这种情况下,有必要为了确保多个节点是一致的,以便可以将不同的节点连接到读取不同的值,也就是说,我们需要确保群集节点之间的数据一致性。进行节点之间的数据同步
在我们的Zookeeper中,为了确保数据一致性,使用ZAB协议。通过此协议执行Zookeeper群集之间的数据同步以确保数据的一致性。
让我们简要介绍一下ZAB协议作为工作流程(图片):
Zookeeper数据编写的机制是客户将写作请求发送给领导者节点。如果发送跟随器节点,则跟随器节点将将写作请求转发给领导者节点。在所有节点接收到数据后,我将在本地磁盘上写下自己。写作后,我将向领导者发送ACK请求。只要领导者接收到节点的一半,就会发送ACK响应。每个节点将把消息输入内存。内存是为了确保高性能,用户将看到该消息。
目前,如果Zookeeeeepe想要确保数据一致性,则需要考虑以下两种情况
如果是领导者失败,则未提交交易请求,即仅在领导者服务器上提出但未提交的操作的操作需要丢弃。实际上,它仅完成了第一阶段。
领导者失败,已提交了交易请求,即在Leader Server上提交的操作最终由所有服务器节点提交。当ZAB协议以后使用时,该概念更清晰。
当群集运行以及节点失败时,此群集如何响应?
Zookeeper中的三种节点是,让我们看一下类型:
因此,当悬挂Leader节点时,您需要尽快从可用节点中选择一个节点,以使其成为新的领导者,以使群集恢复可用。如何选择新的领导者,这是一个需要解决的问题LET考虑一下,您可以简单地从剩下的追随者节点中选择一个新的领导者吗?我们可以考虑这个场景:在这个场景中,我们的追随者节点的状态显然是不同的,所以我们当时也说过场景,Zookeeper群集具有确保该Server1成为新领导者的新领导者的机制。这里是Zookeeper群集的领导者选举算法。该算法对于Zookeeper群集以确保可用性和数据一致性非常重要,因此让我们看一下它是什么样的处理过程。
然后,在开始对算法分析的分析之前,让我们看一下集群中的节点状态,因为整个选举的过程将涉及这些状态的循环。
好的,让我们看一下领导者的选举过程,因此对于Zookeeper群集,当发生以下两种情况时,需要领导者选举:
然后,整个领导者选举过程是一个投票过程。然后,当节点获得节点的一半以上时,可以将其视为选定的领导者,但是在这里投票的人实际上是特别的。
然后,我们可以考虑一下,例如,当我们选择村长时,我们通常会依靠谁的能力,以及谁有能力施放它。然后,如果能力相似,我们可能会选择更大的年龄和较高的美德。
在制定了投票标准之后,您可以开始选举,但是在选举中,可能会有以上的投票。它也与我们选择的村长相同。通常有很多投票。在下一轮中,一轮投票应该成为无效的投票,对吗?
在Zookeeper中,它还具有本回合的概念,即每次投票时,它实际上是一个时间限制。图)。]。时间,它将被视为超时。目前,您可以发起一轮投票。网络延迟的问题仅在此时收到,因此,由于它已经开始了下一轮,因此只能将其视为无效的投票。
图:投票响应超时将进入下一轮
在选举算法具有这些选举的标准和规则之后,您可以开始选举。选举算法:
在群集启动期间,当我们查看第一台服务器时,我们会查看领导者选举。让我们看这张照片
假设Zookeeper群集中有5个服务器,ID号从1到5,并且都启动了,则没有历史数据
假设服务器依次启动,让我们分析选举过程:
服务器1启动
服务器1启动,启动选举,服务器1对一张票进行投票。目前,服务器正在计数和一票,不超过一半。它必须大于或等于3票。选举无法完成。此时,投票结果:服务器1是1票。
状态1状态一直保持着外观。
服务器2启动
服务器2启动,还启动选举。服务器1和2投票自己。目前,服务器1发现服务器2的服务ID比自身大。
服务器1,2状态保持查找
服务器3启动
服务器3也已经开始,与此同时,它也发起了选举。服务器1、2和3对自己投票,然后由于服务器3的服务器ID是最大的,因此两者将投票更改为服务器3;
服务器1、2个更改状态正在遵循,服务器3更改状态为领先
服务器4启动
服务器4启动,也加入并启动选举。目前,服务器1、2、3不再查看,不会更改投票信息。SWAP投票信息结果:服务器3是3票,服务器4是1票。这次,服务器4遵守多数,并且投票信息更改为服务器3。
服务器4更改为以下。
服务器5启动
投票给3类似服务器4。此时,服务器3总共有5票,服务器5为0票。
服务器5更改为以下。
最后结果:
服务器3是领导者,状态处于领先地位;服务器的其余部分是追随者,状态正在遵循。
好的,这是服务器初始化时的选举过程。
服务器操作期间的领导者故障,因此让我们看一下第二选举过程,即服务器操作期间的领导者故障。
让我们看一下这个场景:
在动物园管理员操作的运营过程中,领导者和追随者是职责。当追随者服务器的停机时间或加入不会影响领导者,但是一旦挂起领导者服务器,整个动物园管理器群集将暂停外部服务并触发新的选举。
在初始状态下,服务器3被选为领导者。假设服务器3现在是错误的。目前,每个服务器上的ZXID可能不同。Server1 IS 10,Server2 IS 12,Server4 IS 10,Server5 IS 10 AS 10
运行期的运行期基本上与初始状态投票过程相似,该过程可以大致分为以下步骤:
好的,在这里,我们使用这张图片更好,易于理解:
1)对于第一票,每台机器都会投票给自己。
2)然后,每台机器将将其投票发送给其他机器。如果其他机器的ZXID比自身大,则需要再次更改投票。例如,Server1获得了三票,发现Server2的XZID为102,PK发现他丢失了,然后果断地将投票更改为选择server2作为boss。所以最后一个是领导者服务器2。
摘要简单。通常,机器服务器上的数据越新,成为领导者的可能性就越大。原因很简单。数据越新,ZXID越大,可以确保数据的恢复越多。如果集群中有几个最大的ZXID,则具有较大服务器ID的服务器将成为领导者。
好的,然后我们在这里知道领导者选举。谢谢大家。
我们将介绍有关ZAB协议和Paxos算法的下一篇文章,请继续关注。
更多内容:Java分布式架构_分销服务架构实例-MOOC.com(imooc.com)
原始:https://juejin.cn/post/7102753050455965704