HDFS는 기본적으로 랙 인식(Rack Awareness) 기능을 통해 데이터 복제본을 지능적으로 배치하여, 랙 전체의 장애에도 대비하고 네트워크 효율성을 높이려고 한다.
로컬 환경이나 Rack 개념이 없는 소규모 클러스터에서 HDFS를 사용한다면, HDFS는 랙 인식을 위한 특별한 설정이 없다고 판단하고 모든 노드를 하나의 기본 랙(Rack)에 속한 것으로 간주하고 작동
블록의 기본 복제 단위 : 3
하나의 블록이 3개의 블록으로 복제 → 같은 Rack과 다른 Rack의 서버로 복제되어 저장됨
만약 한 블록에 문제가 생기면 다른 블록을 이용해서 데이터 복구
++추가적으로 성능이 미세하게 증가 - 데이터의 지역성 , 클러스터의 밀접성 연관
원칙 1. 데이터 노드는 하나 이상의 블록 복제본을 갖지 않는다 - 노드가 다운시 복제본이 의미 없음
원칙 2. 랙 하나에 같은 복제본 3개를 몰아 두지 않는다 - 랙이 다운시 복제본이 의미 없음
File 손실이 일어난 경우 복제본이 3개인 상황을 만족하지 않으므로 HDFS 시스템은 NameNode에 Block Report 로 알려 다시 복제가 일어나게 한다. → 3개 복제본 상태 유지
HDFS 의 문제점 → SPOF (Single Point of Failure) 단일 고장점
: NameNode ( Rack) (대장)이 죽으면 ? - DataNode (부하) 들도 죽는다
→ 그러면 안된다. 대장이 죽어도 부하들을 일을 해야한다 !
Active NameNode (대장), Standby NameNode (부대장) 개념 도입
둘은 공유 스토리지에 같은 데이터를 가짐
둘의 메모리 내역을 같이 하기 위해 서로의 일을 보고함
Shared Storage ( 공유 스토리지) 에 DB 서버를 여러개 올림
Hadoop 3.0 : Active - Standby - Passive NameNode 로 3중 장애 처리
NameNode가 모든 데이터 노드에 대한 정보를 알고 있다.
그래서 데이터노드들은 자신들이 동작하고 있다는 것을 네임노드에게 알리기 위해 3초마다 한 번씩 하트비트를 네임노드로 전달한다.
하트비트를 받은 NameNode 는 해당 데이터노드가 Healthy 하다는 것을 알 수 있지만 받지 못한다면 동작하지 않는 것으로 판단.
더 이상 클라이언트와 통신하지 못하도록 차단한다.
문제가 생긴 데이터노드는 NameNode 메타데이터에 의해 가지고 있던 데이터 정보가 파악되고 다른 데이터노드로 모자란 복제 수만큼 블록을 재복제(Re-Replication) 하게 된다.
DataNode를 클러스터에서 제거할 때, 단순히 노드를 종료하는 것이 아니라 데이터 유실 없이 안전하게 제거하기 위한 과정
결과: 해당 DataNode는 더 이상 새로운 데이터 블록의 복제본을 받지 않는다.
서비스 유지: 하지만 기존에 가지고 있던 데이터 블록에 대한 읽기 요청(Read Requests)은 계속해서 정상적으로 처리합니다. 이는 클러스터 전체의 읽기 서비스 부하를 갑자기 증가시키지 않기 위함입니다.
예시: DataNode A에 블록 X가 복제본 3개 중 하나로 저장되어 있다면, NameNode는 블록 X의 새로운 복제본을 DataNode B나 C에 만들도록 지시합니다.
안전 보장: 이 상태에 도달했다는 것은 해당 DataNode의 데이터가 완전히 클러스터 내의 다른 곳에 안전하게 백업되었다는 것을 의미한다.
최종 제거: 이제 관리자는 이 DataNode를 클러스터에서 물리적/논리적으로 안전하게 제거 가능. 제거 후에도 HDFS는 데이터 손실 없이 정상 작동한다.