Master选举与成员变更
赵星宇
下面是学习《Paxos理论介绍(3): Master选举》和《Paxos理论介绍(4): 动态成员变更》的学习总结
一、Master选举
Master是一个Paxos Group中,客户端读写的单点。引入Master之后读操作即可不访问其它节点。
Master选举租约算法:
假设有A,B,C三个节点,A发起BeMaster(其过程为一次paxos)请求,当前时间为T(BeMaster),此后B,C收到并返回同意,当前时间为T(ReturnOK),A在收到一个(满足多数派)同意响应后从BeMaster返回,A的任期是从BeMaster请求发起时开始的Lease时间内,而B和C认为A是Master的时间段则是自己返回同意后的Lease时间内,B和C在这段时间内不发起BeMaster请求。因为T(BeMaster)<T(ReturnOK),所以T(BeMaster+Lease) < T(ReturnOK+Lease)。因而保证了在A的任期中没有人会发起BeMaster请求。
但如果C没有返回同意,其在A的任期内也会发起BeMaster请求,但因为A已经获得了多数派的同意,所以C在BeMaster时,一定会查到A,所以BeMaster请求一定会失败,并认为A是Master并持续Lease时间。
对于BeMaster请求还需要带着下一个任期号,从而分离出多个paxos实例,如果下一个任期号不是最新的则返回不同意,并告知其最新任期和其Master,将其认为是Master并持续Lease时间。
Master的续任只需要在自己的任期内带着下一个任期号完成BeMaster即可。
二、成员变更
成员变更的处理则是将成员变更操作也作为一个paxos实例,在本实例已决之后,这个节点看到的成员组就变化了,但是对于并行提交的场景则必须保证其前面的日志已决,后面的日志不提交。不过这样会造成后面的日志大量作废,因此可以将成员变更生效时间向后延迟几条日志。