SlideShare ist ein Scribd-Unternehmen logo
1 von 70
하둡 고가용성
HA(High Availability) 설정
김진규
1
HA 구성도
2
HA 개념 (1)
1. HA에서의 주키퍼 주 기능
Failure detection :
네임노드를 감시하여 시스템을 감시한다.
Active NameNode election :
네임노드가 죽었을시, 그 다음 네임노드 후보를 선
출한다.
2. ZKFC(zookeeper failover controller)
Health monitoring : 상태 모니터링
ZooKeeper session management : 주키퍼의 세션관리
ZooKeeper-based election : 주키퍼 기반 선거(리더선출)
3
HA 개념 (2) - 두 개의 네임노드
두 개의 네임노드는 Active 네임 노드, Standby 네임 노드라 부른다.
Active네임 노드에 장애가 생기면, 두번째 네임노드인 Stanby 네임 노드가 Active한 상태로 바뀌
면서 네임 노드의 역할을 맡는 방식이다. Active 네임 노드와 Standby 네임 노드는 데이터 노드로
부터 블록 리포트, 하트비트를 모두 받아서 동일한 메타데이터를 유지하고, 저널노드를 이용하여
editFile을 공유한다.
요약하자면, active 네임도느는 네임노드의 역할을 수행하고, standby 네임노드는 active 네임노드
와 동일한 메타데이터 정보를 유지, active 네임노드에 문제가 발생하면 standby 네임노드가
active 네임노드로 동작. active 네임노드에 문제가 발생하는 것을 자동으로 확인하는 것이 어렵기
때문에 주키퍼를 이용, 장애 발생 시 자동으로 상태변경이 가능하도록 한다.
4
HA 개념 (3) - 저널 노드
저널 노드 :
네임노드로부터 받은 트랜잭션(edit log)내용을 저널 노드 자신의 로컬 디스크에 저장한다.
해당 edit log 내용은 전체 저널 노드들에 동시에 쓰여진다.
저널노드는 홀수갯수만큼 있는게 좋다. 절반 이상의 저널노드가 동작 중이어야 edit log를
fsimage에 반영할 수 있기 때문.
fsimage :
파일시스템에 존재하는 모든 디렉토리와 파일의 아이노드 정보를 직렬화한 파일.
각 아이노드는 파일이나 디렉터리 메타데이터의 내부 구조를 나타내며 파일의 복제 수준, 변경 및
접근 시간, 접근 권한, 블록 크기, 파일을 구성하는 블록 집합과 같은 정보를 가지고 있다.
5
HA 개념 (4) - 정리
요약 :
주키퍼는 active name node와 standby name node를 이용한 HA를 가능하게 해주는 분산 코디네이터.
주키퍼는 어떤 노드가 active인지, standby인지를 저장함으로 네임 노드들을 관리한다
주키퍼는 단 하나의 네임 노드만 active상태에 있는 것을 보장.
주키퍼는 평소에 네임노드들과 세션을 유지하고 있다. 만약 active가 반응이 없으면 주키퍼는 바로 standby에게
active의 장애를 알린다.
여러 standby 네임노드가 있다면, 어떤 것을 active name node를 리더로 선출할 지는 주키퍼가 제공하는 리더 선출
기능에 의해 정해진다.
6
HA 개념 (5) - 정리
주키퍼는 3대 이상의 홀수 개수 만큼 있는 것이 좋다.
하둡 설정에 의해 주키퍼는 기본적으로 3대가 설정되어 있어야 한다.
네임노드가 두개라고 해서 두개의 주키퍼 서버를 설정하면 오류가 난다.
주키퍼는 하나의 리더와 다수의 팔로워로 구성. 리더가 주키퍼로 들어오는 데이터의 분산을 도맡아 한다.
모든 리더와 팔로워들은 똑같은 데이터를 동기화하고있어 어떤 서버에서 데이터를 읽어도 같은 데이터를
읽을 수 있다.
확실하지 않은 정보
- 주키퍼 서버의 리더선출과, 네임노드서버끼리의 리더선출은 서로 다른 듯?
7
참조 - Fencing(펜싱)
Fencing :
네임노드가 장애가 아닌데, 네트워크 문제나, cpu과부하 상황에서 기존의 액티브
네임노드가 죽었다고 판단하여 새로운 네임노드가 active로 승격 될 수 있다.
이때 기존의 네임노드는 아직도 자기가 active라고 생각하는데,
이 상황을 split brain이라고 한다. 이를 방지하기 위해 기존의 액티브 네임노드를
확실하게 죽이는 것을 펜싱(fencing)이라고 한다.
8
1. 네임노드 이중화
9
네임노드 이중화 - 서비스 구성 계획
10
hadoop ver 3.1.3
zookeeper ver 3.6.3
hostname set hadoop01, hadoop02,
hadoop03, hadoop04
all username hadoop01
hadoop01 주키퍼, 액티브 네임노드, 저널노드, 데이터
노드, 노드매니저, 리소스매니저(액티브)
hadoop02 주키퍼, 스탠바이 네임노드, 저널노드, 데이
터노드, 노드매니저, 리소스매니저(스탠바이)
hadoop03 주키퍼, 저널노드 , 데이터노드, 노드매니저
hadoop04 데이터노드, 노드매니저
네임노드 이중화
시작 전 설정 :
모든 유저네임은 hadoop01로 진행.
모든 노드간 쌍방 키젠 완료 및 authorized_keys에 각자의 공개키 등록된 상태,
자바 설치 완료, 하둡 기본 설치 완료.
etc/hosts 설정
11
주키퍼 쿼럼을 형성할 hadoop01~hadoop03에 주키퍼 설치
hadoop01에 설치 후 기본 설정 후에 일괄 배포 예정
권한 주고 압축 풀기
chmod 775 apache-zookeeper-3.6.3-bin.tar.gz
tar -xvzf apache-zookeeper-3.6.3-bin.tar.gz
12
네임노드 이중화
/home디렉토리에 주키퍼 폴더 생성. 그 하위로 압축 푼 내용 이동 후에 소유권 주기.
Sudo mkdir /home/zookeeper
Sudo mv /home/hadoop01/Download/apache-zookeeper-3.6.3-bin /home/zookeeper
Sudo chown -R hadoop01:hadoop01 zookeeper
13
네임노드 이중화
bin : 주키퍼 클라이언트와 서버 실행을 위한 쉘 스크립트 파일
conf : 주키퍼 환경설정을 위한 파일.
샘플파일 복사해서 사용
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
14
네임노드 이중화
vi zoo.cfg 수정 :
15
하단에 주키퍼 그룹 정보 추가 입력
네임노드 이중화
dataDir 설정. 후에 주키퍼 실행 시 myid를 읽어 올 디렉토리
server.n :
주키퍼 서버 n이 사용하는 주소와 포트 번호를 지정한다
세개의 필드를 가지고 있으며(:로 구분되는) 첫번째 필드는 호스트 이름 또는 IP주소, 두번째와 세번째
필드는 쿼럼 통신과 리더 선출에 사용하는 TCP 포트 번호다.
clientPort :
클라이언트가 서버로 연결하기 위해 사용하는 TCP 포트. 기본 포트는 2181이다
dataDir :
인 메모리 데이터베이스의 퍼지 스냅샷이 저장되는 디렉토리. 서버가 주키퍼 앙상블의 구성원이라면
이 디렉토리에 id파일이 존재한다.
tickTime :
밀리초 단위로 설정되는 틱 시간이다. 틱은 주키퍼가 사용하는 시간에 대한 기본 측정 단위다.
16
네임노드 이중화
저장 후 모든 주키퍼 서버에 배포 (hadoop01~hadoop03)
● 전송
sudo scp -rp zookeeper hadoop02:/home/
sudo scp -rp zookeeper hadoop03:/home/
● 권한 부여
ssh root@hadoop02 chown -R hadoop01:hadoop01 /home/zookeeper
ssh root@hadoop03 chown -R hadoop01:hadoop01 /home/zookeeper
17
네임노드 이중화
각 서버의 id를 설정해야 한다.
conf 파일 내용
1. conf파일에서 지정한 위치(datadir)에 data 디렉토리 생성
2. data 디렉토리에 myid 파일 생성
mkdir /home/zookeeper/data
vi myid
18
주키퍼 쿼럼 통신을 위한 포트
리더 선출을 위한 포트
네임노드 이중화
호스트 id
각 호스트에 맞는 서버명 server.n에 해당되는 n을 입력 후 저장
hadoop01 vi /home/zookeeper/data/myid 1 입력
hadoop02 vi /home/zookeeper/data/myid 2 입력
hadoop03 vi /home/zookeeper/data/myid 3 입력
19
네임노드 이중화
echo 1 > myid
echo 2 > myid
echo 3 > myid
hadoop01의 myid파일 예시
편의성을 위한 alias 설정(권장) :
vi ~/.bashrc
아래 내용 추가 입력 후 source ~/.bashrc 각 서버에 배포
scp ~/.bashrc hadoop02:~/
scp ~/.bashrc hadoop03:~/
ssh hadoop02 source ~/.bashrc
ssh hadoop03 source ~/.bashrc
20
네임노드 이중화
주키퍼 그룹으로 지정한 각 서버(hadoop01~hadoop03)에서
zookeeper-start 명령어로 실행(앞에서 alias설정 시 가능)
21
네임노드 이중화
● 세개의 서버에 모두 실행 후 zookeeper-status로 상태 확인
22
hadoop02가 리더인 상태
네임노드 이중화
hadoop01
hadoop02
hadoop03
● 하둡과 연동
vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/local/java
export HADOOP_HOME=/home/hadoop/hadoop-3.1.3
export HADOOP_PID_DIR=/home/hadoop/hadoop-3.1.3/pids
23
네임노드 이중화
pid 파일
프로세스의 고유 식별번호! 주로 특정 프로세스의 실행 여부 판단에 사용된다.
이전에 $HADOOP_HOME에 mkdir pids 로 생성했던 디렉토리로 경로 지정 해주었다.
● 기존에 있던 master파일은 사용하지 않는다.
workers파일 수정
24
네임노드 이중화
● core-site.xml파일 수정(xml파일은 hadoop01에서 설정 후 일괄 배포)
25
기본 파일시스템 이름
주키퍼 서버 리스트
네임노드 이중화
hdfs-site.xml 수정 (1)
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/data/dfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/data/dfs/datanode</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/data/dfs/journalnode</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>hadoop-cluster</value>
</property>
<property>
<name>dfs.ha.namenodes.hadoop-cluster</name>
<value>nn1,nn2</value>
</property>
hadoop-cluster는 이 파일에서 새로 정의해주는,
네임노드들의 클러스터를 의미한다.
hadoop-cluster 네임서비스의 namenode id 지정
저널 노드가 edit logs를 저장할 경로
26
네임노드 이중화
hdfs-site.xml 수정 (2)
<property>
<name>dfs.namenode.rpc-address.hadoop-cluster.nn1</name>
<value>hadoop01:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hadoop-cluster.nn2</name>
<value>hadoop02:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.hadoop-cluster.nn1</name>
<value>hadoop01:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.hadoop-cluster.nn2</name>
<value>hadoop02:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/hadoop-cluster</value>
</property>
nn1 NameNode의 RPC 포트
nn2 NameNode의 RPC 포트
nn1 NameNode의 Web UI 포트
후에 active, standby 상태를 웹으로 쉽게 확인 할 수 있다.
27
네트워크로부터 떨어져 있는 컴퓨터에서 코드를 실행하는 방식
= 원격 프로시저 콜 (Remote procedure call)
nn2 NameNode의 Web UI 포트
NameNode가 edit log를 쓰고 읽을 JournalNode URI
URI(Uniform Resource Identifier)는 하나의 리소스를 가리키는 문자열을 칭한다.
가장 흔한 URI는 URL로, 웹 상에서의 위치로 리소스를 식별한다.
네임노드 이중화
hdfs-site.xml 수정 (3)
<property>
<name>dfs.client.failover.proxy.provider.hadoop-cluster</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>/home/hadoop01/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
NameNode Failover 상황에서 기존 active NameNode를 차단할 때 사용할 방법 지정
HDFS 클라이언트가 active NameNode에 접근할 때 사용되는 Java Class
(hdfs에 파일이 올라가지 않는다면 이 설정에 오류가 없는지 의심해보자)
ha.fencing.method를 sshfence로 지정했을 경우 ssh를 경유해 기존 active
NameNode를 죽이는데, 이때 passphrase를 통과하기 위해 SSH private key file을 지
정해야 함. (이를 위해 미리 keygen 생성을 해놓아야 한다.)
28
자동 장애복구 지정
네임노드 이중화
yarn-site.xml 수정 (1)
<configuration> <!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/home/hadoop/data/yarn/nm-local-dir</value>
</property>
<property>
<name>yarn.resourcemanager.fs.state-store.uri</name>
<value>/home/hadoop/data/yarn/system/rmstore</value>
</property>
<property>
29
네임노드 이중화
yarn-site.xml 수정 (2)
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<property>
<name>yarn.web-proxy.address</name>
<value>0.0.0.0:8089</value>
</property>
</configuration>
프록시 서버(Proxy Server)란 시스템에 방화벽을 가지고 있는 경우 외부와
의 통신을 위해 만들어 놓은 서버.
프록시(Proxy)란 원래 '대리' 라는 의미를 가지고 있음.
프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접
적으로 접속할 수 있게 해주는 컴퓨터
30
네임노드 이중화
hadoop01에서 설정한 위의 사항들을 hadoop02~hadoop04로 배포 :
scp hadoop-env.sh hadoop02:/home/hadoop/hadoop-3.1.3/etc/hadoop/
scp hadoop-env.sh hadoop03:/home/hadoop/hadoop-3.1.3/etc/hadoop/
scp hadoop-env.sh hadoop04:/home/hadoop/hadoop-3.1.3/etc/hadoop/
scp workers hadoop02:/home/hadoop/hadoop-3.1.3/etc/hadoop/
scp workers hadoop03:/home/hadoop/hadoop-3.1.3/etc/hadoop/
scp workers hadoop04:/home/hadoop/hadoop-3.1.3/etc/hadoop/
scp core-site.xml hadoop02:/home/hadoop/hadoop-3.1.3/etc/hadoop/
scp core-site.xml hadoop03:/home/hadoop/hadoop-3.1.3/etc/hadoop/
scp core-site.xml hadoop04:/home/hadoop/hadoop-3.1.3/etc/hadoop/
scp hdfs-site.xml hadoop02:/home/hadoop/hadoop-3.1.3/etc/hadoop/
scp hdfs-site.xml hadoop03:/home/hadoop/hadoop-3.1.3/etc/hadoop/
scp hdfs-site.xml hadoop04:/home/hadoop/hadoop-3.1.3/etc/hadoop/
scp yarn-site.xml hadoop02:/home/hadoop/hadoop-3.1.3/etc/hadoop/
scp yarn-site.xml hadoop03:/home/hadoop/hadoop-3.1.3/etc/hadoop/
scp yarn-site.xml hadoop04:/home/hadoop/hadoop-3.1.3/etc/hadoop/
31
네임노드 이중화
하둡 HA 실행 순서 :
1. 주키퍼 포맷
2. 3개의 저널노드 실행
3. Active 네임노드 실행
4. Standby 네임노드 실행
5. 주키퍼 장애 컨트롤러 (zkfc)실행
6. 데이터노드 실행
7. 얀 클러스터 실행
8. 히스토리서버 실행
32
네임노드 이중화
편리한 실행을 위한 alias 등록 :
vi ~/.bashrc
alias hadoop="~/hadoop/sbin/hadoop-daemon.sh"
alias hdfs="~/hadoop/bin/hdfs"
alias yarn="~/hadoop/bin/yarn"
source ~/.bashrc 후에 타 서버 배포 후 환경변수 활성화
33
네임노드 이중화
34
주키퍼 포맷 :
hdfs zkfc -formatZK
hadoop01~hadoop03에서 주키퍼가 실행 된 상태여야 한다
네임노드 이중화
저널노드 실행 :
이제 hadoop01부터 hadoop03까지 저널노드를 설정한 기기들에서 각각 저널노드를 시작해준다. 위
의 .bashrc파일을 각 기기에 설정해주었다면 아래의 커맨드로 실행이 가능
hadoop start journalnode hadoop01 ~ hadoop03 까지 반복
실행 후 jps :
주키퍼
저널 노드
35
네임노드 이중화
hadoop01에서 hdfs 포맷 :
hdfs namenode -format
(네임노드 포맷은 신중히! 처음 실행시에는 포맷 필수)
36
네임노드 이중화
액티브 네임노드 실행 :
hadoop01에서
hadoop start namenode
37
네임노드 이중화
hadoop02에서 스탠바이 네임노드 실행 준비 :
hadoop02에서 hdfs namenode -bootstrapStandby
명령어로 active네임노드의 메타데이터를 복사해온다. 정상 작동 시 아래 내용 출력.
38
네임노드 이중화
오류 - a shared edits dir must not be specified if HA is not enabled. (1)
현상 - 스탠바이 네임노드가 액티브 네임노드의 메타데이터 복사에 실패
확인해보니 복사해야 할 hadoop01 의 네임노드가 죽어있는 상태
39
원인 파악 및 해결 - hadoop01의 네임노드 로그확인
a shared edits dir must not be specified if HA is not enabled.
HA에 관한 오류인 듯 HA를 설정한 hdfs-site.xml확인.
오타 발견, 수정 후 재실행. 네임노드 정상 실행 확인
40
오류 - a shared edits dir must not be specified if HA is not enabled. (2)
오류 - journal at hadoop01 has no edit logs (1)
hdfs namenode -bootstrabStandby 입력 후 다른 오류가 발생했다.
41
active Namenode는 정상실행 됐지만 다른 문제가 발생
journal at hadoop01 has no edit logs
해결
로그 확인해보니 이전 데이터와 충돌된 듯한 느낌.
이전에 있던 저널노드데이터 삭제. 네임노드 데이터 삭제. 포맷 후에 재실행.
42
극단적인 방법이긴 했지만, 정상작동 확인
오류 - journal at hadoop01 has no edit logs (2)
오류 - FSIamageSaver clean checkpoint: shutdown (1)
현상 - 스탠바이 네임노드가 액티브 네임노드의 메타데이터 복사에 실패
43
저널노드 키고, 액티브 네임노드 키고,
스탠바이 네임노드에서 bootstrapStandby 입력하니 에러..
네임노드 로그 확인
fsimage에 문제가 있는듯
원인 파악
44
검색 결과
standby namenode and journal node configurations were in a corrupted state, so that when the cluster tried to switch to the
standby, you encountered the error that you reported. Initially we have to put the primary namenode into safemode and saved the
namespace with the following commands: hdfs dfsadmin -safemode enter hdfs dfsadmin -saveNamespace su - hdfs -c "hdfs
namenode -bootstrapStandby -force" this was to make sure that the namenode was in a consistent state before we attempted to
restart the HDFS components one last time to make sure all processes started cleanly and that HDFS would automatically leave
safemode
- 위 내용을 바탕으로 예상한 원인
이전에 네임노드 이중화 실험을 위해 active네임노드를 강제적으로 죽여서 standby네임노드가
active로 된 상태에서 종료했었다. 이 때 마지막 액티브 네임노드였던 hadoop02에서 실행을 했어
야 했는데 standby였던 hadoop01에서 실행, hadoop02에서 active노드 메타데이터 복사 요청으로
인해 오류가 난 듯 하다. hadoop01, hadoop02 네임노드 모두 실행 후 마지막 액티브 네임노드였던
hadoop02에서 오류 해결 시도
오류 - FSIamageSaver clean checkpoint: shutdown (2)
해결 - safemode 사용 namespace 저장
45
일단 hadoop01, hadoop02 네임노드 둘다 키고, 마지막 액티브 네임노드였던 hadoop02에서 진행
hdfs dfsadmin -safemode enter
hdfs dfsadmin -saveNamespace
hdfs dfsadmin -safemode leave
오류 - FSIamageSaver clean checkpoint: shutdown (3)
해결 - safemode 사용 namespace 저장
46
현재 실행중이던 스탠바이 네임노드 종료 후 hdfs namenode -bootstrapStandby -force 입력
정상 완료. 이후에 다시 스탠바이 네임노드 시작
생각보다 자주 발생하는 오류였다.
오류 - FSIamageSaver clean checkpoint: shutdown (4)
hadoop02에서 스탠바이 네임노드 실행 :
hadoop start namenode
47
네임노드 이중화
alias 추가 설정 :
vi ~/.bashrc
입력 후 source ~/.bashrc
48
네임노드 이중화
● 데이터노드 실행
hadoop01~hadoop04 모두 실행
hadoop start datanode
● yarn 실행
hadoop01에서 실행
yarn-start
● historyserver 실행
hadoop01, hadoop02에서 실행
49
네임노드 이중화
● 주키퍼 장애 컨트롤러 실행
hadoop01, hadoop02 네임노드들에서 실행
hadoop start zkfc (zookeeper failover controller)
50
네임노드 이중화
오류 - you must configure a fencing method before using automatic failover.
원인 및 해결 - 단순 오타
ssfence가 아니라 sshfence를 입력 해야 한다.
hdfs-site.xml에서 수정 후 문제 해결
51
오류 - 두 개의 네임노드 모두 standby 상태
해결 - zkFC 실행 시 하나가 active로 전환된다.
52
zkfc를 실행했어도 active 전환이 안된다면 네임노드 설정과 주키퍼 앙상블 설정 재확인
● 실행 완료 확인
hadoop01 hadoop02
hadoop04
hadoop03
53
네임노드 이중화
● zkfc 작동 확인
먼저 active, standby 네임노드의 상태를 웹에서 확인해보자
이 상태에서 hadoop01의 네임노드를 강제로 종료 했을 때
hadoop02의 standby 상태가 active상태로 바뀌면 성공
54
네임노드 이중화
● active 네임노드 kill
액티브 네임노드(hadoop01) kill 12211
hadoop02
standby -> active 전환 확인
55
네임노드 이중화
● standby 네임노드의 로그 확인
56
네임노드 이중화
standby -> active로 전환 확인
● 기존 네임노드가 kill 된 상태에서 hadoop02 정상작동 확인.
57
네임노드 이중화
hadoop02(현재 active namenode)에서 진행
hdfs dfs -cat /README.txt
이중화 완료.
2. 리소스 매니저 이중화
58
RM 이중화(HA)는 네임노드 이중화(HA)와 유사하게 active/standby로 구성되
며 Zookeeper를 이용하는 방식.
네임노드 이중화와 달리 RM 이중화(HA)는 별도의 모니터링 프로세스가 필
요없이 내장되어 있는 Zookeeper 기반의 ActiveStandbyElector가 active 여
부를 결정한다.
59
RM 이중화 - 개념
● yarn-site.xml에 추가 입력(1)
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
60
RM 이중화
ResourceManager 시작시 state 복구여부
persistent store로 사용할 class
Zookeeper 서버 리스트
ResourceManager HA 사용여부
● yarn-site.xml에 추가 입력(2)
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>rm-cluster</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop01</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop02</value>
</property>
61
RM 이중화
ResourceManager가 leader election에 참가할 cluster 이름 지정
cluster에서 HA를 구성할 ResourceManager id 지정
rm1의 호스트명
rm2의 호스트명
● 입력 후 다른 노드들에 배포
62
RM 이중화
● 실행
1. 액티브 네임노드 실행
2. 스탠바이 네임노드 실행
3. 데이터 노드 실행
4. 액티브 리소스매니저 실행(hadoop01에서 yarn-start)
5. 스탠바이 리소스매니저 실행(hadoop02에서 yarn-start)
6. 주키퍼 장애 컨트롤러 실행
63
RM 이중화
● RM 상태 확인
/home/hadoop/bin/yarn rmadmin -getServiceState rm1
/home/hadoop/bin/yarn rmadmin -getServiceState rm2
64
RM 이중화
hadoop01 리소스매니저 - standby 상태
hadoop02 리소스매니저 - active 상태
hadoop01 네임노드 상태 - standby
hadoop02네임노드 상태 - active
● standby -> active 전환 확인하기 (1)
65
RM 이중화
현재 active상태인 hadoop02의 resourcemanager를 강제종료
● standby -> active 전환 확인하기 (2)
66
RM 이중화
대기중이던 hadoop01 resourcemanager
standby - > active 전환 확인
● 정상작동 확인해보기 (1)
67
RM 이중화
현재 상태
active namenode - hadoop02
active resource manager - hadoop01
이 상태에서 hdfs에 파일 업로드 시도
● 정상작동 확인해보기 (2)
68
RM 이중화
● 정상작동 확인해보기 (3)
69
RM 이중화
정상작동 확인
● 종료했던 RM 재실행시 standby 대기 여부 확인
RM을 강제로 종료했던 노드(hadoop01)에서 RM 재실행
70
RM 이중화
/home/hadoop/sbin/yarn-daemon.sh start resourcemanager
active -> kill -> 재실행 -> standby 상태로 대기 확인

