Raft는 투표를 관리하기 위해 두 가지 timeout 설정
첫 번째는 Election timeout
Election timeoutHeartbeat timeout- Election timeout이 끝나면 Follower는 Candidate가 되고 Election term을 시작합니다.
- Candidate는 본인에게 투표를 하고 다른 노드들에게 투표 요청 메세지를 전달합니다.
- 만일 메세지를 받는 노드가 해당 Election term에서 아직 투표를 하지 않았다면, 먼저 메세지를 전달해준 Candidate에게 투표합니다.
- 투표를 마친 해당 노드는 Election timeout이 초기화 됩니다.
- 가장 많은 표를 받은 노드가 Leader로 선정
- 선정 이후 Leader는 Append Entries 메세지를 Follower들에게 전송합니다. (이 메세지는 Heartbeat timeout 에 설정된 간격마다 보내게 됩니다)
- Follower들은 Append Entries 메세지를 받으면 Election timeout이 초기화되고 메세지에 대한 응답을 Leader에게 보냅니다.
- 만일 Follower에게 Heartbeat가 도달하지 않으면 다시 Election term이 시작되고, Follower는 Candidate 상태로 전환됩니다. (위 그림은 노드A가 죽고 난 이후 노드B가 Leader로 선정되고 Heartbeat 메세지를 전달하는 예시입니다
- 만일 두 개의 노드가 동시에 Election term을 시작하고 메세지가 동시에 Follower에게 도달한다고 가정해보겠습니다.
- 이러한 경우 노드A, 노드B는 2표씩 얻게 되고, 표가 동일하므로 해당 Election term에는 Leader가 선정되지 않습니다.
- Leader가 선정되지 않았으므로 Election timeout에 따라 새로운 Election term을 시작