从故障场景看paxos
1. 正常场景
图14-3:Paxos算法:正常执行
在提议阶段中,提议者发送一条Prepare(n)消息(其中n是提议编号).
如果接受者之前已经接受了(收到过Accept!(m,vaccepted)消息)任何其他提案,它将回复一条Promise(m,vaccepted)消息,通知提议者它先前已经接受了编号为m的提案。(m不等于n) awakening-fong: 用来处理 有人当选了,然后,发出复制的指令后,领导者挂掉了。 这里,借这个机会通知新的可能的领导者,过去本该写入的值。
关于Accept!(n,v) 其中的v, 1. 有接受方回复Promise(m,vaccepted), 则,v是收到的回复中, 编号最高的提案对应的值。 2. 如果所有回复均不包含旧的、已接受的提案,那么v可以是提议者自己提出的任何值。
2. 故障
2.1 提议者故障,决定旧值
图14-4:Paxos故障场景:提议者故障,决定旧值 提议者P1已完成提案编号为1的选举阶段,但是在它发送值V1给接受者A1之后宕机。
图示中倒数第3个promise(1,V1), 1表示提议编号为1, promise(1,V1)消息来自A1.
Accept!(2,V1) 这样效果上,P2继续P1的工作。
2.2 提议者故障,决定新值
P1在将V1发送给A1之后宕机。 下一个提议者P2发起一个提案编号为2的新回合,收集Quorum个接受者的回复,但是这次A2和A3首先做出了响应。
3. 参考资料
本文内容大篇幅来自 [数据库系统内幕]
本文地址: https://awakening-fong.github.io/posts/distributed_system/paxos
转载请注明出处: https://awakening-fong.github.io
若无法评论, 请打开JavaScript, 并通过proxy.
blog comments powered by Disqus