Skip to content

Consensus algorithm

분산 시스템을 구축할 때, 모든 노드가 독립적으로 돌아가는 시스템을 설계한 것이 아니라면, 공유된 상태를 합의하기 위한 모종의 방법이 필요하다. 이런 식으로 분산 환경에서 상태를 공유하는 알고리즘을 합의 알고리즘 (Consensus Algorithm)이라고 한다.

Quorum

정족수(Quorum)는 클러스터의 관리 기능은 물론 내결함성(Fault Tolerance)을 유지하는 데에도 필요하다. 과반수의 노드가 응답 가능한 정상 상태를 유지한다면 클러스터의 기능도 계속 유지되므로, 나머지 일부 노드에 문제가 생기더라도 그 숫자가 최대 (N-1)/2개 이하라면 클러스터 전체가 다운될 위험은 없어진다. 예를 들어 전체 노드가 3개라면, 그 중 하나가 잘못되더라도 나머지 2개가 클러스터의 온전한 동작을 보장할 수 있으므로 잘못된 노드의 복구 시간을 다운타임(downtime) 없이 벌 수 있는 것이다.

이 정족수가 충족되지 않는다면 클러스터가 제대로 기능할 수 없게 된다. 지난 글의 마지막 파트에서 가정했던, 매니저 노드가 2개로 구성된 도커 스웜(Docker Swarm) 클러스터의 경우를 다시 살펴보자. 여기서 클러스터 기능 유지를 위해 필요한 정족수는 (2+1)/2와 같거나 큰 자연수, 즉 2가 된다. 따라서 둘 중 하나만 정지되더라도 문제가 발생한다. 리더 노드의 선출이 불가능해지고, 클러스터의 최신화 및 동기화도 불가능해지므로, 결국 클러스터 전체의 관리 기능이 무너진다.

내결함성을 위한 최적의 노드 수

합의 알고리즘(Consensus Algorithm)을 채택한 분산 시스템에서는 전체 노드 수를 가급적 3개 이상의 홀수로 유지하는 것이 권장된다. 이유는 아래와 같다.

  • 최소 3개의 노드가 있어야 클러스터가 내결함성(Fault Tolerance)을 갖출 수 있다.
  • 전체 노드 수가 홀수일 때 허용 가능한 장애 노드 수의 비율이 좀 더 높다.

Categories

See also

Favorite site