본문 바로가기

data engineering

Hadoop의 개요 #4 - 네임노드 HA(High Availability:고가용성)

1) 필요성

- 하둡 1.0에서는 네임노드 한대 여러대의 데이터노드들로 구성이 되었음

- SPOF(Single Point Of Failure, 단일 고장점): 네임노드가 정상적으로 작동하지 않으면 모든 클라이언트가 HDFS에 접근 불가

- 네임노드 파일 시스템 이미지에 문제가 생겨도 HDFS에 저장된 데이터에 조회 불가능

- 파일 시스템 이미지에 HDFS의 디렉토리 구조와 파일 위치가 저장되어 있기 때문에 네임노드에 문제가 생기면 블록에 접근할 수 있는 통로가 사라짐

- 네임노드의 에디트로그에 문제가 생겨도 데이터 유실이 될 수 있음

- 에디트 로그(editslog): HDFS의 모든 변경이력이 담겨 있음 HDFS에 저장된 파일을 수정하면 네임노드에 에디트로그 만들어짐

- 에디트 로그는 파일시스템이미지에 반영이 되기 때문에 문제가 생기면 HDFS가 변경된 이력이 적용이 안될 수 있음

- 보조네임노드는 체크포인팅 작업을 통해 에디트로그를 파일시스템이미지에 갱신하지만, 체크포인트가 만들어지기 전에 에디트로그가 손상되고 네임노드가 재시작되면 손상된 에디트로그는 Fsimage에 반영이 안된 채 네임노드 구동

 

하둡 2.0

- 네임노드를 이중화(Active 네임노드, Standby 네임노드)를 통해 네임노드의 SPOF(Single Point Of Failure) 문제 해결

- 에디트로그의 저장을 담당하는 저널노드를 생성해 네임노드의 에디트로그 대한 부담을 줄임

 

2) 네임노드 HA 주요 컴포넌트

 

저널노드

- 하둡 1.0에서는 네임노드에서만 에디트 로그 저장 -> 하둡 2.0에서는 여러 서버에 에디트 로그를 복제해서 저장

- 저널노드(데몬)는 에디트 로그를 자신이 실행되는 서버의 로컬디스크에 저장

- 네임노드는 클라이언트가 돼서 저널노드에게 접근해 저장을 요청

- 단 액티브 네임노드만 에디트로그를 저장할 권한이 있음

- 스탠바이 네임노드는 조회만 요청 가능

- 저널노드는 3대 이상의 서버에서 실행되어야하고 홀수 단위로만 실행가능

- 네임노드가 저널노드의 장애에 영향을 받지 않으려면 "(전체 저널노드 설치대수/2) / +1" 만큼 실행

- ) 5대에 저널 노드를 설치했으면 최소 3대 이상의 저널노드가 실행

- 리소스를 적게 사용해서 "네임노드", "잡트래커", "리소스매니저"와 같은 데몬이 돌아가는 서버에서 함께 실행가능

 

주키퍼

- 네임노드 HA 상태 정보를 저장하는 장소

- 어떤 서버가 액티브(active) 네임노드인지 스탠바이(standby) 네임노드인지 저장

- 분산시스템 코디네이터

- 애플리케이션들이 잘 돌아가도록 중재

- 분산된 서버 간의 정보 공유

- 새로운 서버를 열거나 제거했을 때 다른 노드들에게 알려줌

- 서버 모니터링 : 연결이 끊어진(장애가 발생했을) 노드 삭제

- 시스템관리, 분산 락(Lock) 처리, 네이밍서비스 등등

- 주키퍼 마스터(주키퍼 앙상블에 구성된 주키퍼 한대)는 홀수 단위로 실행

- 주키퍼 클라이언트는 주키퍼 마스터가 응답을 안할 경우 다른 주키퍼 마스터 에게 요청(2대중 한대가 고장나면 실행 안됨)

- 주키퍼 마스터는 동일한 주키퍼 데이터를 복제하고 있기 때문에 클라이언트로부터 조회요청이 들어오면 자신이 보관한 데이터를 이용해 응답

- 쓰기 요청은은 오로지 리더로 설정된 주키퍼 마스터에게 보내짐

- ZNode: 주키퍼에서 저장되는 파일 하나하나를 ZNode라고 함

 

ZKFC(ZookeeperFailoverController)

- 로컬 네임노드(자신이 위치한 네임노드)의 상태를 모니터링

- 주키퍼 세션 관리

- 액티브 네임노드의 상태가 정상이면 주키퍼 마스터에 대한 세션 유지

- 자동 장애 처리(failover) : 액티브 네임 노드에 장애가 발생하면 감지해서 자동으로 zkfc와 주키퍼 마스터 간의 세션 종료 -> 스탠바이 네임 노드를 액티브 네임 노드로 전환 -> 기존의 액티브 네임 노드 제거

 

네임노드

- 네임노드 내부에 있는 QJM(QuorumJournalManager)이 저널노드에 에디트 로그 출력

- 반드시 절반이상의 저널노드가 실행되고 있어야 에디트 로그를 fsimage에 반영함 (3대중 2대는 최소 작동)

- 액티브 네임노드만 저널노드에 에디트로그 쓸수 있음

- 스탠바이 네임노드는 저널노드에서 에디트로그 조회하고 fsimage를 갱신 -> 그래서 보조 네임 노드를 실행할 필요가 없음

 

데이터 노드

- 액티브 네임노드, 스탠바이 네임노드 모두 블록 리포트 전송 

'data engineering' 카테고리의 다른 글

빅데이터 수집  (0) 2018.07.29
Hadoop의 개요 #4 - MapReduce와 YARN  (0) 2018.07.25
Hadoop의 개요 #3 - HDFS 아키텍처  (0) 2018.07.23
Hadoop의 개요 #2 - HDFS 특징  (0) 2018.07.13
하둡(Hadoop)의 개요 #1  (0) 2018.07.10