합의 알고리즘과 리더 선출
무엇에 합의하는가
- 여러 노드가 같은 명령을 같은 순서로 적용하도록 로그의 순서에 합의한다
- 그 결과 모든 노드가 동일한 상태에 도달한다(복제 상태 기계)
Raft의 세 조각
| 요소 | 내용 |
|---|---|
| 리더 선출 | 하트비트가 끊기면 후보가 term을 올려 투표를 요청하고, 과반 득표로 리더가 된다 |
| 로그 복제 | 쓰기는 리더만 받아 팔로워에 복제하고, 과반에 복제되면 커밋으로 확정한다 |
| 안전성 | 최신 로그를 가진 노드만 리더가 될 수 있어 커밋된 항목이 사라지지 않는다 |
쿼럼과 노드 수
- 과반수는 N/2 + 1. 3노드는 1대, 5노드는 2대 장애까지 견딘다
- 짝수 노드는 이득이 없다. 4노드도 허용 장애는 1대뿐이므로 홀수로 구성한다
- 과반을 모으지 못하면 쓰기를 멈춘다. CAP 관점에서 CP 성향이다
실무 포인트
- 직접 구현할 일은 드물다. etcd, ZooKeeper(ZAB), Kafka KRaft가 이미 사용 중이다
- 리더가 교체되는 수백 ms 동안 쓰기가 실패한다. 클라이언트 재시도가 전제다
- 분단이 생기면 소수 쪽은 리더가 될 수 없다. term과 과반 규칙이 split-brain을 막는 장치다
- 멀티 리전 배치에서는 노드 간 왕복 지연이 커밋 지연으로 그대로 드러난다