아래 모든 설명은 하나 떠 있는 구조가 아닌 실제 운영환경, 완전 분산 모드로 설치한 것을 가정한다.
구성요소
HDFS의 구성요소는 다음과 같다.
- NameNode: Active & Standby, Zookeeper Failover Controller
- DataNode
- Quorum Journal Manager
- Zookeeper
edits log를 모아서 FS image를 만드는 역할을 수행했던 Secondary NameNode는 HA 구성에서 필요 없다. Standby NameNode가 해당 역할을 수행한다.
High Availability
hadoop은 예전부터 이중화 이야기가 항상 꽂을 피웠다. 공식적으로 이중화 안되던 시절에 facebook이 avatar node라는 걸 만들기도 했었다. 나는 0.18 버전 사용하던 당시 zookeeper client 두개를 놓고 ephemeral node를 먼저 가진 녀석이 자기 namenode를 기동시키도록 만들었었다. 그 상태 관리는 SCXML이라는 오픈소스를 이용해서 했었고 FS image와 edits log를 위해서는 NFS를 썼다. 어찌 보면 지금의 ZKFC와 유사한 것 같다.
namenode 이중화
namenode는 Active와 Standby로 구성된다. Active namenode는 현재 datanode 및 client가 대화하는 상대이고 Standby namenode는 Active가 죽으면 그 역할을 대신하기 위해 떠 있다. 다만 Secondary namenode가 수행하던 checkpoint 기능을 Standby namenode가 대신 수행한다. 즉, edits log를 가지고 FS image를 만드는 역할을 Standby namenode가 수행한다.
QJM(Quorum Journal Manager)
Hadoop만을 위해서 만들어진 것이다. 통상 3개의 QJM이 동시에 edit log를 작성한다. Quorum이기에 3 노드 중 2 노드가 찬성 하면 맞는 거다. 별도의 프로세스가 기동된다. 하지만 작아서 namenode, resource manager 등과 같이 띄워도 무방하다. hadoop의 master node들은 다들 하는 일이 별로 없다.
Conventional Shared Storage
edit log와 FS image를 위한 공용 스토리지를 말한다. 이렇게 구성하면 namenode 2대와 별도로 안정성이 보장되는 shared storage가 있어야 한다. 아주 오래된 방법이긴 하나 구성이 간단해서 좋긴하다.
ZKFC(Zookeeper Failover Controller)
zookeeper의 'ActiveStandbyElectorLock(ephemeral)'와 'ActiveBreadCrumb(persistent)' 노드를 만들어 놓고 자신이 관리하는 namenode가 active임을 명시한다. haadmin으로 failover test를 하면서 이 값을 모니터링 하면 바뀌는 것을 확인할 수 있다.
Fencing Methods
간단하게 sshfence를 사용할 수 있다. 아니면 임의의 shell file을 실행시킬 수도 있다. sshfence를 이용하려면 상호 비번 없이 ssh가 가능하게 뚤어 놓자. 이때 주의할 것은 namenode 서버 모두에 반드시 fuser가 설치되어 있어야 한다는 것이다. sshfence는 내부적으로 상대 namenode의 namenode process를 죽이는데 이때 fuser를 사용한다.
댓글 없음:
댓글 쓰기