Weitere ähnliche Inhalte

Was ist angesagt?

Apache Kafka 0.8 basic training - Verisign
Apache Kafka 0.8 basic training - VerisignApache Kafka 0.8 basic training - Verisign
Apache Kafka 0.8 basic training - VerisignMichael Noll
 
Spring Boot Microservices vs Akka Actor Cluster
Spring Boot Microservices vs Akka Actor Cluster Spring Boot Microservices vs Akka Actor Cluster
Spring Boot Microservices vs Akka Actor Cluster OpenCredo
 
DevOps with Ansible
DevOps with AnsibleDevOps with Ansible
DevOps with AnsibleSwapnil Jain
 
High Availability for OpenStack
High Availability for OpenStackHigh Availability for OpenStack
High Availability for OpenStackKamesh Pemmaraju
 
[MeetUp][1st] 오리뎅이의_쿠버네티스_네트워킹
[MeetUp][1st] 오리뎅이의_쿠버네티스_네트워킹[MeetUp][1st] 오리뎅이의_쿠버네티스_네트워킹
[MeetUp][1st] 오리뎅이의_쿠버네티스_네트워킹InfraEngineer
 
Maven 3 Overview
Maven 3  OverviewMaven 3  Overview
Maven 3 OverviewMike Ensor
 
