JournalNode, ZooKeeper

HanJu Han·2024년 9월 21일

저널노드(JournalNode)쥬키퍼(ZooKeeper)는 하둡에서 고가용성(HA, High Availability)을 지원하기 위해 필수적인 역할을 하는 컴포넌트입니다. 이들은 Active-Standby 네임노드 구조에서 서로 다른 역할을 수행하며, 클러스터의 안정성을 유지합니다. 각각의 역할과 사용 시점에 대해 설명하겠습니다.


1. 저널노드 (JournalNode)

저널노드는 네임노드의 상태를 동기화하는 역할을 합니다. 네임노드가 Active-Standby 구조로 운영될 때, Active 네임노드에서 파일 시스템 메타데이터에 변경이 발생하면 그 변경 내용을 Standby 네임노드와 동기화해야 합니다. 이때 저널노드가 중간에서 메타데이터 변경 로그(Edit Log)를 관리합니다.

역할 및 사용 시점

  • Edit Log의 저장소: Active 네임노드에서 발생한 메타데이터 변경은 먼저 저널노드에 기록됩니다. 저널노드는 여러 노드에서 분산되어 실행되며, 최소 3개의 저널노드가 필요합니다.
  • 네임노드 간 동기화: Standby 네임노드는 주기적으로 저널노드에서 Edit Log를 읽어와서 자신의 메타데이터 상태를 Active 네임노드와 동기화합니다. 이렇게 함으로써 Active 네임노드에 문제가 생겼을 때 Standby 네임노드가 빠르게 Active로 전환될 수 있습니다.
  • 언제 사용되나: 고가용성 네임노드(Active-Standby) 설정에서 사용됩니다. Active 네임노드의 메타데이터 변경을 중간에서 받아 기록하고, Standby 네임노드와 데이터를 공유하는 역할을 합니다.

구성 예시

저널노드는 최소 3개 이상의 노드에 분산되어 실행되며, 클러스터의 내구성을 보장하기 위해 사용됩니다. 각 네임노드는 메타데이터 변경을 할 때마다 저널노드들에게 기록을 요청합니다. 저널노드는 메타데이터의 일관성과 가용성을 유지하는 중요한 컴포넌트입니다.


2. 쥬키퍼 (ZooKeeper)

쥬키퍼는 네임노드의 상태를 관리하고, 자동 장애 전환(Automatic Failover)을 구현하기 위해 사용됩니다. Active-Standby 구조에서 Active 네임노드가 비정상적으로 종료되거나 장애가 발생하면, 쥬키퍼가 이를 감지하여 Standby 네임노드를 Active로 전환하는 작업을 수행합니다.

역할 및 사용 시점

  • 상태 모니터링: 쥬키퍼는 Active 및 Standby 네임노드의 상태를 지속적으로 모니터링합니다. 네임노드 중 하나가 다운되거나 응답하지 않으면, 쥬키퍼가 이를 감지하여 Failover 작업을 트리거합니다.
  • 자동 장애 전환: Active 네임노드에 장애가 발생하면 쥬키퍼는 Standby 네임노드를 Active로 전환합니다. 이 과정에서 데이터 일관성을 유지하기 위해 저널노드를 통해 메타데이터 동기화 상태를 확인한 후 전환을 완료합니다.
  • Leader Election (리더 선출): 쥬키퍼는 클러스터에서 Active 네임노드를 선택하는 역할도 합니다. 두 네임노드가 동시에 Active가 되지 않도록 조정하고, 한 네임노드만 Active 역할을 수행하도록 보장합니다.
  • 언제 사용되나: 네임노드 고가용성(HA) 설정에서 Active 네임노드의 장애를 감지하고 Standby 네임노드를 Active로 전환할 때 사용됩니다.

구성 예시

쥬키퍼는 보통 여러 개의 서버에 분산되어 설치되며, 이를 쥬키퍼 쿼럼이라고 합니다. 쥬키퍼 쿼럼은 최소 3개의 서버로 구성되어야 하며, Active-Standby 네임노드 구조에서 네임노드의 상태를 관리합니다. 네임노드의 상태 변경이나 장애 전환은 쥬키퍼가 감지하고 조정합니다.


저널노드와 쥬키퍼의 차이점

특성저널노드 (JournalNode)쥬키퍼 (ZooKeeper)
주요 역할네임노드의 메타데이터 변경 사항(로그)을 저장하고 동기화네임노드의 상태 모니터링 및 장애 발생 시 Active-Standby 전환 관리
언제 사용되나Active와 Standby 네임노드 간 메타데이터 변경 사항 동기화 시 사용Active 네임노드의 장애 감지 및 자동 전환 시 사용
필수 구성 요소고가용성 네임노드(Active-Standby) 구조에서 Edit Log 동기화네임노드 고가용성(HA) 설정에서 Active-Standby 상태 관리
운영 방식최소 3개의 노드에서 분산 운영, Edit Log를 저장하고 동기화최소 3개의 노드에서 쿼럼을 형성, 네임노드의 상태를 관리 및 장애 전환

