Foundry
분산 시스템
심화

합의 알고리즘과 리더 선출

과반수가 정답을 만든다. Raft로 보는 리더 선출

합의 알고리즘과 리더 선출

무엇에 합의하는가

  • 여러 노드가 같은 명령을 같은 순서로 적용하도록 로그의 순서에 합의한다
  • 그 결과 모든 노드가 동일한 상태에 도달한다(복제 상태 기계)

Raft의 세 조각

요소내용
리더 선출하트비트가 끊기면 후보가 term을 올려 투표를 요청하고, 과반 득표로 리더가 된다
로그 복제쓰기는 리더만 받아 팔로워에 복제하고, 과반에 복제되면 커밋으로 확정한다
안전성최신 로그를 가진 노드만 리더가 될 수 있어 커밋된 항목이 사라지지 않는다

쿼럼과 노드 수

  • 과반수는 N/2 + 1. 3노드는 1대, 5노드는 2대 장애까지 견딘다
  • 짝수 노드는 이득이 없다. 4노드도 허용 장애는 1대뿐이므로 홀수로 구성한다
  • 과반을 모으지 못하면 쓰기를 멈춘다. CAP 관점에서 CP 성향이다

실무 포인트

  • 직접 구현할 일은 드물다. etcd, ZooKeeper(ZAB), Kafka KRaft가 이미 사용 중이다
  • 리더가 교체되는 수백 ms 동안 쓰기가 실패한다. 클라이언트 재시도가 전제다
  • 분단이 생기면 소수 쪽은 리더가 될 수 없다. term과 과반 규칙이 split-brain을 막는 장치다
  • 멀티 리전 배치에서는 노드 간 왕복 지연이 커밋 지연으로 그대로 드러난다
면접에서 이렇게 나옵니다

Q.리더 선출이 필요한 이유와 과정을 설명해주세요

답변을 준비하고 있어요. 우선 위 본문에서 근거를 찾아보세요.

Q.노드를 5개로 구성하면 몇 대 장애까지 견디나요? 짝수는 왜 피하나요?

답변을 준비하고 있어요. 우선 위 본문에서 근거를 찾아보세요.

Q.리더 교체 순간 애플리케이션은 무엇을 겪나요?

답변을 준비하고 있어요. 우선 위 본문에서 근거를 찾아보세요.

Q.네트워크 분단에서 split-brain을 어떻게 막나요?

답변을 준비하고 있어요. 우선 위 본문에서 근거를 찾아보세요.

먼저 스스로 답해보고 아래 답변과 견줘보세요. 막히는 부분은 문제로 확인할 수 있어요.

읽었으면 문제로 확인해보세요

분산 시스템 문제를 풀면 틀린 문제가 자동으로 노트에 쌓입니다. 가입 없이 5문제를 먼저 풀어볼 수도 있어요.