치킨 시켜먹다 리더 정하는 알고리즘

Json·2025년 9월 23일
0

k8d

목록 보기
38/42

🛶 Raft 알고리즘: 합의의 땟목 (ETCD의 심장)

“리더 없이는 아무것도 못 하는 우리 팀”


🐟 Intro

분산 시스템에서 제일 무서운 순간은?
👉 “누가 리더냐?” 하는 순간입니다.

MongoDB, Zookeeper, Kafka, etcd… 다들 합의 알고리즘으로 Raft를 쓰거나 영향을 받았죠.
Kubernetes의 etcd도 마찬가지!

오늘은 Raft가 어떻게 리더 뽑고, 로그 합의하고, 장애 대응하는지를 파헤쳐보겠습니다.


👑 1단계: 리더 선출 (Leader Election)

Raft는 무조건 리더 기반입니다.
리더 없이는 아무 것도 못함. (우리 회사도 비슷하죠?)

  • 노드들이 처음엔 다 “팔로워(Follower)” 상태
  • 일정 시간 동안 리더가 아무 소식 없으면 → “리더 죽었네?” 판단
  • 그때 한 노드가 “내가 후보(Candidate) 할래!” 선언
  • 투표 요청 날림 → 과반수 표 얻으면 리더 당선 🎉

👉 그래서 홀수가 중요한 겁니다. 짝수면 동률 나와서 “아니 네가 해 / 아니 네가 해” 싸움남.

📜 2단계: 로그 복제 (Log Replication)

리더가 뽑히면 해야 할 일: 로그를 다 똑같이 맞추기
(“얘들아 우리 팀 노션 똑같이 업데이트 해라!” 같은 느낌)

  • 클라이언트 → 리더에게 요청
  • 리더 → “얘들아, 이거 복제해” 하고 팔로워들한테 AppendEntries RPC 날림
  • 과반수 동의하면 커밋 확정 ✅
  • 팔로워들이 모두 따라오면 데이터 일관성 보장

👉 즉, 리더는 분산 시스템의 “엄마” 같은 존재.
(“밥 먹자~” 하면 애들이 줄 맞춰 따라감)


🕳️ 3단계: 장애 상황 처리

리더가 갑자기 죽으면? 💀

  • 팔로워들이 “심장 박동(heartbeat)” 신호 못 받음
  • “리더 사라졌네?” → 새 리더 뽑기 투표 돌입
  • 과반수 확보한 노드가 새 리더 당선

즉, Raft는 항상 과반수 합의만 있으면 시스템이 굴러감.
짝수 노드가 싫은 이유가 다시 나왔죠.


🔢 Term

Raft는 선거 때마다 “Term(임기)”라는 개념을 붙입니다.
대통령 선거처럼 “제 1기, 제 2기…” 이런 느낌.

  • 각 Term에는 반드시 리더 1명
  • Term 번호는 전 세계 공통 진실(absolute truth)
  • Term이 바뀌면 이전 리더는 자동 퇴출됨

👉 그래서 Raft는 항상 “최신 Term의 리더만 믿자” 원칙으로 동작합니다.


🕺 재미난 포인트

  • Raft는 Paxos보다 이해하기 쉽게 만들려고 나옴
    (그래서 논문 제목도 "In Search of an Understandable Consensus Algorithm")
  • Paxos는 수학과 논문 느낌인데, Raft는 실용주의 느낌
  • 즉: Paxos = 수학 과외, Raft = 유튜브 인강

🍕 비유: 치킨 시켜 먹기

  • 리더 선출: “오늘 치킨 뭐 시킬까? 투표 ㄱㄱ”
  • 로그 복제: 리더가 “양념치킨 2마리, 후라이드 1마리” 주문 확정 → 단톡방에 공유
  • 장애: 리더가 갑자기 단톡방 퇴장 → “새 단톡방장 뽑자!”
  • Term: “2025년 1분기 치킨 담당 회장”

🎬 마무리

Raft 알고리즘은 결국 이런 원칙을 따릅니다:

  1. 리더는 무조건 1명 (왕은 둘이 될 수 없다 👑)
  2. 과반수 합의만 있으면 시스템은 계속 굴러간다
  3. 짝수 노드는 혼돈을 부른다

그러니, 쿠버네티스에서 마스터 노드를 짤 때는 꼭 이렇게 기억하세요:

“K8s 마스터 = 홀수 = 평화로운 치킨 파티” 🍗

0개의 댓글