본문 바로가기
K8S

Raft 알고리즘

by Rainbound-IT 2023. 10. 19.
반응형

 

k8s 의 etcd 나 kafka에서 사용되는 Raft 알고리즘에 대해 알아보자

 

Raft 알고리즘은 분산 시스템에서 노드 간 합의를 돕는 합의 알고리즘 중 하나입니다. 이 알고리즘은 리더 선출, 로그 복제 및 안정성을 포함한 중요한 컨셉을 가지고 있습니다.

  • 리더 선출 (Leader Election): 모든 노드는 세 가지 상태 중 하나를 가집니다: 리더, 후보, 팔로워. 처음에는 모든 노드가 팔로워 상태입니다. 리더 선출을 위해 후보 노드는 랜덤한 타임아웃 후, 다른 노드로부터 투표를 요청하여 리더로 선출되기 위해 경쟁합니다.
  • 로그 복제 (Log Replication): 리더는 클라이언트의 요청을 받아들이고, 해당 로그 항목을 자신의 로그에 기록한 뒤 팔로워 노드들에게 전파합니다. 팔로워 노드는 리더의 로그를 수신한 뒤 이를 자신의 로그에 반영합니다.
  • 안정성 (Safety): 분산 시스템의 합의 알고리즘은 안정성이 중요합니다. Raft에서는 리더와 팔로워 노드의 변경에 대한 안전성을 보장하여 합의를 유지합니다. 예를 들어, 특정 노드의 장애 또는 네트워크 문제가 있을 때, 안정성을 통해 시스템은 일관성을 유지합니다.

Raft는 노드 간에 안전하게 로그를 복제하고, 리더를 선출하여 클라이언트 요청을 처리함으로써 합의를 달성하는 것이 주요 목표입니다.

 

합의 방식

Raft 알고리즘은 분산 시스템에서 합의를 이루기 위한 방식으로, 리더와 팔로워로 구성된 노드들의 집합을 사용합니다.

  • 리더 선출 (Leader Election): 모든 노드는 세 가지 상태를 가집니다: 리더, 후보, 팔로워. 초반에는 모든 노드가 팔로워 상태이며, 시간이 지남에 따라 리더 선출 과정이 진행됩니다. 후보 노드는 일정한 시간이 지나도록 리더로부터 응답을 받지 못하면 후보로 선출됩니다. 그리고 후보는 투표를 요청하고, 다른 노드들로부터 다수의 투표를 받으면 리더가 됩니다.
  • 로그 복제 (Log Replication): 클라이언트의 요청은 리더에 의해 수신되며, 리더는 이를 로그에 기록합니다. 이후, 리더는 팔로워 노드들에게 이 로그를 복제하라고 명령합니다. 팔로워 노드들은 이 로그를 수신하여 자신의 로그에 복제합니다.
  • 안정성 (Safety): 이러한 리더 선출과 로그 복제 과정은 안정성을 보장합니다. Raft는 안전한 상황에서 동작하고, 모든 노드는 동일한 로그를 가지고 있게 되며, 노드 간 합의를 이룰 때 안전성이 보장됩니다.

이러한 과정을 통해 리더와 팔로워 노드들은 일관된 로그를 유지하며, 안정적으로 합의를 이루어 안정한 분산 시스템을 유지할 수 있습니다.

 

 

 

 

Raft 합의 알고리즘에 대해 더 자세히 알고 싶으시다면 아래 링크를 참조하시면 됩니다.

 

Reference

 

https://medium.com/rate-labs/raft-consensus-%EC%9D%B4%ED%95%B4-%EA%B0%80%EB%8A%A5%ED%95%9C-%ED%95%A9%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%9D%84-%EC%9C%84%ED%95%9C-%EC%97%AC%EC%A0%95-f7ecb9f450ab

 

Paxos보다 쉬운 Raft Consensus

이해 가능한 합의 알고리즘을 위한 여정

medium.com

 

https://tech.kakao.com/2021/12/20/kubernetes-etcd/

 

Kubernetes 운영을 위한 etcd 기본 동작 원리의 이해

안녕하세요, 클라우드플랫폼팀 ted입니다. Container Cloud 관련 업무를 하고 계신 분이라면 모두 etcd[etsy d]를 한 번쯤은 들어보셨을 거라 생각합니다. 왜냐하면, 컨테이너 생태계에서 사실상 표준이

tech.kakao.com

 

 

반응형

'K8S' 카테고리의 다른 글

[Kubernetes] Service와 비교한 ingress  (0) 2024.02.29
kubernetes 트러블슈팅  (1) 2023.10.23
Falco pod 두개 인 이유 - falcoctl 추가  (0) 2023.08.23
Falco 란?  (0) 2023.08.23
kubernetes kude 설치 mac, linux  (0) 2023.08.20

댓글