하둡 클러스터에 다음 구성 추가
zookeeper 쿼럼ZKFailoverController (ZKFC)ZooKeeper 클라이언트. NameNode를 실행하는 각 시스템은 ZKFC도 실행하며 ZKFC는 다음을 담당합니다.
네임노드가 주키퍼한테 세션을 유지함으로써 하트비트와 유사한 메커니즘으로 작동
네임노드가 문제 생김 → 유지중이던 세션 만료 → 주키퍼가 다른 네임노드에 이 사실 알림 → 장애 복구 시작
주키퍼 데몬은 3개 또는 5개의 노드에서 실행되도록 구성
자체 리소스 적으므로 네임노드, 스탠바이네임노드, Yarn Resourcemanager 노드 추천
주키퍼 클러스터가 구성 안료되어 zkCli를 통해 정상 작동한 것을 확인한 다음 아래 구성 진행
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>namenode1:2181,namenode2:2181,namenode3:2181</value>
</property>
export HDFS_ZKFC_USER=root
NameNode 호스트 중 하나에서
hdfs zkfc -formatZK
이렇게 하면 자동 장애 조치 시스템이 데이터를 저장하는 ZooKeeper에 znode가 생성됩니다.
start-dfs.sh start-dfs.sh스크립트는 이제 NameNode를 실행하는 모든 시스템에서 ZKFC 데몬을 자동으로 시작합니다. ZKFC가 시작되면 NameNode 중 하나가 자동으로 선택되어 활성화
클러스터를 수동으로 시작하기
수동 시작이라면
hdfs --daemon start zkfc
먼저 활성 NameNode를 찾기. 웹 인터페이스 방문, 혹은 주키퍼 cli
활성 NameNode를 찾으면 해당 노드에서 오류가 발생할 수 있습니다. 예를 들어 kill -9 <pid of NN>를 사용하여 JVM 충돌을 시뮬레이션할 수 있습니다. 혹은 시스템 전원 끄거나, 랜선을 뽑거나.
중단 유발 후 다른 네임노드는 몇 초 내로 자동 활성화 되어야 한다. 장애조치트리거 대기시간은 구성에 따라 다르다 ha.zookeeper.session-timeout.ms기본값은 5초
위의 구성이 완료된 상태에서
zkServer.sh starthdfs --daemon start journalnodehdfs namenode -format, hdfs --daemon start namenodehdfs namenode -bootstrapStandby, hdfs --daemon start namenodehdfs zkfc -formatZKstart-dfs.sh혹은
#!/bin/sh
ssh namenode1 "zkServer.sh start && hdfs --daemon start journalnode"
ssh namenode2 "zkServer.sh start && hdfs --daemon start journalnode"
ssh resourcemanager "zkServer.sh start && hdfs --daemon start journalnode"
ssh namenode1 "hdfs namenode -format && hdfs --daemon start namenode"
ssh namenode2 "hdfs namenode -bootstrapStandby && hdfs --daemon start namenode"
ssh namenode1 "hdfs zkfc -formatZK"
ssh namenode1 start-all.sh