Raft 파라미터
| 항목 | 값 |
|---|---|
| 하트비트 간격 | 250ms |
| 선거 타임아웃 | 500 ~ 1000ms — 리더 장애 시 이 시간 안에 새 리더 선출 시작 |
| 노드 수 | 3 또는 5 (설정 로드 시 강제 — 그 외는 부팅 거부) |
| 노드 ID | cluster_peers 목록에서 자기(cluster_self) 위치 — 그래서 목록 순서가 모든 노드에서 동일해야 합니다 |
| 부트스트랩 | 기동 500ms 뒤 모든 노드가 같은 멤버 구성으로 초기화 — 이미 초기화된 클러스터에 합류하면 무시됩니다 |
| 로그 저장 | 인메모리(휘발) — 재시작 노드는 복제/스냅숏으로 복구 |
| lease 만료 감지 | 리더가 100ms 주기로 감지해 Expire를 합의로 커밋 |
wait 타임아웃 입자 | 대기 타임아웃(T)도 같은 100ms 틱에서 판정 — 최대 100ms 늦게 도착할 수 있음 |
노드 수가 3 또는 5인 이유
커밋에는 과반이 필요합니다. 짝수 구성은 비용만 늘고 장애 허용은 늘지 않아 서버가 거부합니다.
| 노드 수 | 과반 | 동시 장애 허용 |
|---|---|---|
| 2 | 2 | 0대 — 1대만 죽어도 정지. 싱글보다 나을 게 없음 |
| 3 | 2 | 1대 |
| 4 | 3 | 1대 — 3대와 같음(비용만 증가) |
| 5 | 3 | 2대 |
장애 시 동작 요약
| 상황 | 동작 |
|---|---|
| 리더가 아닌 노드에 클라이언트 요청 | M(리더 주소), 리더를 모르면 E no_leader |
| 리더 장애 | 500~1000ms 내 새 리더 선출. 그동안 요청은 E no_leader → 클라이언트가 재시도 |
| 리더 교체 순간 | 대기 중이던 획득 요청들은 M/E no_leader로 정리되고 클라이언트가 새 리더에 재시도 |
| 노드 재시작 | 빈 상태로 부팅 → 피어의 로그 복제/스냅숏으로 따라잡음 |
| 과반 상실 | 커밋 불가 → 쓰기 정지(안전 우선), 과반 복구 시 자동 재개 |
용어
- 과반(quorum) — 전체 노드의 절반 초과(3대면 2대, 5대면 3대). 어떤 결정이든 과반이 동의해야 확정되므로, 통신이 끊겨 갈라진 두 그룹이 동시에 다른 결정을 내릴 수 없습니다.
- 선거 타임아웃(election timeout) — 하트비트가 이 시간 동안 끊기면 팔로워가 리더가 죽었다고 보고 선거를 시작하는 대기 시간. 노드마다 무작위로 달라, 동시에 후보가 되는 것을 줄입니다.