Disaster Recovery Plans for Apache Kafka
Disaster Recovery Plans for Apache KafkaDisaster Recovery Plans for Apache Kafka
Disaster Recovery Plans for Apache Kafkaconfluent
 
Deep Dive into Docker Swarm Mode
Deep Dive into Docker Swarm ModeDeep Dive into Docker Swarm Mode
Deep Dive into Docker Swarm ModeAjeet Singh Raina
 
Docker Networking Overview
Docker Networking OverviewDocker Networking Overview
Docker Networking OverviewSreenivas Makam
 
The Juniper SDN Landscape
The Juniper SDN LandscapeThe Juniper SDN Landscape
The Juniper SDN LandscapeChris Jones
 
SpringOne Tour: Spring Boot 3 and Beyond
SpringOne Tour: Spring Boot 3 and BeyondSpringOne Tour: Spring Boot 3 and Beyond
SpringOne Tour: Spring Boot 3 and BeyondVMware Tanzu
 
카프카, 산전수전 노하우
카프카, 산전수전 노하우카프카, 산전수전 노하우
카프카, 산전수전 노하우if kakao
 
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git민태 김
 
Zookeeper 활용 nifi clustering
Zookeeper 활용 nifi clusteringZookeeper 활용 nifi clustering
Zookeeper 활용 nifi clusteringNoahKIM36
 
