위키득계정 ↗
기술

Raft

Raft기술
분류
분산 합의 알고리즘
합의 대상
복제된 명령 로그
서버 역할
리더, 팔로어와 후보자
기본 장애 모형
중단 장애, 비잔틴 장애 제외
Raft는 여러 서버가 같은 명령 로그에 합의하도록 하는 분산 합의 알고리즘이다. 리더 선출, 로그 복제와 안전성 규칙을 나누어 설명하며, 일부 서버가 중단되어도 과반수와 통신할 수 있는 조건에서 진행할 수 있다.

리더 중심의 복제

리더는 클라이언트의 명령을 로그에 추가하고 다른 서버로 보낸다. 커밋된 명령들을 같은 순서로 결정적 상태 기계에 적용하면 같은 상태를 얻을 수 있다. 로그에 기록되었다는 사실과 커밋되었다는 사실은 구분해야 한다. 아직 커밋되지 않은 항목은 리더 교체 뒤 달라질 수 있다.

리더 선출

서버는 임기 번호를 사용하고 리더의 연락이 일정 시간 오지 않으면 후보자로 선거를 시작할 수 있다. 무작위 선거 시간은 여러 후보가 동시에 나오는 상황을 줄이는 데 쓰인다. 단순히 가장 먼저 손을 든 서버가 리더가 되는 것은 아니며 투표와 로그 최신성 조건을 충족해야 한다.

과반수의 의미

구성이 고정된 다섯 서버에서는 세 서버가 과반수다. 두 집단이 각각 따로 과반수를 이룰 수 없다는 성질이 안전성 규칙의 토대가 된다. 다만 과반수에 복제됐다는 설명만으로 커밋의 세부 조건을 생략하면 안 된다. 특히 이전 임기 항목의 커밋에는 현재 임기 항목과 연결된 규칙이 있다.

안전성과 진행

메시지가 늦거나 일부 서버가 중단되는 상황에서도 이미 커밋된 로그가 서로 모순되지 않도록 한다. 과반수와 연락할 수 없으면 새 명령의 커밋은 진행되지 않을 수 있다. 또한 서버가 악의적으로 서로 다른 정보를 보내는 비잔틴 장애까지 기본 알고리즘이 처리하는 것은 아니다.

관련 문서

분산 시스템 / 알고리즘 / 프로세스 / 동시성 / 데이터베이스 / Paxos / 상태 기계 / 네트워크