Part 14:Raft论文翻译-《CONSENSUS BRID

2021-08-11  本文已影响0人  Number9527

Part 14:Raft论文翻译-《CONSENSUS BRIDGING THEORY AND PRACTICE》(集群成员变更-安全性)

4.1 Safety(安全性)

保证Raft算法的安全性是配置变更的第一个挑战。为了使算法安全,在过渡期间绝不有可能选举两位领导人。如果单个配置变更时更改添加或删除许多服务器,则将集群直接从旧配置切换到新配置可能不安全;无法同时原子切换所有服务器,因此在转换期间集群可能分区(如图4.2所示)。(也就是说,集群配置变更时如果同时变更多个服务器可能导致Raft算法的安全性受到破坏)

image.png

大多数成员资格改变算法都引入了额外的机制来处理这些问题。这是我们最初为Raft所做的,但后来我们发现了一个更简单的方法,即不允许成员变更,可能导致不同的多数。因此,Raft限制了允许的更改类型:一次只能从集群中添加或删除一个服务器。成员身份中更复杂的变更可以通过一系列单服务器变更来实现。本章的大部分内容都描述了单服务器方法,这比我们最初的方法更容易理解。为了实现完整性,第4.3节描述了原始方法,它为处理任意配置更改而产生了额外的复杂性。在发现更简单的单服务器更改方法之前,我们在LogCabin中实现了更复杂的方法;但是它使用了在本文写作时更复杂的方法。

image.png

当向集群添加单个服务器或从集群中删除单个服务器时,旧集群的任何大多数都与大多数新集群重叠;请参见图4.3。这种重叠阻止了集群分区;就第3.6.3节的安全论证而言,它保证了“选民”的存在。因此,当只添加或删除单个服务器时,直接切换到新的配置是安全的。Raft利用此属性使用很少其他机制安全地更改集群成员身份。

集群的配置信息被保存在Raft的log副本中并且通过单独的log entries来通信。这就综合利用了Raft自己来实现配置信息的备份和持久化保存。这也容许Raft在集群成员变更期间就能够为Client提供服务,这时通过强制为客户端请求和成员变更请求进行排序来实现的。

当Leader接收到一个添加/删除成员的请求时(从Leader的当前配置文件中,Cold),Leader将新的配置(Cnew)作为一个log entry追加至自己的log中并且通过Raft算法备份至其它服务器。新的配置将在每个sever将Cnew添加至自己的log后开始生效:Cnew log entry将备份至Cnew的服务器,Cnew是否提交可通过多数派规则来确定。这就意味着每个sever不需要等到Cnew被提交,每个服务器只需要使用自己的log中最新的配置就好。

配置变更在Cnew完成提交后就完成了。此时,Leader可知道大多数的服务器已经记录了Cnew,Leader也知道任何没有同步到Cnew的server将不会形成多数派(也就是Cnew和Cold不会导致分区的问题),没有Cnew信息的服务器不会被选举为新的Leader。Cnew的提交允许下面3件事情继续发生:

也就是说,在Raft中,服务器处理RPC请求的时候不用考虑当前的配置信息。

<< 上一章:集群成员变更-总述
下一章:集群成员变更-可用性 >>

上一篇下一篇

猜你喜欢

热点阅读