Server monitoring using grafana and prometheus
Server monitoring using grafana and prometheusServer monitoring using grafana and prometheus
Server monitoring using grafana and prometheusCeline George
 
Kafka Tutorial - DevOps, Admin and Ops
Kafka Tutorial - DevOps, Admin and OpsKafka Tutorial - DevOps, Admin and Ops
Kafka Tutorial - DevOps, Admin and OpsJean-Paul Azar
 
Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Dronix
 

Was ist angesagt? (20)

Apache Kafka 0.8 basic training - Verisign
Apache Kafka 0.8 basic training - VerisignApache Kafka 0.8 basic training - Verisign
Apache Kafka 0.8 basic training - Verisign
 
Docker Networking
Docker NetworkingDocker Networking
Docker Networking
 
Spring Boot Microservices vs Akka Actor Cluster
Spring Boot Microservices vs Akka Actor Cluster Spring Boot Microservices vs Akka Actor Cluster
Spring Boot Microservices vs Akka Actor Cluster
 
DevOps with Ansible
DevOps with AnsibleDevOps with Ansible
DevOps with Ansible
 
High Availability for OpenStack
High Availability for OpenStackHigh Availability for OpenStack
High Availability for OpenStack
 
[MeetUp][1st] 오리뎅이의_쿠버네티스_네트워킹
[MeetUp][1st] 오리뎅이의_쿠버네티스_네트워킹[MeetUp][1st] 오리뎅이의_쿠버네티스_네트워킹
[MeetUp][1st] 오리뎅이의_쿠버네티스_네트워킹
 
Maven 3 Overview
Maven 3  OverviewMaven 3  Overview
Maven 3 Overview
 
Disaster Recovery Plans for Apache Kafka
Disaster Recovery Plans for Apache KafkaDisaster Recovery Plans for Apache Kafka
Disaster Recovery Plans for Apache Kafka
 
Deep Dive into Docker Swarm Mode
Deep Dive into Docker Swarm ModeDeep Dive into Docker Swarm Mode
Deep Dive into Docker Swarm Mode
 
Docker Networking Overview
Docker Networking OverviewDocker Networking Overview
Docker Networking Overview
 
The Juniper SDN Landscape
The Juniper SDN LandscapeThe Juniper SDN Landscape
The Juniper SDN Landscape
 
SpringOne Tour: Spring Boot 3 and Beyond
SpringOne Tour: Spring Boot 3 and BeyondSpringOne Tour: Spring Boot 3 and Beyond
SpringOne Tour: Spring Boot 3 and Beyond
 
CKA_1st.pptx
CKA_1st.pptxCKA_1st.pptx
CKA_1st.pptx
 
카프카, 산전수전 노하우
카프카, 산전수전 노하우카프카, 산전수전 노하우
카프카, 산전수전 노하우
 
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
 
Zookeeper 활용 nifi clustering
Zookeeper 활용 nifi clusteringZookeeper 활용 nifi clustering
Zookeeper 활용 nifi clustering
 
Server monitoring using grafana and prometheus
Server monitoring using grafana and prometheusServer monitoring using grafana and prometheus
Server monitoring using grafana and prometheus
 
Maven Introduction
Maven IntroductionMaven Introduction
Maven Introduction
 
Kafka Tutorial - DevOps, Admin and Ops
Kafka Tutorial - DevOps, Admin and OpsKafka Tutorial - DevOps, Admin and Ops
Kafka Tutorial - DevOps, Admin and Ops
 
Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기
 

Ähnlich wie 하둡 고가용성(HA) 설정

