티스토리 뷰

하둡을 운영하다 보면 여러 가지 이유로 하둡 클러스터를 업그레이드해야 하는 경우가 발생합니다. 예를 들어서 치명적인 버그가 최신 버전에서 패치가 되거나, 사용 중이거나 (혹은 사용하고 싶은) 에코 시스템이 특정 HDFS 버전에서만 설치 가능한 경우입니다.


하지만 하둡 클러스터가 실제 서비스(흔히 말하는 프러덕션 모드)에서 운영 중이라면, 담당자는 업그레이드에 큰 부담을 느낄 수도 있습니다. 업그레이드 시간이 너무 많이 소요되지는 않을지, 혹시나 데이터가 유실되지 않을지, 장애가 발생했을 때 롤백은 가능할 지 등 담당자는 많은 고민을 하게 될 것입니다.


그 중 가장 큰 부담은 운영 중지해야 된다는 것입니다. HDFS 업그레이드할 때 전체 클러스터를 최소 한번은 재시작을 해야합니다. 네임노드가 부팅될 때 fsimage(hdfs의 디렉터리 구조, 파일 이름, 파일과 블록 매핑 정보와 같은 네임 스페이스를 유지하는 파일)를 갱신하는데, 이 과정이 생각보다 많은 시간을 소요합니다. 담당자는 이러한 작업 시간과 장애 시나리오를 예측하고 계획을 잡아야 하는데, 잘(?) 운영되는 클러스터를 무리하게 업그레이드하고 싶지 않을 것입니다. 특히 비즈니스와 직결되는 클러스터를 운영할 경우에는 업그레이드 부담은 더욱 크게 다가올 것입니다. 


HDFS 롤링 업그레이드란?


하둡 커뮤니티는 이러한 문제점을 해결하기 위하여 HDFS 롤링 업그레이드라는 기능을 구현하였습니다. HDFS 롤링 업그레이드는 네임노드 HA가 구성된 HDFS를 무중단 상태에서 업그레이드하는 기능입니다. 업그레이드 과정에서 클라이언트들은 계속해서 HDFS에 파일을 읽고, 쓸 수 있으며, 업그레이드 중 문제가 발생하더라도 손쉽게 이전 하둡 버전으로 무중단 상태에서 롤링 다운 그레이드가 가능합니다. 참고로 무중단 상태로 복구할 필요가 없다면, 롤백 모드로 이전 버전으로 복구할 수 있습니다.


HDFS 롤링 업그레이드는 아파치 하둡 2.4.0 버전부터 적용됐으며, 클라우데라의 배포판인 CDH는 CDH5 버전부터 지원됩니다. 참고로 롤링 업그레이드를 지원하는 버전에서 상위 버전으로 업그레이드하는 경우만 롤링 업그레이드가 가능합니다. 예를 들어서 아파치 하둡 2.4.0에서 2.7.1 버전으로 올리거나, CDH5.3.0에서 CDH5.5.0으로 올리는 경우에 롤링 업그레이드를 할 수 있으며, CDH4에서 CDH5로 올리거나, 아파치 하둡 2.2.0에서 2.6.0으로 올리는 경우는 예전 방식으로 업그레이드를 진행해야 합니다.


HDFS 롤링 업그레이드 작업 과정


이제 HDFS 롤링 업그레이드 작업 과정을 살펴보겠습니다. 필자는 다음과 같은 환경에 설치된 하둡 2.4.0 버전을 하둡 2.6.3 버전으로 업그레이드하려고 합니다.


* 설치 계정: hadoop

* 기존 하둡 설치 경로: /home/hadoop/hadoop-2.4.0

* 신규 하둡 설치 경로: /home/hadoop/hadoop-2.6.3

* 서버 구성

- blrunner-01: NameNode(Acitve), JournalNode, ZKFC

- blrunner-02: NameNode(StandBy), JournalNode, ZKFC

- blrunner-03: JournalNode

- blrunner-04: DataNode

- blrunner-05: DataNode

- blrunner-06: DataNode


HDFS 롤링 업그레이드 작업은 기존 방식보다는 조금 복잡한 편입니다. 특히 기존 방식이 한 번에 클러스터를 재시작하는 반면에, 롤링 업그레이드는 데이터노드를 한 대씩 재실행해야 합니다. 그럼 단계별 작업 과정을 알아보겠습니다.


1. 우선 신규 버전 하둡을 전체 클러스터에 배포합니다.


2. 기존 버전의 설정 파일을 신규 버전 하둡에 복사합니다. (전체 클러스터에서 수행)

* 기존 설정 파일 경로: /home/hadoop/hadoop-2.4.0/etc/hadoop

* 신규 버전 설정 파일 경로: /home/hadoop/hadoop-2.6.3/etc/hadoop


3. 기존 HDFS의 롤백용 fsimage 파일 생성합니다.

[hadoop@blrunner-01] $ cd /home/hadoop/hadoop-2.4.0

[hadoop@blrunner-01] $ ./bin/hdfs dfsadmin -rollingUpgrade prepare


