分布式选举,现在大家都知道的是Paxos算法。。。。。
许多分布式算法需要一个进程充当协调者、发起者或者其他某种特殊的角色。通常由哪个进程充当这个较色并不重要,重要的是它们中要有一个进程来充当。我们假设每个进程有一个唯一的编号,同时还假设每个进程知道所有其他进程的编号。但是进程不知道当前哪个进程正在运行,以及哪些进程崩溃了。
1、bully算法。
当任何一个进程发现协调者不响应请求时,他发起一次选举,选举过程如下:
a\ P进程向所有编号比他大的进程发送一个election消息;
b\ 如果无人响应,则P获胜,成为协调者
c\ 如果编号比他大的进程响应,则由响应者接管选举工作,P的工作完成。
任何一个时刻,一个进程只能从编号比他小的进程接受election消息,当消息到达时,接受者发送一个OK消息给发送者,表明它在运行,接管工作。
最终除了一个进程外,其他进程都放弃,那个进程就是新的协调者。
他将获胜消息发送给其他所有进程,通知他们新的协调者。
当一个以前崩溃的进程恢复过来了后,它将主持一场选举。如果该进程恰好是当前运行进程中编号最大的进程,它将获胜,故此成为欺负算法。