요약

  • 저널노드(JournalNode)네임노드의 메타데이터 변경 로그를 관리하고, Active-Standby 네임노드 간의 동기화를 유지하는 데 사용됩니다.
  • 쥬키퍼(ZooKeeper)네임노드의 상태를 모니터링하고, Active 네임노드에 장애가 발생하면 자동으로 Standby 네임노드를 Active로 전환하는 역할을 합니다.

이 두 가지 컴포넌트는 하둡 클러스터의 고가용성을 보장하고, 네임노드의 장애 발생 시 데이터 손실 없이 클러스터가 계속해서 운영될 수 있도록 도와줍니다.


  1. 주키퍼(ZooKeeper):
    주키퍼는 하둡 에코시스템에서 분산 조정 서비스를 제공합니다. 주요 역할은 다음과 같습니다:
  • 구성 관리: 분산 시스템의 설정 정보를 중앙에서 관리합니다.
  • 리더 선출: 여러 노드 중 마스터 노드를 선출하는 과정을 조정합니다.
  • 클러스터 멤버십 관리: 클러스터에 속한 노드들의 상태를 모니터링합니다.
  1. 저널노드(JournalNode):
    저널노드는 HDFS(Hadoop Distributed File System)의 고가용성을 위해 사용됩니다. 주요 역할은 다음과 같습니다:
  • 네임노드 메타데이터 동기화: 활성 및 대기 네임노드 간의 메타데이터 변경사항을 동기화합니다.
  • 장애 복구: 활성 네임노드에 문제가 발생했을 때 빠른 복구를 지원합니다.

이제 이 관계를 그래프로 표현해 보겠습니다.

이 다이어그램은 하둡 클러스터에서 주키퍼와 저널노드의 역할을 시각적으로 보여줍니다:

  1. 주키퍼 앙상블(ZooKeeper Ensemble)은 활성 네임노드(Active NameNode)와 대기 네임노드(Standby NameNode)를 조정합니다.

  2. 저널노드(JournalNodes)는 활성 네임노드와 대기 네임노드 간의 메타데이터를 동기화합니다.

  3. 활성 네임노드는 데이터노드들을 관리하며, 대기 네임노드는 장애 발생 시 활성화될 준비를 합니다.

  4. 데이터노드들은 실제 데이터를 저장하고 처리합니다.

이 구조를 통해 하둡은 고가용성과 안정성을 확보할 수 있습니다. 주키퍼는 전체 시스템의 조정을 담당하고, 저널노드는 네임노드들 간의 동기화를 보장하여 장애 상황에서도 시스템이 원활히 작동할 수 있게 합니다.

네, 좋은 질문입니다. 저널노드는 일반적으로 네임노드와 다른 노드에 위치하는 것이 권장됩니다. 이에 대해 좀 더 자세히 설명드리겠습니다.

  1. 저널노드의 독립성:

    • 저널노드는 네임노드와 별도의 노드에 위치하는 것이 일반적입니다.
    • 이는 시스템의 고가용성과 안정성을 향상시키기 위한 설계입니다.
  2. 권장되는 구성:

    • 최소 3개의 저널노드를 사용하는 것이 권장됩니다.
    • 이 저널노드들은 서로 다른 물리적 서버에 위치해야 합니다.
  3. 이러한 구성의 이점:

    • 장애 격리: 네임노드에 문제가 발생해도 저널노드는 영향을 받지 않습니다.
    • 데이터 보존: 한 노드에 문제가 생겨도 다른 노드의 데이터는 안전합니다.
    • 성능: 별도의 노드를 사용함으로써 리소스 경쟁을 줄일 수 있습니다.
  4. 쿼럼 기반 동작:

    • 저널노드는 쿼럼 방식으로 작동합니다. 즉, 과반수의 저널노드가 정상 작동해야 합니다.
    • 예를 들어, 3개의 저널노드가 있다면 최소 2개가 정상 작동해야 합니다.

이 구성을 시각화하여 보여드리겠습니다.

이 다이어그램은 권장되는 저널노드 구성을 보여줍니다:

  1. 활성 네임노드와 대기 네임노드는 각각 다른 물리적 서버에 위치합니다.
  2. 3개의 저널노드가 각각 별도의 물리적 서버에 위치합니다.
  3. 활성 네임노드는 모든 저널노드에 쓰기 작업을 수행합니다.
  4. 대기 네임노드는 저널노드로부터 읽기 작업을 수행하여 상태를 동기화합니다.

이러한 구성을 통해 시스템의 안정성과 고가용성을 확보할 수 있습니다. 예를 들어, 한 서버에 문제가 발생하더라도 다른 서버들이 계속 작동하여 전체 시스템의 기능을 유지할 수 있습니다.

추가로 궁금하신 점이 있으시면 말씀해 주세요.

profile
시리즈를 기반으로 작성하였습니다.

0개의 댓글