简介:RAFT联合共识提出的两个阶段成员变更是一种改变行业成员的方法,该方法大大促进了成员变化的工程应用程序。但是,在两个阶段,共同共识成员的变化变化的变化。一个更改需要提出两个日志,这直接在某些系统中使用是不便的。因此,联合共识更改只能使用单个步骤来实现?
节点通常在分布式系统操作过程中失败,并且需要支持动态增加,删除和替换节点。会员更改是一个主题,该主题不能被分布式系统所包围,尤其是在一致的系统中,对改善操作和操作和改善操作和维护功能和服务可用性。
RAFT联合共识提出的两个阶段成员的变化是该行业的主流成员,该成员大大促进了成员变化的工程应用。一个更改需要提出两个日志,这是不方便的,直接在某些系统中使用是不便时间,很大,易于踩到坑。通常不建议使用。
因此,自然地,联合共识可以更改仅使用单个步骤来实施?本文在有关此问题的深入讨论中进行。
让我们回顾下一个一致性协议中成员的变化。会员的更改是在集群操作过程中更改一致性协议的节点系统。
成员的成员也是一个一致性问题,即所有节点都同意成员资格配置。但是,会员的变化是特殊的,因为在更改会员的过程中,参与投票的会员将会改变。
图1在成员变化的某个时刻,在COLD和CNEW中有两个非显着的多数。
如果成员将成员更改为一般一致性问题,则在会员更改期间,每个节点的时间都可以从旧成员切换到新成员配置CNEW的时间。在寒冷和cnew的某个时刻,这可能是不同的。大多数派系形成双重法定人数并破坏一致性。
为了解决这个问题,RAFT提出了两个阶段成员变更方法联合共识。
联合共识的成员更改以避免双重群体,并引入了一个联合成员配置冷,新的作为过渡配置,而冷,新的是冷和cnew的组合。,新的和CNEW的法定人数。会员资格的变化从寒冷转变为新的,新的,新的,新的,然后切换到CNEW,然后切换到CNEW,以确保在不同的时间使用寒冷和CNEW,因此它们不会形成双重法定人数确保安全。
如图
联合共识使用两个日志来完成成员更改的过程。收到会员变更的请求后,领导者首先将冷的新日志同步到冷和CNEW。从那时起,所有日志都需要确认Cold和Cnew的两个主要派系。COLD,只有在Cold和Cnew都达到多数后,才能提交新的日志。从那时起,Leader同步了仅包含CNEW和COLT和CNEW的日志。之后,日志只需要确认大多数CNEW派系。CNEW日志只需要在CNEW中达到大部分派系即可。目前,会员更改已完成。
图3联合共识会员变更过程
如果成员更改,如果故障转移,老领导者会失败,那么寒冷和新的自由节点可能会成为新的领导者。如果没有寒冷的新领导者的新日志,请继续使用颜色,如果跟随者感冒,新的日志将受到影响。新领导者被切断,重返寒冷,并成员的变化失败了;如果有关于新领导者的寒冷和新日志,请继续完成未完成的会员变更过程。
关节共识变化需要两个阶段的原因,因为没有假设冷和CNEW之间的关系尚未假设。为了避免形成双重量子,以避免感冒,并形成大多数不相交的派系。
如果对成员的变化的限制,假设Cold和Cnew的法定人数的相交不是空的,那么冷和CNEW不能形成双重群,则可以将成员更改简化为一个阶段。
实现单个步骤成员的关键是限制冷和CNEW,以便冷和CNEW的法定人联的交叉点不是空的。因此,如何限制冷和CNEW使Cold和Cnew的Quorum交叉点不是空的?会员更改仅允许增加或删除一个成员。
如图
如图4所示,在添加或删除成员时,可以严格证明数学可以证明,只要只有一个成员才能一次增加或删除一个成员,Cold和CNew就不能形成两个非关联Quorum。因此,只要一次仅添加或删除一个成员,就可以将其直接从Cold切换到CNEW。没有必要的过渡成员配置来实现单个步骤成员更改。
单步成员一次只能更改一个成员。如果需要更改多个成员,则可以实现替换成员,则可以实现多个单步成员的更改。
尽管一个步骤成员的变化理论很简单,但它被埋葬了许多坑。它并不是那么简单。先前的文章是在木筏成员更改的工程实践中详细介绍的。
尽管联合共识成员的变化,尽管变化很普遍,但它采用了两个阶段。需要在一个更改中提交两个日志。尽管一个步骤的成员更改只需要提交一个日志,但它一次仅限于一个成员。可以合并两者的优势吗?联合共识成员只能单步变更吗?
在更改联合共识的会员期间,Cold和New Log的提交使每个节点都同意CNEW配置。那么,CNEW日志的作用是什么?您可以从Cold和New转换为CNEW配置后切换到Cold和New Logs吗?这不需要CNEW日志并成为一个步骤吗?
考虑到CNEW日志在联合共识成员变更中的作用,在提交冷和新日志后启动的CNEW日志。将日志提交并脱机。根据此过程,可以总结CNEW日志的作用:
如果您不能使用CNEW日志并同时完成CNEW日志的工作,可以使用单个步骤实现两个阶段的关节共识会员更改?实际上,已经有系统的探索这条道路。
Zookeeper在3.5.0.zookeeper版本的ZAB基础上支持会员资格更改,具有主要订单特征,并且使用两个日志的联合共识成员的更改无法保证主要订单特征。为了满足成员变更的普遍性,它不会失去主要秩序特征。提出了更改其成员资格的方法,并且该方法已在Zookeeper中应用,这比Raft的建议更早。
如图5所示,Zookeeper成员成员的变更一致。在图中,旧成员配置由S表示,新成员配置由S'使用,P是领导者节点,图5显示了将B1和B2节点替换为B3和B4节点的过程:
图5 Zookeeper成员更改协议
初始化:为了捕获新节点以赶上最新数据,新成员在S'第一个连接到当前主节点P中配置了新的节点B3和B4,P将传输其当前状态作为其初始状态当主节点连接到ZAA协议中的主节点时,此状态传输将自动发生,并且它将继续从主节点P接收所有后续操作日志(例如,图中的OP1和OP2).b4 die die die。不参加投票。
步骤1:主节点P到所有节点(S U S’),以发送成员发送成员以更改日志COP。COP日志带有旧成员来配置S和新成员以配置S',并等待旧成员中的节点确认节点以确认。一旦S中的大多数SISTS确认了COP日志,他们达成了共识在S'。
步骤2:COP日志之前的日志仅需要确认大多数旧成员配置s,可以在旧成员配置和新成员配置(S U S')中提交;确认成员(S U S')以确认,并且只能在S'中提交;S'激活消息后的日志,仅在S中确认并提交。
步骤3:主节点P等待在COP日志之前和S'中的COP之前等待日志的确认。
步骤4:一旦两个新成员配置(S U S1),两个派系已确认了COP日志,主节点P提交了COP日志并广播激活的消息活动以激活新成员配置S'以完成成员资格更改。与日志同步消息相似,活动消息包含主节点P的时期,并且携带过时时代的激活消息将被忽略。
如果会员发生变化,如果发生公平,可能会发生以下情况:
如果在发送COP日志之前的故障转移,则成员更改将失败,然后继续在旧成员配置中工作;
如果在发送COP日志和激活之前,则新的和旧成员配置中的任何节点都可以成为新的领导者。如果没有新领导者的COP登录,则会员更改将失败;如果在新领导者上有警察登录,则将继续未完成。成员的变更过程已经完成。
如果激活后的故障转移,会员资格更改已完成,但是不能保证新的领导者必须在新成员的配置中进行配置。目前,不在新成员配置中的节点不能离线。因此,在发送激活消息后,您还需要在新成员的配置中提交无登录。提交NO-OP日志后,新的领导者必须是在新成员的配置中。不在新成员的配置中的节点可以安全地离线。
Zookeeper使用异步漏洞消息,即,从新的和旧成员中通知节点以切换到新成员配置的活动消息。使用异步的NO-OP日志,以使未在新成员中配置的节点安全地安全地安全地配置offline.zookeeper的活动消息和异步NO-OP日志在联合共识成员的CNEW日志中起作用。
动物园管理员成员变更的变化协议并不像联合共识成员的变化那么简单。联合共识会员更改可以使用两个阶段协议来使用协议本身,而不是过多的限制以确保成员更改的安全性。那么Zookeeper成员可以更改协议吗?
Zookeeper成员在异步活动消息中的更改和NO-OP日志中的NO-OP日志实际上是为了完成CNEW日志在联合共识会员变更中的角色。CNEW登录异步。您之所已经达成了有关新成员配置的协议,它将永远不会返回返回。当配置旧成员时,其余过程将在最后完成,并且CNEW日志最终将提交。
改进的另一种方法是保留活动消息,但不使用no-op日志,因此如何确保节点切换到新成员配置具有优先选举吗?最新的日志有权选举,因此您可以在选举期间携带该节点的当前成员配置。对于新日志,您可以优先考虑已切换到新成员配置进行投票的节点。确保切换到新成员配置的节点具有优先选举。切换到新成员的配置,可以安全地离线安全地脱机。
联合共识成员的变化极大地促进了已促进变革的工程应用。这是简单而美丽且普遍的,但是在两个阶段,需要在一个更改中提交两个日志。本文讨论了一个步骤实施方法在两个阶段中由联合共识成员更改了,并做出了一些改进,并提供了一些改进对成员更改的工程应用程序的更多选择。
作者|Xiangguang源|阿里技术公共帐户