Skip to content

Raft

Raft 분산 합의(consensus) 알고리즘에 대한 설명.

About

Raft is a consensus algorithm designed as an alternative to Paxos. It was meant to be more understandable than Paxos by means of separation of logic, but it is also formally proven safe and offers some additional features. Raft offers a generic way to distribute a state machine across a cluster of computing systems, ensuring that each node in the cluster agrees upon the same series of state transitions. It has a number of open-source reference implementations, with full-specification implementations in Go, C++, Java, and Scala.

What is Raft?

Raft is a consensus algorithm that is designed to be easy to understand. It's equivalent to Paxos in fault-tolerance and performance. The difference is that it's decomposed into relatively independent subproblems, and it cleanly addresses all major pieces needed for practical systems. We hope Raft will make consensus available to a wider audience, and that this wider audience will be able to develop a variety of higher quality consensus-based systems than are available today.

동작 원리

뗏목 합의 알고리즘(Raft Consensus Algorithm)이 적용된 분산 시스템에서 모든 노드는 아래의 세 가지 중 하나의 상태를 가진다. 일반적으로 하나의 리더와 나머지 팔로워들로 구성되며, 후보자는 오직 리더가 없거나 무응답 상태일 경우에만 일시적으로 존재한다.

리더 (Leader)
클러스터를 대표하는 하나의 노드다. 리더는 클라이언트가 클러스터로 보낸 모든 명령의 수신 및 전파, 그리고 응답을 전담한다. 또한 리더는 자신의 상태 메시지(heartbeat)를 주기적으로 모든 팔로워에게 전파한다.
팔로워 (Follower)
리더가 존재하는 한 나머지 노드는 이 상태를 유지한다. 리더로부터 전파된 명령을 처리하는 역할만 담당한다.
후보자 (Candidate)
리더가 없는 상황에서 새 리더를 정하기 위해 전환된 팔로워의 상태를 의미한다. 리더로부터 일정 시간 이상 상태 메시지(heartbeat)를 받지 못한 팔로워는 후보자로 전환된다.

노드 수가 세 개 이상 필요한 이유

자세한 내용은 합의 알고리즘 (Consensus algorithm) 의 정족수 (Quorum) 문제 참조.

쿼럼(quorum) 형성

  • 분산 시스템에서 쿼럼은 클러스터 내에서 작업을 승인하기 위한 최소한의 서버 수를 말합니다. 예를 들어, 클러스터에서 5개의 etcd 서버가 있다면, 쿼럼은 절반 이상의 서버, 즉 3개 이상의 서버의 동의를 받아야 합니다. 이를 통해 데이터의 일관성을 유지하고, 합의된 변경 사항을 적용할 수 있습니다.
  • 홀수 개의 서버를 사용하면, 언제나 클러스터의 과반수 이상의 서버가 동의를 얻어 쿼럼을 형성할 수 있습니다. 이는 네트워크 분할 등의 장애 상황에서도 클러스터가 정상적으로 작동하게 하는 데 중요한 역할을 합니다.

리더 선출

  • etcd 클러스터는 항상 하나의 리더 서버를 유지합니다. 리더는 데이터 쓰기 작업을 관리하고, 다른 서버(팔로워)들에게 변경 사항을 복제합니다.
  • 홀수 개의 서버가 있다면, 네트워크 분할 등으로 인해 서버들이 둘로 나뉘어도 하나의 리더가 확실하게 선출될 수 있습니다. 예를 들어, 5개의 서버가 있을 때 2개의 서버가 분리되면 나머지 3개 서버는 쿼럼을 형성하고 리더를 선출할 수 있습니다.

내결함성 (Fault Tolerance)

  • 홀수 개의 서버가 있으면 절반 이상의 서버가 장애를 겪지 않는 한 클러스터는 여전히 작동할 수 있습니다. 예를 들어, 3개의 서버 클러스터에서는 1개의 서버가 실패해도 나머지 2개의 서버로 쿼럼을 유지할 수 있습니다.
  • 클러스터가 짝수 개의 서버로 구성되면, 동일한 수의 서버가 네트워크 분할 등의 이유로 분리될 수 있습니다. 이 경우 쿼럼을 유지하는 데 어려움이 생기고, 리더 선출이 불가능해질 수 있습니다.

See also

Favorite site