HomeBlogGuestbookLab 

JDM's Blog

온갖 테스트 결과가 기록되는 이곳은 JDM's Blog입니다. :3

아파치 스톰 클러스터 구축(Apache Storm Cluster Setup)

Apache Storm Cluster Setup

스톰 클러스터를 구축해 봅시다. 이 포스트는 클러스터 구축에만 초점이 맞춰져 있습니다. 용어에 대한 설명은 간략하게 하거나 또는 없을 수 있습니다. :)

Prepare to library for Storm Cluster Setup

우선 다음 목록에 있는 프로그램들을 설치해야 합니다.

  • Java 6 이상(가능하다면 8 이상 추천)
  • Python 2.6.6 이상

위 프로그램들은 버전을 먼저 확인해보고 설치 되어있다면 지나갑니다. 다만 파이썬은 버전에 민감할 수 있으니 문제가 생기면 파이썬 버전을 맞춰봅시다.

Zookeeper Cluster Setup

다음은 주키퍼 클러스터를 구축합니다. 구축 방법은 Zookeeper Cluster(Multi-Node) 링크를 확인하세요.

Storm Cluster Hosts

주키퍼 클러스터 구축까지 끝났으면 스톰 클러스터를 구축해봅시다. 다음과 같은 호스트들을 준비하고 진행합니다. 이번 포스트에서는 호스트 3대를 기준으로 구축합니다.

  • storm-1.jdm.kr - nimbus(master)
  • storm-2.jdm.kr
  • storm-3.jdm.kr

Download Apache Storm Package(Each node)

스톰 패키지를 다운로드 받아야 합니다. 모든 노드에서 진행합니다. 저는 0.10.0 버전으로 진행했습니다.

$ wget http://apache.mirror.cdnetworks.com/storm/apache-storm-0.10.0/apache-storm-0.10.0.tar.gz
$ tar -xzf apache-storm-0.10.0.tar.gz
$ ln -s apache-storm-0.10.0 storm
$ cd storm

Storm Configuration(Each node)

모든 노드에 스톰 패키지를 다운로드 받았다면 환경설정을 해봅시다. 이부분 역시 모든 노드에서 진행합니다. 참고로 _storm_root_이 뜻하는 것은 스톰 패키지가 존재하는 루트 디렉토리입니다.

수정할 파일은 _storm_root_/conf/storm.yaml 파일입니다.

$ cd _storm_root_/conf
$ vi storm.yaml

파일을 열어 다음처럼 수정합니다.

# storm.yaml
storm.zookeeper.servers:
  - "zoo-1.jdm.kr"
  - "zoo-2.jdm.kr"
  - "zoo-3.jdm.kr"

nimbus.seeds: ["storm-1.jdm.kr"]

Start Storm Cluster

환경 설정까지 끝났다면 이젠 구동시켜야 할 차례입니다. 호스트 중에서 1번 호스트storm-1.jdm.krnimbus(master)가 옆에 있었다는 것 기억하시나요?

이번 포스트에서 1번 호스트는 님버스nimbus 서버의 역할도 같이 합니다. 자세한 내용은 스톰 문서를 확인하세요.

Start nimbus(first node only)

님버스는 마스터 노드에서 실행하는 데몬입니다. 다음과 같은 커맨드를 1번 노드에서만 진행합니다.

$ nohup _storm_root_/bin/storm nimbus >> nimbus.log 2>&1 &

Start supervisor(Each node)

슈퍼바이저는 워커 노드에서 실행하는 데몬입니다. 각각의 노드에서 다음과 같은 커맨드로 기동합니다.

$ nohup _storm_root_/bin/storm supervisor >> supervisor.log 2>&1 &

Start storm UI(first node only)

스톰 UI를 기동하는데 1번 노드에서만 진행합니다. 스톰 UI라는 것은 스톰 클러스터를 모니터링할 수 있게 도와주는 시각화 도구입니다. 웹으로 확인 할 수 있으므로 편리합니다.

$ nohup _storm_root_/bin/storm ui >> ui.log 2>&1 &

http://storm-1.jdm.kr:8080/index.html에 접속해서 스톰 클러스터의 전체적인 상황을 확인 할 수 있습니다.

TIP. 스톰 UI에서 확인할 수 있는 정보를 REST API로도 확인할 수 있습니다. https://github.com/apache/storm/blob/master/docs/documentation/ui-rest-api.md를 참조하세요.

Start Logviewer(Each node)

로그뷰어Logviewer는 스톰 UI에서 로그 파일을 바로 읽어볼 수 있도록 해주는 플러그인 같은 역할을 합니다.

$ nohup _storm_root_/bin/storm logviewer > logviewer.log &

Start Example Topology(first node only)

예제로 주어진 토폴로지Topology를 실행시켜 봅시다. 1번 노드에서 진행합니다. 아래와 같은 방법으로 구동시켜볼 수 있습니다

# 예제 토폴로지 jar를 님버스에 업로드하는 과정입니다.
$ _storm_root_/bin/storm jar ../examples/storm-starter/storm-starter-topologies-0.10.0.jar storm.starter.RollingTopWords production-topology remote

TIP. 토폴로지를 배포할때에 님버스 노드에서만 진행해도 클러스터로 설정된 다른 노드들로 전파가 됩니다.

스톰 UI에서 Topology summary 부분에 production-topology 이름의 토폴로지가 있다면 제대로 실행된 겁니다. 더 자세한 정보는 아래 위치의 README 파일을 읽어보시면 됩니다.

$ cd _storm_root_/examples/storm-starter

Kill Example Topology(first node only)

토폴로지 프로세스를 내리는 방법은 많이 있지만 대표적으로 스톰 UI에서 Kill 버튼으로 내리던지 아니면 커맨드 라인으로 실행합니다.

$ _storm_root_/bin/storm kill production-topology 1

물론 Kill 외에도 다양한 커맨드가 존재합니다. 자세한 내용은 http://storm.apache.org/documentation/Command-line-client.html를 확인하세요.

Closing Remarks

간단하게 스톰 클러스터 구축에 대해 알아봤습니다. :)