욱'S 노트

Apache Storm - Setting up a Storm Cluster 본문

Programming/Storm

Apache Storm - Setting up a Storm Cluster

devsun 2015. 10. 27. 19:34

이번 페이지는 스톰 클러스터를 세팅하고 실행시키는 스텝에 대한 개요이다. 만약 AWS환경이라면 storm-deploy 프로젝트를 체크아웃을 해야한다. storm-deploy를 완전히 EC2에 스톰 클러스터를 자동적으로 설정하고 세팅할 수 있다. 또한 당신이 CPU, disk, 네트워크 사용량을 모니터할 수 있도록 Ganglia도 세팅해줄 것이다. 


만약 스톰 클러스터를 세팅하다가 어려움에 빠진다면 트러블슈팅 페이지를 참고하라. 그래도 안되다면 메일링 리스트로 메일하라.


스톰 클러스터를 세팅하는 스텝을 요약해보면 다음과 같다.

  • 주키퍼 클러스터를 셋업하라.
  • Nimbus와 worker 머신에 디펜던시를 인스톨하라.
  • 스톰릴리즈를 다운로드해서 nimbus와 worker 머신에 압축해제하라.
  • storm.yml에 필수 설정을 채워라.
  • 스톰 스크립트을 이용해 데몬을 실행시키고 슈퍼바이저를 선택하라.

Set up a Zookeeper cluster


스톰은 주키퍼를 클러스터 코디네이터로 이용한다. 주키퍼는 메시지를 전송하는데 이용하지는 않는다. 따라서 스톰 클러스터에 이용되는 주키퍼는 매우 조용하다. 싱글 노드 주키퍼 클러스터는 대부분의 경우 충분하나 대량의 스톰 클러스터를 failover 하거나 배포를 한다면 더 큰 주키퍼 클러스터가 필요하다.


주키퍼 배포에 대한 몇가지 주의사항은 다음과 같다.


주키퍼는 fail-fast하고 에러를 만나는 순간 종료하므로 supvervision하에서 Zookeeper를 실행하여야 한다.

주키퍼의 데이터와 트랜잭션 로그를 compact하는 cron을 설정해야한다. 주키퍼 데몬 스스로 이러한 일을 수행하지 않으므로, cron을 설정하지 않는다면 빠르게 디스크 용량이 소진될 것이다.


Install dependencies on Nimbus and worker machines


다음은 nimus와 worker 머신에 스톰이 가지고 있는 디펜던시 인스톨하라.


Java 6

Python 2.6.6


위에 있는 디펜던시의 버젼이 스톰을 테스트한 버젼이다. 다른 버젼의 자바나 파이썬에서는 스톰이 잘 동작할수도 아닐수도 있다.


Download and extract a Storm release to Nimbus and worker machines


다음 스톰 릴리이즈를 다운로드하고 nimus와 각각의 worker 머신에 압축을 풀어라. 


Fill in mandatory configurations into storm.yaml


스톰 릴리이즈는 스톰 데몬을 설정하기 위한 conf/storm.yml 파일을 포함하고 있다. 당신은 여기서 설정의 기본 값들을 살펴볼 수 있다. storm.yaml은 defaults.yaml의 내용을 오버라이드한다. 동작하는 클러스터를 구성하기 위한 몇가지 필수로 설정해야할 요소들이 있다. 


1) storm.zookeeper.servers: 스톰 클러스터를 위한 주키퍼 클러스터의 호스트 리스트이다. 


storm.zookeeper.servers:

  - "111.222.333.444"

  - "555.666.777.888"


만약 주키퍼의 포트가 디폴트 포트가 아니라면 storm.zookeeper.port를 세팅해야 한다.


2) storm.local.dir: Nimbus와 Supervisor 데몬은 jars나 설정들을 저장하기 위한 로컬 디스크가 필요하다. 각 머신에 디렉토리를 생성하고 적절한 퍼미션을 준 다음 아래와 같이 설정을 해야 한다.


storm.local.dir: "/mnt/storm"


3) nimbus.host: Worker 노드는 topology jars나 설정을 마스터로 부터 다운로드 받기 위해서 다음과 같은 설정이 필요하다.


nimbus.host: "111.222.333.44"


4) supervisor.slots.ports: 각 worker 머신을 위해 얼마나 많은 worker가 동작할지를 지정해야 한다. 각 worker는 메시지를 수신하기 위해 하나의 포트를 이용하고 해당 포트를 사용하기 위해 포트를 열어야한다. 만약 여기에 다섯개의 포트를 정의한다면 이 머신에 다섯개의 worker를 할당하겠다는 것을 의미한다. 기본적으로 6700, 6701, 6702, 6703의 네개의 worker를 위해 할당되어 있다.


supervisor.slots.ports:

    - 6700

    - 6701

    - 6702

    - 6703


Configure external libraries and environmental variables (optional)


만약 외부 라이브러리 또는 커스텀 플러그인의 지원을 받을 필요가 있다면 그러한 jars는 extlib/ 그리고 extlib-daemon/ 디렉토리에 위치시키면 된다. extlib-daemon/ 디렉토리는 데몬(Nimbus, Supervisor, DRPC, UI, Logviewer)에 의해서만 사용되는 jars를 저장하는 곳임을 주의하자. 또한 두가지 환경변수 STORM_EXT_CLASSPATH 그리고 STORM_EXT_CLASSPATH_DAEMON에 의해 외부 클래스 패스를 포함시킬 수 있다.


Launch daemons under supervision using "storm" script and a supervisor of your choice


마지막 스템은 모든 스톰 데몬을 시작하는 것이다. 감독하에 이러한 데몬을 실행하는 것이 매우 크리티컬하다. 스톰은 fail-fast 시스템이며 이것은 예상외의 에러에 직면했을때 프로세스가 종료된다는 것을 의미한다. 스톰은 그러한 경우 안전하게 종료하고 프로세스가 재실행되었을 떄 정확하게 복구할 수 있게 설계되었다. 이것이 스톰이 수행중 상태를 유지하지 않는 이유이다. 만약 Nimbus나 Supervisor를 재시작한다면 수행중인 토폴로지는 어떠한 영향도 없을 것이다. 다음은 스톰 데몬을 실행하는 방법이다.


Nimbus: "bin/storm nimbus" 커맨드를 마스터 머신에서 수행하라.

Supervisor: "bin/storm supervisor" 커맨드를 각 워커 머신에서 실행하라. Supervisor 데몬은 각 머신의 프로세스를 시작하고 종료하는 책임을 가지고 있다.

UI: "bin/storm ui" 커맨드를 수행함으로써 스톰 UI를 실행할 수 있다. UI는 웹브라우저를 통해 http://{nimbus host}:8080으로 접속할 수 있다.


정상적으로 데몬이 수행된다면 데몬은 logs/ 디렉토리에 storm 릴리이즈가 어디에 압축해제 되었는지가 로깅될 것이다. 

Comments