Raft
Raft은 분산 합의·복제 로그 분야에서 사용되는 대표적인 알고리즘이다. 리더 선출, 로그 복제, 안전성, 임기 번호을 중심으로 동작하며, 처리 대상은 복제 로그, 서버 노드·네트워크 메시지이다. 주요 활용에는 고가용성 메타데이터·서비스 상태 복제이 포함된다.
| 분류 | 분산 합의·복제 로그 |
|---|---|
| 설계 | Diego Ongaro, John Ousterhout |
| 공개 | 2014년 USENIX 논문 |
| 입력 | 복제 로그, 서버 노드·네트워크 메시지 |
| 핵심 구조 | 리더 선출, 로그 복제, 안전성, 임기 번호 |
| 성질·전제 | 과반수 쿼럼과 로그 일관성; 다수 서버 장애 시 정상 진행 불가 |
| 활용 | 고가용성 메타데이터·서비스 상태 복제 |
| 참고 자료 | 논문·공식 문서 |
Raft은 분산 합의·복제 로그 분야에서 사용되는 대표적인 알고리즘이다. 리더 선출, 로그 복제, 안전성, 임기 번호을 중심으로 동작하며, 처리 대상은 복제 로그, 서버 노드·네트워크 메시지이다. 주요 활용에는 고가용성 메타데이터·서비스 상태 복제이 포함된다.[1]
Raft는 여러 서버가 동일한 순서의 명령 로그에 합의하도록 설계된 분산 시스템 알고리즘이다. 상태 머신 복제를 구현하기 위한 합의 과정을 리더 선출, 로그 복제와 안전성 규칙으로 나누어 설명하며, Paxos에 준하는 장애 허용 능력과 실용적 성능을 유지하면서 구조의 이해와 구현을 쉽게 하려는 목적을 가진다. 2014년 Diego Ongaro와 John Ousterhout가 주요 논문을 발표했다.
각 서버는 follower, candidate, leader 중 하나의 역할을 가지며, 임기(term) 번호와 무작위화된 선거 타이머를 사용해 리더를 선출한다. 리더는 클라이언트의 명령을 자신의 로그에 추가하고 AppendEntries 메시지로 다른 서버에 복제한다. 현재 임기의 로그 항목이 과반수 서버에 저장되는 등 커밋 조건을 충족하면 상태 머신에 적용될 수 있다.
Raft의 안전성은 선출된 리더가 필요한 이전 커밋 로그를 보유하도록 하는 투표 제한과, 로그의 이전 인덱스·임기 확인 및 충돌 항목 교체 규칙에 의존한다. 과반수가 응답하지 않는 장애 상황에서는 일관성에 어긋나는 결과를 강제로 내기보다 진행을 멈출 수 있다. 실제 운영에는 로그 스냅샷, 멤버십 변경, 네트워크 파티션과 클라이언트 중복 요청에 대한 처리도 필요하다.[2]