Hadoop - 장애 복구

jaewonnow_·2025년 11월 27일

DataEngineering

목록 보기
5/19

HDFS 의 데이터 복제와 장애 보완

  • HDFS는 기본적으로 랙 인식(Rack Awareness) 기능을 통해 데이터 복제본을 지능적으로 배치하여, 랙 전체의 장애에도 대비하고 네트워크 효율성을 높이려고 한다.

  • 로컬 환경이나 Rack 개념이 없는 소규모 클러스터에서 HDFS를 사용한다면, HDFS는 랙 인식을 위한 특별한 설정이 없다고 판단하고 모든 노드를 하나의 기본 랙(Rack)에 속한 것으로 간주하고 작동

블록 복제를 이용한 장애 복구

블록의 기본 복제 단위 : 3

하나의 블록이 3개의 블록으로 복제 → 같은 Rack과 다른 Rack의 서버로 복제되어 저장됨

만약 한 블록에 문제가 생기면 다른 블록을 이용해서 데이터 복구

++추가적으로 성능이 미세하게 증가 - 데이터의 지역성 , 클러스터의 밀접성 연관

Block Error Recovery

원칙 1. 데이터 노드는 하나 이상의 블록 복제본을 갖지 않는다 - 노드가 다운시 복제본이 의미 없음

원칙 2. 랙 하나에 같은 복제본 3개를 몰아 두지 않는다 - 랙이 다운시 복제본이 의미 없음

File 손실이 일어난 경우 복제본이 3개인 상황을 만족하지 않으므로 HDFS 시스템은 NameNode에 Block Report 로 알려 다시 복제가 일어나게 한다. → 3개 복제본 상태 유지

Active - Stanby 구조

HDFS 의 문제점 → SPOF (Single Point of Failure) 단일 고장점

: NameNode ( Rack) (대장)이 죽으면 ? - DataNode (부하) 들도 죽는다

→ 그러면 안된다. 대장이 죽어도 부하들을 일을 해야한다 !

Active NameNode (대장), Standby NameNode (부대장) 개념 도입

둘은 공유 스토리지에 같은 데이터를 가짐

둘의 메모리 내역을 같이 하기 위해 서로의 일을 보고함

Shared Storage ( 공유 스토리지) 에 DB 서버를 여러개 올림

Hadoop 3.0 : Active - Standby - Passive NameNode 로 3중 장애 처리


Handling Worker Failure

Health Check

  • Master 가 주기적으로 worker 에게 Ping 을 보냄

NameNode가 모든 데이터 노드에 대한 정보를 알고 있다.
그래서 데이터노드들은 자신들이 동작하고 있다는 것을 네임노드에게 알리기 위해 3초마다 한 번씩 하트비트를 네임노드로 전달한다.

하트비트를 받은 NameNode 는 해당 데이터노드가 Healthy 하다는 것을 알 수 있지만 받지 못한다면 동작하지 않는 것으로 판단.

더 이상 클라이언트와 통신하지 못하도록 차단한다.

문제가 생긴 데이터노드는 NameNode 메타데이터에 의해 가지고 있던 데이터 정보가 파악되고 다른 데이터노드로 모자란 복제 수만큼 블록을 재복제(Re-Replication) 하게 된다.

  • 주기적인 헬스체크 → Resilient (회복 탄력성) 있음
  • 추가적으로 노드 머신이 다운되도 계속해서 그냥 재실행 → 하둡의 핵심

DataNode의 클러스터 탈퇴 (Decommissioning)

DataNode를 클러스터에서 제거할 때, 단순히 노드를 종료하는 것이 아니라 데이터 유실 없이 안전하게 제거하기 위한 과정

  1. 새로운 복제본 수신 중단 (Stop Receiving New Replicas)
    동작: 관리자가 NameNode에게 특정 DataNode를 서비스 해제(Decommission)하라고 명령을 내린다.

결과: 해당 DataNode는 더 이상 새로운 데이터 블록의 복제본을 받지 않는다.

서비스 유지: 하지만 기존에 가지고 있던 데이터 블록에 대한 읽기 요청(Read Requests)은 계속해서 정상적으로 처리합니다. 이는 클러스터 전체의 읽기 서비스 부하를 갑자기 증가시키지 않기 위함입니다.

  1. 데이터 복제 작업 수행 (Block Replication)
    NameNode의 역할: 서비스 해제 대상 노드(Decommissioning DataNode)에 저장된 모든 블록의 복제 상태를 확인합니다.
  • 복제 명령: NameNode는 이 노드에 저장된 블록들의 복제 계수(Replication Factor, 기본값 3)를 유지하기 위해, 해당 블록들을 클러스터 내의 다른 DataNode들에게 복제하도록 스케줄링합니다.

예시: DataNode A에 블록 X가 복제본 3개 중 하나로 저장되어 있다면, NameNode는 블록 X의 새로운 복제본을 DataNode B나 C에 만들도록 지시합니다.

  1. 안전한 제거 (Safe Removal)
    Decommissioned 상태 진입: 서비스 해제 대상 노드에 저장되어 있던 모든 블록이 다른 DataNode들로 안전하게 복제되어 복제 계수를 충족시키면, 해당 노드는 Decommissioned 상태로 전환된다.
  • 안전 보장: 이 상태에 도달했다는 것은 해당 DataNode의 데이터가 완전히 클러스터 내의 다른 곳에 안전하게 백업되었다는 것을 의미한다.

  • 최종 제거: 이제 관리자는 이 DataNode를 클러스터에서 물리적/논리적으로 안전하게 제거 가능. 제거 후에도 HDFS는 데이터 손실 없이 정상 작동한다.


profile
0 to 100 Data Engineer

0개의 댓글