4. 롤백용 fsimage 파일의 상태 체크합니다. 상태 체크시 “Proceed with rolling upgrade” 라는 메세지가 출력되어야 합니다.

[hadoop@blrunner-01] $ cd /home/hadoop/hadoop-2.4.0

[hadoop@blrunner-01] $ ./bin/hdfs dfsadmin -rollingUpgrade query


5. StandBy 네임노드 및 ZKFC 종료합니다.

[hadoop@blrunner-02] $ cd /home/hadoop/hadoop-2.4.0

[hadoop@blrunner-02] $ ./sbin/hadoop-daemon.sh stop namenode

[hadoop@blrunner-02] $ ./sbin/hadoop-daemon.sh stop zkfc

6. StandBy 네임노드 롤링 업그레이드를 실행합니다.

[hadoop@blrunner-02] $ ./bin/hdfs namenode -rollingUpgrade started


7. 새 터미널을 열어서, StandBy 네임노드용 ZKFC를 실행합니다.

 [hadoop@blrunner-02] $ ./sbin/hadoop-daemon.sh start zkfc


8. StandBy 네임노드의 웹 관리자 화면에 접속하여, “Rolling upgrade started…” 메세지와 안전모드가 해제됐는지 확인합니다.


9. StandBy 네임노드의 안전모드가 해제됐다면, Active 네임노드와 Active 네임노드용 ZKFC를 종료합니다.

[hadoop@blrunner-01] $ ./bin/hdfs namenode -rollingUpgrade started 


10. 새로운 터미널을 열어서, Active 네임노드용 ZKFC를 실행합니다.

[hadoop@blrunner-01] $ ./sbin/hadoop-daemon.sh start zkfc


11. 1번 서버에서 실행 중인 네임노드의 웹 인터페이스에 접속하여, StandBy 모드로 실행되고, 안전모드가 해제됐는지 확인합니다.


12. 이제 데이터노드를 업그레이드합니다. 데이터는 앞서 설명드린대로 한 대씩 작업을 해야 합니다. 한 대를 종료한 후, 한 대를 재실행하고, 다시 다음 데이터노드를 종료하고, 해당 데이터노드를 살리는 등 전체 데이터노드들을 한땀 한땀 작업해야합니다.


12-1. 기존 데이터 노드를 종료합니다. 포트는 hdfs-site.xml의 dfs.datanode.ipc.address의 포트를 사용합니다.

[hadoop@blrunner-01] $ cd /home/hadoop/hadoop-2.6.3

[hadoop@blrunner-01] $ ./bin/hdfs dfsadmin -shutdownDatanode blrunner-04:50020 


12-2. 종료한 데이터노드의 호스트에 접속하여, 신규 데이터노드를 실행합니다.

[hadoop@blrunner-04] $ cd /home/haodop/hadoop-2.6.3

[hadoop@blrunner-04] $ ./sbin/hadoop-daemon.sh start datanode


12-3. 신규 데이터노드의 상태를 확인합니다.

[hadoop@blrunner-01] $ cd /home/hadoop/hadoop-2.6.3 

[hadoop@blrunner-01] $ ./bin/hdfs dfsadmin -getDatanodeInfo blrunner-04:50020


12-4. blrunner-04, blrunner-05 서버도 a ~ c 작업을 수행합니다.


13. 기존 저널노드를 종료하고, 신규 저널노드를 실행합니다. 한 번에 전체 노드를 종료하지 말고, 한 대씩 재실행 합니다. 마지막 저널노드를 종료할 때, Active 네임노드가 종료되는 현상이 발생할 수 있습니다. 이때 당황하지 말고 다음 단계를 진행합니다.

[hadoop@blrunner-01] $ cd /home/hadoop/hadoop-2.4.0

[hadoop@blrunner-01] $ ./sbin/hadoop-daemon.sh stop journalnode

[hadoop@blrunner-01] $ cd /home/hadoop/hadoop-2.6.3

[hadoop@blrunner-01] $ ./sbin/hadoop-daemon.sh start journalnode  


14. HDFS 블록 개수, 데이터노드의 버전 정보 및 커넥션 갱신 횟수, 로그 메세지 등에서 HDFS가 안정화됐다고 판단되면, 업그레이드 작업을 종료합니다. 만약 클러스터가 문제가 발생하면, 롤링 다운그레이드나 롤백을 실행합니다.

[hadoop@blrunner-01] $ ./bin/hdfs dfsadmin -rollingUpgrade finalize


15. 종료됐던 네임노드 (혹은 StandBy 네임노드)를 재실행합니다.

[hadoop@blrunner-02] $ ./sbin/hadoop-daemon.sh start namenode


16. 나머지 네임노드를 재실행합니다.

[hadoop@blrunner-01] $ ./sbin/hadoop-daemon.sh start namenode


더 자세한 설명과 롤링 다운 그레이드 및 롤백 방법 등은 하둡 위키 페이지를 참고하시면 됩니다.

http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsRollingUpgrade.html


저작자 표시 비영리 변경 금지
신고
댓글
댓글쓰기 폼