본문 바로가기

생각정리/Kafka

왜 주키퍼를 앙상블로 구축을 해야하는가?

주키퍼(Zookeeper) 구축


주키퍼란?

분산 애플리케이션을 위한 코디네이션 시스템

분산 코디네이션 서비스란? 
분산 시스템에서 시스템 간의 정보 공유, 상태 체크, 서버들 간의 동기화를 위한 락 등을 처리해 주는 서비스

 

카프카 브로커에서 브로커와 토픽의 메타데이터를 저장하기 위해 사용하는 장치

 

장애 판정을 과반수 방식으로 하기 때문에 주키퍼 서버가 3개일 때도 2개가 오류 나면 정지하고 4개일 때도 2개가 오류 나면 정지를 하기 때문에 결국 짝수로 구성했을 때와 홀수로 구성했을 때가 차이가 없어 짝수로 구성을 해도 되지만 효율성을 생각하면 홀수로 구성을 하는편이 좋기 때문에 주키퍼 클러스터는 고가용성을 확보하기 위해 주키퍼 앙상블로 구축을 해야 한다고 권고하고 있다.

 

3대로 구성한 경우

  • 1대가 서버에 문제가 생겼으면 2대가 과반수 이상이기 때문에 지속적으로 동작한다.
  • 2대가 서버에 문제가 생겼으면 1대가 과반수 이상이 아니므로 전체 클러스터가 동작을 멈춘다.

4대로 구성한 경우

  • 1대가 서버에 문제가 생겼으면 3대가 과반수 이상이기 때문에 지속적으로 동작한다.
  • 2대가 서버에 문제가 생겼으면 2대가 과반수 이상이 아니므로 전체 클러스터가 동작을 멈춘다.

쿼럼(Quorum)

한글로 정족수로, 합의체가 의사를 진행시키거나 의결을 하는 데 필요한 최소한도의 인원수를 뜻한다.

 

다수의 노드가 일관된 정보를 가지고 움직이는 것이 중요해 일관된 정보를 판단하는 기준이 카프카에서는 과반수가 넘으면 정보가 일관적이라고 판단한다.

카프카에서는 주키퍼 앙상블을 이루고 있는 모든 서버 중 과반수 서버로 이루어진 그룹을 말한다. 

5대의 앙상블일 때 정상적인 서버 3대를 쿼럼이라고 한다.

 

이때, 위에서 과반수로 동작하는 대수의 수는 3대와 4대가 같지만, 쿼럼의 수는 4대와 5대가 3대의 쿼럼을 가져 같아 이점을 헷갈리지 말아야 할 것 같다.

 

쿼럼이 과반수여야 하는 이유

  • 5대에 서버에서 쿼럼이 2대일 경우 (쿼럼이 과반수가 아닐 경우)
  1. 사용자가 주키퍼에게 쓰기 작업을 요청한다.
  2. 주키퍼가 2대의 쿼럼에게 쓰기 작업을 복제한다.
  3. 2대의 서버에 쓰기 작업을 완료되면 리더에게 응답한다.
  4. 2대에 장애가 발생한 경우 지속한다.
  5. 아직 살아있는 서버 3 대중 2대로 새로운 쿼럼을 구성한다.
  6. 쿼럼 2대에 있던 쓰기 요청의 내용은 유실되어 확인할 수 없다.
  7. 주키퍼 서비스는 정상적으로 동작하지만 일관성이 깨진다.
  • 5대에 서버에서 쿼럼이 3대일 경우 (쿼럼이 과반수일 경우)
  1. 사용자가 주키퍼에게 쓰기 작업을 요청한다.
  2. 주키퍼가 3대의 쿼럼에게 쓰기 작업을 복제한다.
  3. 3대의 서버에 쓰기 작업을 완료되면 리더에 응답한다.
  4. 2대에 장애가 발생한 경우 지속한다.
  5. 쿼럼으로 구성되었던 서버 1대와 쿼럼에 포함되지 않았던 2대로 새로운 쿼럼을 구성한다.
  6. 쿼럼으로 구성되었던 서버 1대의 작업을 다른 서버들에게 복제한다.
  7. 쓰기 요청을 유실하지 않고 계속 사용할 수 있다.
주키퍼와 쿼럼의 내용을 보면 왜 주키퍼를 앙상블로 사용해야 하는지가 나온다.
과반수로 의사결정을 하기 때문에 짝수가 아닌 홀수로 주키퍼 노드를 구성해야 되고 그 수는 쿼럼을 과반수로 처리를 할 수 있도록 최소 3대로 구성을 한다고 하면 주키퍼 노드는 5개가 가장 최소한으로 효율적이게 사용할 수 있는 노드의 수라고 볼 수 있다. 물론 노드의 수를 늘리면 늘릴수록 일관성을 유지할 수 있는 노드의 수가 늘어나 좋지만, 그만큼의 처리량이 늘어나기 때문에 서비스의 규모나 환경에 따라 노드를 구성을 하되 너무 많이는 구성을 하지 않는 게 좋은 것 같다.

카프카에서는 2.8 버전부터는 zookeeper와 kraft로 쿼럼을 구성할 수 있었으며, 3.3 버전부터 kraft를 중점으로 지원을 하게 되고 3.5 버전부터는 Zookeeper가 사용하지 않는 것을 권고했으며, 2024년 4월 이후에 나올 4.0 버전 이후부터는 아예 Zookeeper는 지원을 안 하게 된다고 나와있어 다음번에는 Kraft에 대해서 알아보도록 해야겠다. 

 

'생각정리 > Kafka' 카테고리의 다른 글

카프카 컨슈머  (0) 2023.11.25
카프카 프로듀서  (0) 2023.11.24
왜 Zookeeper 모드에서 KRaft 모드로 변경하는가?  (0) 2023.11.23
카프카의 기본 구조  (0) 2023.11.21
왜 카프카를 사용하는가?  (0) 2023.11.20