众所周知,为了避免Paxos算法的活锁问题,必须选举唯一的proposor。偏偏在Paxos原论文中,作者L. Lamport不屑于讨论这个问题,因为选举过程中,即使出现多个master共存,也不影响Paxos算法正确性。另一方面,由著名的Fischer-Lynch-Paterson结论可知,不采取超时机制,任何算法都不能保证在有限时间内选举成功。不过这个结论在这里对我们影响不大,我们只要设计一个实际系统中好使的一个算法就行,而且我们希望保证选举过程的”安全性“,任意时刻不允许多个master共存,理由见这里。
为了满足”安全性“,容易想到lease机制,一个lease,就是一个带expire-time的锁。锁的持有者必须在expire-time之前进行续约(延后expire-time),否则time一到锁就自动释放。这样锁的持有者宕机后不会导致资源长时间被锁住,其次,锁的持有者若由于网络原因续约失败,就必须在expire-time到来之前停止对锁住资源的操作,这样其它主机在expire-time到来后获得锁,就不会和原先的锁持有者同时操作锁住的资源,造成数据被破坏。
回到这里的问题,多台机选举一个master,每一台都可能宕机,这个lease肯定不能只存在一台机上,每台机都是对等的,那所有的机器都得存一份lease