[234]멀티테넌트 하둡 클러스터 운영 경험기
[234]멀티테넌트 하둡 클러스터 운영 경험기[234]멀티테넌트 하둡 클러스터 운영 경험기
[234]멀티테넌트 하둡 클러스터 운영 경험기NAVER D2
 
RHive tutorial supplement 1: RHive 튜토리얼 부록 1 - Hadoop 설치
RHive tutorial supplement 1: RHive 튜토리얼 부록 1 - Hadoop 설치RHive tutorial supplement 1: RHive 튜토리얼 부록 1 - Hadoop 설치
RHive tutorial supplement 1: RHive 튜토리얼 부록 1 - Hadoop 설치Aiden Seonghak Hong
 
[오픈소스컨설팅]Ansible overview
[오픈소스컨설팅]Ansible overview[오픈소스컨설팅]Ansible overview
[오픈소스컨설팅]Ansible overviewOpen Source Consulting
 
하둡완벽가이드 Ch9
하둡완벽가이드 Ch9하둡완벽가이드 Ch9
하둡완벽가이드 Ch9HyeonSeok Choi
 
log-monitoring-architecture.pdf
log-monitoring-architecture.pdflog-monitoring-architecture.pdf
log-monitoring-architecture.pdfSungkyun Kim
 
[1A7]Ansible의이해와활용
[1A7]Ansible의이해와활용[1A7]Ansible의이해와활용
[1A7]Ansible의이해와활용NAVER D2
 
하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop
하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop
하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for HadoopSeungYong Baek
 
Java 초보자를 위한 hadoop 설정
Java 초보자를 위한 hadoop 설정Java 초보자를 위한 hadoop 설정
Java 초보자를 위한 hadoop 설정HyeonSeok Choi
 
Hadoop High Availability Summary
Hadoop High Availability SummaryHadoop High Availability Summary
Hadoop High Availability SummaryChan Shik Lim
 
Openstack live migration
Openstack live migrationOpenstack live migration
Openstack live migrationymtech
 
20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제Tae Young Lee
 
02.실전! 시스템 관리자를 위한 Ansible
02.실전! 시스템 관리자를 위한 Ansible02.실전! 시스템 관리자를 위한 Ansible
02.실전! 시스템 관리자를 위한 AnsibleOpennaru, inc.
 
Hadoop Introduction (1.0)
Hadoop Introduction (1.0)Hadoop Introduction (1.0)
Hadoop Introduction (1.0)Keeyong Han
 
A review of zookeeper 2010.12
A review of zookeeper 2010.12A review of zookeeper 2010.12
A review of zookeeper 2010.12HoJin Ha
 

Ähnlich wie 하둡 고가용성(HA) 설정 (20)

[234]멀티테넌트 하둡 클러스터 운영 경험기
[234]멀티테넌트 하둡 클러스터 운영 경험기[234]멀티테넌트 하둡 클러스터 운영 경험기
[234]멀티테넌트 하둡 클러스터 운영 경험기
 
하둡관리
하둡관리하둡관리
하둡관리
 
주키퍼
주키퍼주키퍼
주키퍼
 
RHive tutorial supplement 1: RHive 튜토리얼 부록 1 - Hadoop 설치
RHive tutorial supplement 1: RHive 튜토리얼 부록 1 - Hadoop 설치RHive tutorial supplement 1: RHive 튜토리얼 부록 1 - Hadoop 설치
RHive tutorial supplement 1: RHive 튜토리얼 부록 1 - Hadoop 설치
 
[오픈소스컨설팅]Ansible overview
[오픈소스컨설팅]Ansible overview[오픈소스컨설팅]Ansible overview
[오픈소스컨설팅]Ansible overview
 
HDFS Overview
HDFS OverviewHDFS Overview
HDFS Overview
 
하둡완벽가이드 Ch9
하둡완벽가이드 Ch9하둡완벽가이드 Ch9
하둡완벽가이드 Ch9
 
Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
log-monitoring-architecture.pdf
log-monitoring-architecture.pdflog-monitoring-architecture.pdf
log-monitoring-architecture.pdf
 
[1A7]Ansible의이해와활용
[1A7]Ansible의이해와활용[1A7]Ansible의이해와활용
[1A7]Ansible의이해와활용
 
하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop
하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop
하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop
 
Java 초보자를 위한 hadoop 설정
Java 초보자를 위한 hadoop 설정Java 초보자를 위한 hadoop 설정
Java 초보자를 위한 hadoop 설정
 
03.Ansible 소개
03.Ansible 소개03.Ansible 소개
03.Ansible 소개
 
Hadoop High Availability Summary
Hadoop High Availability SummaryHadoop High Availability Summary
Hadoop High Availability Summary
 
Openstack live migration
Openstack live migrationOpenstack live migration
Openstack live migration
 
20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제
 
02.실전! 시스템 관리자를 위한 Ansible
02.실전! 시스템 관리자를 위한 Ansible02.실전! 시스템 관리자를 위한 Ansible
02.실전! 시스템 관리자를 위한 Ansible
 
Hadoop Introduction (1.0)
Hadoop Introduction (1.0)Hadoop Introduction (1.0)
Hadoop Introduction (1.0)
 
A review of zookeeper 2010.12
A review of zookeeper 2010.12A review of zookeeper 2010.12
A review of zookeeper 2010.12
 
Apache hive
Apache hiveApache hive
Apache hive
 

Kürzlich hochgeladen

JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 

Kürzlich hochgeladen (8)

JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 

