위 링크의 아파치 하둡의 고가용성에 대한 공식문서를 해석,요약 해놓은 글입니다. 괄호() 안에 이해를 돕기 위해 첨언을 작성했습니다.
이 가이드에서는 QJM(Quorum Journal Manager)을 사용하여 HDFS HA를 구성하고 사용하여 활성 및 대기 NameNode 간에 편집 로그를 공유하는 방법을 설명합니다.
(HDFS는 저널노드를 통해 HA, 빠른 장애극복, 다시 말해 빠른 네임노드 교체(수동)가 가능해집니다. 그리고 추후에 주키퍼를 추가해 자동트리거 빠른 장애극복을 구성할 수 있습니다. )
네임노드는 단일 고장점이므로 이에 대한 보완이 필요하다.
네임노드 : 2개이상의 네임노드
저널노드: 가벼우니까 다른 하둡 데몬이랑 같이 돌리자. But 반드시 3개 이상의 저널노드 필요.( 저널노드가 실패하는 것을 방지 ) (네임노드1, 네임노드2, 리소스매니저를 추천)
HA 구성에서는 스태바이노드가 세컨더리네임노드의 역할(에디트 로그 백업, 에디트 로그 fsimage에 적용)도 하므로 세컨더리네임노드가 필요없다.
→ 세컨더리네임노드로 쓰던 하드웨어는 다른 곳에 재활용하자!
전 버전과 호환되며 기존 단일 NameNode 구성을 변경 없이 작동
여러 네임노드에서 nameservice ID 를 이용해 단일 HDFS 인스턴스를 식별한다.
NameNode ID단일 구성 파일위해 구성파일에 위 파라미터 접미사가 붙는다.
add several configuration options to your hdfs-site.xml
**dfs.nameservices** and dfs.ha.namenodes.[nameservice ID] will determine the keys
dfs.nameservices - the logical name for this new nameservice
# 추가
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>namenode1:9000</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>namenode2:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>namenode1:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>namenode2:9870</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://namenode1:8485;namenode2:8485;resourcemanager:8485/mycluster</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/root/hadoop/hdfs/journal</value>
</property> nameservices : 2개 이상의 네임노드로 이루어진 네이노드 클러스터의 이름 (사용자가 짓는) dfs.ha.namenodes.mycluster 네임노드의 수에 맞게끔 ID를 작성한다. (nn1, nn2 역시 사용자가 짓는) 이후 nn2에 대한 반복되는 설정 설명은 생략하였습니다. dfs.namenode.rpc-address.mycluster.nn1 위에서 nn1으로 작명한 네임노드1의 호스트와 네임노드 포트 번호 설정 dfs.namenode.http-address.mycluster.nn1 위에서 nn1으로 작명한 네임노드1의 네임노드 웹 UI 포트번호 설정 dfs.namenode.shared.edits.dir HA를 구성하는 저널노드의 호스트와 포트번호. 처음과 끝 형식에 주의 dfs.client.failover.proxy.provider.mycluster 데이터 노드 (dfs client)가 어느 네임노드가 활성상태인지 확인하는 방법 설정 dfs.ha.fencing.methods 액티브 네임노드가 문제가 생겨 장애극복 조치 하기전에 문제가 생긴 네임노드를 완전히 격리시키는 방법 설정 dfs.ha.fencing.ssh.private-key-files 위에서 펜싱 메소드로 sshfence 방법을 선택했다면 ssh private key 파일을 지정. 이 때, pem 형식의 키여야 하고 각 네임노드에는 fuser 명령어가 설치되어 있어야 한다. 아래 트러블 슈팅(HA를 구성했는데…) 참고 dfs.journalnode.edits.dir 저널 노드의 데이터가 작성될 디렉토리<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
fs.defaultFS 위에서 설정한 mycluseter가 기본 FS가 된다.이제 네임노드 고가용성을 갖습니다. 자동 장애극복은 아직 없습니다. 이는 아래에서 서술할 주키퍼를 통해 이루어집니다. 수동 빠른 장애극복은 가능합니다.
hdfs --daemon start journalnode hdfs haadmin -failover nn2 nn1 (첫 구성시 모든 네임노드가 대기 상태로 존재합니다.) hdfs --daemon start journalnode 생략합니다. 공식문서를 참고해주세요.