하둡 고가용성(HA) 설정

  • 3. HA 개념 (1) 1. HA에서의 주키퍼 주 기능 Failure detection : 네임노드를 감시하여 시스템을 감시한다. Active NameNode election : 네임노드가 죽었을시, 그 다음 네임노드 후보를 선 출한다. 2. ZKFC(zookeeper failover controller) Health monitoring : 상태 모니터링 ZooKeeper session management : 주키퍼의 세션관리 ZooKeeper-based election : 주키퍼 기반 선거(리더선출) 3
  • 4. HA 개념 (2) - 두 개의 네임노드 두 개의 네임노드는 Active 네임 노드, Standby 네임 노드라 부른다. Active네임 노드에 장애가 생기면, 두번째 네임노드인 Stanby 네임 노드가 Active한 상태로 바뀌 면서 네임 노드의 역할을 맡는 방식이다. Active 네임 노드와 Standby 네임 노드는 데이터 노드로 부터 블록 리포트, 하트비트를 모두 받아서 동일한 메타데이터를 유지하고, 저널노드를 이용하여 editFile을 공유한다. 요약하자면, active 네임도느는 네임노드의 역할을 수행하고, standby 네임노드는 active 네임노드 와 동일한 메타데이터 정보를 유지, active 네임노드에 문제가 발생하면 standby 네임노드가 active 네임노드로 동작. active 네임노드에 문제가 발생하는 것을 자동으로 확인하는 것이 어렵기 때문에 주키퍼를 이용, 장애 발생 시 자동으로 상태변경이 가능하도록 한다. 4
  • 5. HA 개념 (3) - 저널 노드 저널 노드 : 네임노드로부터 받은 트랜잭션(edit log)내용을 저널 노드 자신의 로컬 디스크에 저장한다. 해당 edit log 내용은 전체 저널 노드들에 동시에 쓰여진다. 저널노드는 홀수갯수만큼 있는게 좋다. 절반 이상의 저널노드가 동작 중이어야 edit log를 fsimage에 반영할 수 있기 때문. fsimage : 파일시스템에 존재하는 모든 디렉토리와 파일의 아이노드 정보를 직렬화한 파일. 각 아이노드는 파일이나 디렉터리 메타데이터의 내부 구조를 나타내며 파일의 복제 수준, 변경 및 접근 시간, 접근 권한, 블록 크기, 파일을 구성하는 블록 집합과 같은 정보를 가지고 있다. 5
  • 6. HA 개념 (4) - 정리 요약 : 주키퍼는 active name node와 standby name node를 이용한 HA를 가능하게 해주는 분산 코디네이터. 주키퍼는 어떤 노드가 active인지, standby인지를 저장함으로 네임 노드들을 관리한다 주키퍼는 단 하나의 네임 노드만 active상태에 있는 것을 보장. 주키퍼는 평소에 네임노드들과 세션을 유지하고 있다. 만약 active가 반응이 없으면 주키퍼는 바로 standby에게 active의 장애를 알린다. 여러 standby 네임노드가 있다면, 어떤 것을 active name node를 리더로 선출할 지는 주키퍼가 제공하는 리더 선출 기능에 의해 정해진다. 6
  • 7. HA 개념 (5) - 정리 주키퍼는 3대 이상의 홀수 개수 만큼 있는 것이 좋다. 하둡 설정에 의해 주키퍼는 기본적으로 3대가 설정되어 있어야 한다. 네임노드가 두개라고 해서 두개의 주키퍼 서버를 설정하면 오류가 난다. 주키퍼는 하나의 리더와 다수의 팔로워로 구성. 리더가 주키퍼로 들어오는 데이터의 분산을 도맡아 한다. 모든 리더와 팔로워들은 똑같은 데이터를 동기화하고있어 어떤 서버에서 데이터를 읽어도 같은 데이터를 읽을 수 있다. 확실하지 않은 정보 - 주키퍼 서버의 리더선출과, 네임노드서버끼리의 리더선출은 서로 다른 듯? 7
  • 8. 참조 - Fencing(펜싱) Fencing : 네임노드가 장애가 아닌데, 네트워크 문제나, cpu과부하 상황에서 기존의 액티브 네임노드가 죽었다고 판단하여 새로운 네임노드가 active로 승격 될 수 있다. 이때 기존의 네임노드는 아직도 자기가 active라고 생각하는데, 이 상황을 split brain이라고 한다. 이를 방지하기 위해 기존의 액티브 네임노드를 확실하게 죽이는 것을 펜싱(fencing)이라고 한다. 8
  • 10. 네임노드 이중화 - 서비스 구성 계획 10 hadoop ver 3.1.3 zookeeper ver 3.6.3 hostname set hadoop01, hadoop02, hadoop03, hadoop04 all username hadoop01 hadoop01 주키퍼, 액티브 네임노드, 저널노드, 데이터 노드, 노드매니저, 리소스매니저(액티브) hadoop02 주키퍼, 스탠바이 네임노드, 저널노드, 데이 터노드, 노드매니저, 리소스매니저(스탠바이) hadoop03 주키퍼, 저널노드 , 데이터노드, 노드매니저 hadoop04 데이터노드, 노드매니저
  • 11. 네임노드 이중화 시작 전 설정 : 모든 유저네임은 hadoop01로 진행. 모든 노드간 쌍방 키젠 완료 및 authorized_keys에 각자의 공개키 등록된 상태, 자바 설치 완료, 하둡 기본 설치 완료. etc/hosts 설정 11
  • 12. 주키퍼 쿼럼을 형성할 hadoop01~hadoop03에 주키퍼 설치 hadoop01에 설치 후 기본 설정 후에 일괄 배포 예정 권한 주고 압축 풀기 chmod 775 apache-zookeeper-3.6.3-bin.tar.gz tar -xvzf apache-zookeeper-3.6.3-bin.tar.gz 12 네임노드 이중화
  • 13. /home디렉토리에 주키퍼 폴더 생성. 그 하위로 압축 푼 내용 이동 후에 소유권 주기. Sudo mkdir /home/zookeeper Sudo mv /home/hadoop01/Download/apache-zookeeper-3.6.3-bin /home/zookeeper Sudo chown -R hadoop01:hadoop01 zookeeper 13 네임노드 이중화
  • 14. bin : 주키퍼 클라이언트와 서버 실행을 위한 쉘 스크립트 파일 conf : 주키퍼 환경설정을 위한 파일. 샘플파일 복사해서 사용 cp zoo_sample.cfg zoo.cfg vi zoo.cfg 14 네임노드 이중화
  • 15. vi zoo.cfg 수정 : 15 하단에 주키퍼 그룹 정보 추가 입력 네임노드 이중화 dataDir 설정. 후에 주키퍼 실행 시 myid를 읽어 올 디렉토리
  • 16. server.n : 주키퍼 서버 n이 사용하는 주소와 포트 번호를 지정한다 세개의 필드를 가지고 있으며(:로 구분되는) 첫번째 필드는 호스트 이름 또는 IP주소, 두번째와 세번째 필드는 쿼럼 통신과 리더 선출에 사용하는 TCP 포트 번호다. clientPort : 클라이언트가 서버로 연결하기 위해 사용하는 TCP 포트. 기본 포트는 2181이다 dataDir : 인 메모리 데이터베이스의 퍼지 스냅샷이 저장되는 디렉토리. 서버가 주키퍼 앙상블의 구성원이라면 이 디렉토리에 id파일이 존재한다. tickTime : 밀리초 단위로 설정되는 틱 시간이다. 틱은 주키퍼가 사용하는 시간에 대한 기본 측정 단위다. 16 네임노드 이중화
  • 17. 저장 후 모든 주키퍼 서버에 배포 (hadoop01~hadoop03) ● 전송 sudo scp -rp zookeeper hadoop02:/home/ sudo scp -rp zookeeper hadoop03:/home/ ● 권한 부여 ssh root@hadoop02 chown -R hadoop01:hadoop01 /home/zookeeper ssh root@hadoop03 chown -R hadoop01:hadoop01 /home/zookeeper 17 네임노드 이중화
  • 18. 각 서버의 id를 설정해야 한다. conf 파일 내용 1. conf파일에서 지정한 위치(datadir)에 data 디렉토리 생성 2. data 디렉토리에 myid 파일 생성 mkdir /home/zookeeper/data vi myid 18 주키퍼 쿼럼 통신을 위한 포트 리더 선출을 위한 포트 네임노드 이중화 호스트 id
  • 19. 각 호스트에 맞는 서버명 server.n에 해당되는 n을 입력 후 저장 hadoop01 vi /home/zookeeper/data/myid 1 입력 hadoop02 vi /home/zookeeper/data/myid 2 입력 hadoop03 vi /home/zookeeper/data/myid 3 입력 19 네임노드 이중화 echo 1 > myid echo 2 > myid echo 3 > myid hadoop01의 myid파일 예시
  • 20. 편의성을 위한 alias 설정(권장) : vi ~/.bashrc 아래 내용 추가 입력 후 source ~/.bashrc 각 서버에 배포 scp ~/.bashrc hadoop02:~/ scp ~/.bashrc hadoop03:~/ ssh hadoop02 source ~/.bashrc ssh hadoop03 source ~/.bashrc 20 네임노드 이중화
  • 21. 주키퍼 그룹으로 지정한 각 서버(hadoop01~hadoop03)에서 zookeeper-start 명령어로 실행(앞에서 alias설정 시 가능) 21 네임노드 이중화
  • 22. ● 세개의 서버에 모두 실행 후 zookeeper-status로 상태 확인 22 hadoop02가 리더인 상태 네임노드 이중화 hadoop01 hadoop02 hadoop03
  • 23. ● 하둡과 연동 vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh export JAVA_HOME=/usr/local/java export HADOOP_HOME=/home/hadoop/hadoop-3.1.3 export HADOOP_PID_DIR=/home/hadoop/hadoop-3.1.3/pids 23 네임노드 이중화 pid 파일 프로세스의 고유 식별번호! 주로 특정 프로세스의 실행 여부 판단에 사용된다. 이전에 $HADOOP_HOME에 mkdir pids 로 생성했던 디렉토리로 경로 지정 해주었다.
  • 24. ● 기존에 있던 master파일은 사용하지 않는다. workers파일 수정 24 네임노드 이중화
  • 25. ● core-site.xml파일 수정(xml파일은 hadoop01에서 설정 후 일괄 배포) 25 기본 파일시스템 이름 주키퍼 서버 리스트 네임노드 이중화
  • 27. hdfs-site.xml 수정 (2) <property> <name>dfs.namenode.rpc-address.hadoop-cluster.nn1</name> <value>hadoop01:8020</value> </property> <property> <name>dfs.namenode.rpc-address.hadoop-cluster.nn2</name> <value>hadoop02:8020</value> </property> <property> <name>dfs.namenode.http-address.hadoop-cluster.nn1</name> <value>hadoop01:50070</value> </property> <property> <name>dfs.namenode.http-address.hadoop-cluster.nn2</name> <value>hadoop02:50070</value> </property> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/hadoop-cluster</value> </property> nn1 NameNode의 RPC 포트 nn2 NameNode의 RPC 포트 nn1 NameNode의 Web UI 포트 후에 active, standby 상태를 웹으로 쉽게 확인 할 수 있다. 27 네트워크로부터 떨어져 있는 컴퓨터에서 코드를 실행하는 방식 = 원격 프로시저 콜 (Remote procedure call) nn2 NameNode의 Web UI 포트 NameNode가 edit log를 쓰고 읽을 JournalNode URI URI(Uniform Resource Identifier)는 하나의 리소스를 가리키는 문자열을 칭한다. 가장 흔한 URI는 URL로, 웹 상에서의 위치로 리소스를 식별한다. 네임노드 이중화
  • 28. hdfs-site.xml 수정 (3) <property> <name>dfs.client.failover.proxy.provider.hadoop-cluster</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>/home/hadoop01/.ssh/id_rsa</value> </property> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> </configuration> NameNode Failover 상황에서 기존 active NameNode를 차단할 때 사용할 방법 지정 HDFS 클라이언트가 active NameNode에 접근할 때 사용되는 Java Class (hdfs에 파일이 올라가지 않는다면 이 설정에 오류가 없는지 의심해보자) ha.fencing.method를 sshfence로 지정했을 경우 ssh를 경유해 기존 active NameNode를 죽이는데, 이때 passphrase를 통과하기 위해 SSH private key file을 지 정해야 함. (이를 위해 미리 keygen 생성을 해놓아야 한다.) 28 자동 장애복구 지정 네임노드 이중화
  • 29. yarn-site.xml 수정 (1) <configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.nodemanager.local-dirs</name> <value>/home/hadoop/data/yarn/nm-local-dir</value> </property> <property> <name>yarn.resourcemanager.fs.state-store.uri</name> <value>/home/hadoop/data/yarn/system/rmstore</value> </property> <property> 29 네임노드 이중화
  • 30. yarn-site.xml 수정 (2) <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop01</value> </property> <property> <name>yarn.web-proxy.address</name> <value>0.0.0.0:8089</value> </property> </configuration> 프록시 서버(Proxy Server)란 시스템에 방화벽을 가지고 있는 경우 외부와 의 통신을 위해 만들어 놓은 서버. 프록시(Proxy)란 원래 '대리' 라는 의미를 가지고 있음. 프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접 적으로 접속할 수 있게 해주는 컴퓨터 30 네임노드 이중화
  • 31. hadoop01에서 설정한 위의 사항들을 hadoop02~hadoop04로 배포 : scp hadoop-env.sh hadoop02:/home/hadoop/hadoop-3.1.3/etc/hadoop/ scp hadoop-env.sh hadoop03:/home/hadoop/hadoop-3.1.3/etc/hadoop/ scp hadoop-env.sh hadoop04:/home/hadoop/hadoop-3.1.3/etc/hadoop/ scp workers hadoop02:/home/hadoop/hadoop-3.1.3/etc/hadoop/ scp workers hadoop03:/home/hadoop/hadoop-3.1.3/etc/hadoop/ scp workers hadoop04:/home/hadoop/hadoop-3.1.3/etc/hadoop/ scp core-site.xml hadoop02:/home/hadoop/hadoop-3.1.3/etc/hadoop/ scp core-site.xml hadoop03:/home/hadoop/hadoop-3.1.3/etc/hadoop/ scp core-site.xml hadoop04:/home/hadoop/hadoop-3.1.3/etc/hadoop/ scp hdfs-site.xml hadoop02:/home/hadoop/hadoop-3.1.3/etc/hadoop/ scp hdfs-site.xml hadoop03:/home/hadoop/hadoop-3.1.3/etc/hadoop/ scp hdfs-site.xml hadoop04:/home/hadoop/hadoop-3.1.3/etc/hadoop/ scp yarn-site.xml hadoop02:/home/hadoop/hadoop-3.1.3/etc/hadoop/ scp yarn-site.xml hadoop03:/home/hadoop/hadoop-3.1.3/etc/hadoop/ scp yarn-site.xml hadoop04:/home/hadoop/hadoop-3.1.3/etc/hadoop/ 31 네임노드 이중화
  • 32. 하둡 HA 실행 순서 : 1. 주키퍼 포맷 2. 3개의 저널노드 실행 3. Active 네임노드 실행 4. Standby 네임노드 실행 5. 주키퍼 장애 컨트롤러 (zkfc)실행 6. 데이터노드 실행 7. 얀 클러스터 실행 8. 히스토리서버 실행 32 네임노드 이중화
  • 33. 편리한 실행을 위한 alias 등록 : vi ~/.bashrc alias hadoop="~/hadoop/sbin/hadoop-daemon.sh" alias hdfs="~/hadoop/bin/hdfs" alias yarn="~/hadoop/bin/yarn" source ~/.bashrc 후에 타 서버 배포 후 환경변수 활성화 33 네임노드 이중화
  • 34. 34 주키퍼 포맷 : hdfs zkfc -formatZK hadoop01~hadoop03에서 주키퍼가 실행 된 상태여야 한다 네임노드 이중화
  • 35. 저널노드 실행 : 이제 hadoop01부터 hadoop03까지 저널노드를 설정한 기기들에서 각각 저널노드를 시작해준다. 위 의 .bashrc파일을 각 기기에 설정해주었다면 아래의 커맨드로 실행이 가능 hadoop start journalnode hadoop01 ~ hadoop03 까지 반복 실행 후 jps : 주키퍼 저널 노드 35 네임노드 이중화
  • 36. hadoop01에서 hdfs 포맷 : hdfs namenode -format (네임노드 포맷은 신중히! 처음 실행시에는 포맷 필수) 36 네임노드 이중화
  • 37. 액티브 네임노드 실행 : hadoop01에서 hadoop start namenode 37 네임노드 이중화
  • 38. hadoop02에서 스탠바이 네임노드 실행 준비 : hadoop02에서 hdfs namenode -bootstrapStandby 명령어로 active네임노드의 메타데이터를 복사해온다. 정상 작동 시 아래 내용 출력. 38 네임노드 이중화
  • 39. 오류 - a shared edits dir must not be specified if HA is not enabled. (1) 현상 - 스탠바이 네임노드가 액티브 네임노드의 메타데이터 복사에 실패 확인해보니 복사해야 할 hadoop01 의 네임노드가 죽어있는 상태 39
  • 40. 원인 파악 및 해결 - hadoop01의 네임노드 로그확인 a shared edits dir must not be specified if HA is not enabled. HA에 관한 오류인 듯 HA를 설정한 hdfs-site.xml확인. 오타 발견, 수정 후 재실행. 네임노드 정상 실행 확인 40 오류 - a shared edits dir must not be specified if HA is not enabled. (2)
  • 41. 오류 - journal at hadoop01 has no edit logs (1) hdfs namenode -bootstrabStandby 입력 후 다른 오류가 발생했다. 41 active Namenode는 정상실행 됐지만 다른 문제가 발생 journal at hadoop01 has no edit logs
  • 42. 해결 로그 확인해보니 이전 데이터와 충돌된 듯한 느낌. 이전에 있던 저널노드데이터 삭제. 네임노드 데이터 삭제. 포맷 후에 재실행. 42 극단적인 방법이긴 했지만, 정상작동 확인 오류 - journal at hadoop01 has no edit logs (2)
  • 43. 오류 - FSIamageSaver clean checkpoint: shutdown (1) 현상 - 스탠바이 네임노드가 액티브 네임노드의 메타데이터 복사에 실패 43 저널노드 키고, 액티브 네임노드 키고, 스탠바이 네임노드에서 bootstrapStandby 입력하니 에러.. 네임노드 로그 확인 fsimage에 문제가 있는듯
  • 44. 원인 파악 44 검색 결과 standby namenode and journal node configurations were in a corrupted state, so that when the cluster tried to switch to the standby, you encountered the error that you reported. Initially we have to put the primary namenode into safemode and saved the namespace with the following commands: hdfs dfsadmin -safemode enter hdfs dfsadmin -saveNamespace su - hdfs -c "hdfs namenode -bootstrapStandby -force" this was to make sure that the namenode was in a consistent state before we attempted to restart the HDFS components one last time to make sure all processes started cleanly and that HDFS would automatically leave safemode - 위 내용을 바탕으로 예상한 원인 이전에 네임노드 이중화 실험을 위해 active네임노드를 강제적으로 죽여서 standby네임노드가 active로 된 상태에서 종료했었다. 이 때 마지막 액티브 네임노드였던 hadoop02에서 실행을 했어 야 했는데 standby였던 hadoop01에서 실행, hadoop02에서 active노드 메타데이터 복사 요청으로 인해 오류가 난 듯 하다. hadoop01, hadoop02 네임노드 모두 실행 후 마지막 액티브 네임노드였던 hadoop02에서 오류 해결 시도 오류 - FSIamageSaver clean checkpoint: shutdown (2)
  • 45. 해결 - safemode 사용 namespace 저장 45 일단 hadoop01, hadoop02 네임노드 둘다 키고, 마지막 액티브 네임노드였던 hadoop02에서 진행 hdfs dfsadmin -safemode enter hdfs dfsadmin -saveNamespace hdfs dfsadmin -safemode leave 오류 - FSIamageSaver clean checkpoint: shutdown (3)
  • 46. 해결 - safemode 사용 namespace 저장 46 현재 실행중이던 스탠바이 네임노드 종료 후 hdfs namenode -bootstrapStandby -force 입력 정상 완료. 이후에 다시 스탠바이 네임노드 시작 생각보다 자주 발생하는 오류였다. 오류 - FSIamageSaver clean checkpoint: shutdown (4)
  • 47. hadoop02에서 스탠바이 네임노드 실행 : hadoop start namenode 47 네임노드 이중화
  • 48. alias 추가 설정 : vi ~/.bashrc 입력 후 source ~/.bashrc 48 네임노드 이중화
  • 49. ● 데이터노드 실행 hadoop01~hadoop04 모두 실행 hadoop start datanode ● yarn 실행 hadoop01에서 실행 yarn-start ● historyserver 실행 hadoop01, hadoop02에서 실행 49 네임노드 이중화
  • 50. ● 주키퍼 장애 컨트롤러 실행 hadoop01, hadoop02 네임노드들에서 실행 hadoop start zkfc (zookeeper failover controller) 50 네임노드 이중화
  • 51. 오류 - you must configure a fencing method before using automatic failover. 원인 및 해결 - 단순 오타 ssfence가 아니라 sshfence를 입력 해야 한다. hdfs-site.xml에서 수정 후 문제 해결 51
  • 52. 오류 - 두 개의 네임노드 모두 standby 상태 해결 - zkFC 실행 시 하나가 active로 전환된다. 52 zkfc를 실행했어도 active 전환이 안된다면 네임노드 설정과 주키퍼 앙상블 설정 재확인
  • 53. ● 실행 완료 확인 hadoop01 hadoop02 hadoop04 hadoop03 53 네임노드 이중화
  • 54. ● zkfc 작동 확인 먼저 active, standby 네임노드의 상태를 웹에서 확인해보자 이 상태에서 hadoop01의 네임노드를 강제로 종료 했을 때 hadoop02의 standby 상태가 active상태로 바뀌면 성공 54 네임노드 이중화
  • 55. ● active 네임노드 kill 액티브 네임노드(hadoop01) kill 12211 hadoop02 standby -> active 전환 확인 55 네임노드 이중화
  • 56. ● standby 네임노드의 로그 확인 56 네임노드 이중화 standby -> active로 전환 확인
  • 57. ● 기존 네임노드가 kill 된 상태에서 hadoop02 정상작동 확인. 57 네임노드 이중화 hadoop02(현재 active namenode)에서 진행 hdfs dfs -cat /README.txt 이중화 완료.
  • 58. 2. 리소스 매니저 이중화 58
  • 59. RM 이중화(HA)는 네임노드 이중화(HA)와 유사하게 active/standby로 구성되 며 Zookeeper를 이용하는 방식. 네임노드 이중화와 달리 RM 이중화(HA)는 별도의 모니터링 프로세스가 필 요없이 내장되어 있는 Zookeeper 기반의 ActiveStandbyElector가 active 여 부를 결정한다. 59 RM 이중화 - 개념
  • 60. ● yarn-site.xml에 추가 입력(1) <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> <property> <name>yarn.resourcemanager.zk-address</name> <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value> </property> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> 60 RM 이중화 ResourceManager 시작시 state 복구여부 persistent store로 사용할 class Zookeeper 서버 리스트 ResourceManager HA 사용여부
  • 61. ● yarn-site.xml에 추가 입력(2) <property> <name>yarn.resourcemanager.cluster-id</name> <value>rm-cluster</value> </property> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>hadoop01</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>hadoop02</value> </property> 61 RM 이중화 ResourceManager가 leader election에 참가할 cluster 이름 지정 cluster에서 HA를 구성할 ResourceManager id 지정 rm1의 호스트명 rm2의 호스트명
  • 62. ● 입력 후 다른 노드들에 배포 62 RM 이중화
  • 63. ● 실행 1. 액티브 네임노드 실행 2. 스탠바이 네임노드 실행 3. 데이터 노드 실행 4. 액티브 리소스매니저 실행(hadoop01에서 yarn-start) 5. 스탠바이 리소스매니저 실행(hadoop02에서 yarn-start) 6. 주키퍼 장애 컨트롤러 실행 63 RM 이중화
  • 64. ● RM 상태 확인 /home/hadoop/bin/yarn rmadmin -getServiceState rm1 /home/hadoop/bin/yarn rmadmin -getServiceState rm2 64 RM 이중화 hadoop01 리소스매니저 - standby 상태 hadoop02 리소스매니저 - active 상태 hadoop01 네임노드 상태 - standby hadoop02네임노드 상태 - active
  • 65. ● standby -> active 전환 확인하기 (1) 65 RM 이중화 현재 active상태인 hadoop02의 resourcemanager를 강제종료
  • 66. ● standby -> active 전환 확인하기 (2) 66 RM 이중화 대기중이던 hadoop01 resourcemanager standby - > active 전환 확인
  • 67. ● 정상작동 확인해보기 (1) 67 RM 이중화 현재 상태 active namenode - hadoop02 active resource manager - hadoop01 이 상태에서 hdfs에 파일 업로드 시도
  • 68. ● 정상작동 확인해보기 (2) 68 RM 이중화
  • 69. ● 정상작동 확인해보기 (3) 69 RM 이중화 정상작동 확인
  • 70. ● 종료했던 RM 재실행시 standby 대기 여부 확인 RM을 강제로 종료했던 노드(hadoop01)에서 RM 재실행 70 RM 이중화 /home/hadoop/sbin/yarn-daemon.sh start resourcemanager active -> kill -> 재실행 -> standby 상태로 대기 확인