Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Twitter Stormクラスタを構築します(その1


こんにちは。kimukimuです。

何回かTwitterStormの記事を投稿してきましたが、
ローカル環境での実行ですとやはり限度があるため、
分散環境で実行可能なStormクラスタを構築して検証します。

ホストやゲストのマシンスペック、OS等は以前の投稿を参照してください。

ちなみに、OSやStormのバージョン等は下記の通り以前からバージョンアップしています。

ゲストマシン(VirtualBoxの上に構築、1マシン辺りの性能)
  • OS:Centos 6.0 (64bit) → Centos 6.2 (64bit)
  • カーネルバージョン:2.6.32
  • CPU:1CPU
  • Memory:2048MB
  • HDD:128GB
  • インストールStormバージョン:0.60 → 0.70-rc

1.まずは仮想マシンを増やしてネットワークを組んでみます

なにはともあれ、仮想マシンが複数ないとはじまりません。
そのため、VirtualBox上の仮想マシンをコピーします。

幸い、VirtualBoxでは「clone」を実行することで仮想マシンは簡単に増やすことができます。

コピー先の仮想マシン名を入力します。
今回はお互いがネットワーク的に通信する必要があるため、
MACアドレスの際割り振りもONで実行します。

別マシンの扱いになるため、完全クローンで進めます。

その後、しばらく待つと仮想マシンがコピーされます。

まずは今回は仮想マシン3台を用意し、下記の構成でStormを動作させます。
あ、マシン名は完全に趣味ですのでお気になさらず^^;

2.Stormクラスタ1台をまずは設定します

・・・と、上に3台のマシンを書いてしまったんですが、
そもそもStormの1台構成で動かなければ3台構成もないため、
まずは下記のように1台にNimbus/Zookeeper/Supervisor/Workerを全て
集約する構成を取ってみます。

3.Stormの環境設定をします

まず、前提としてStorm環境構築 第1回第2回第3回を実施し、
Stormの前提ソフトウェアのインストール、及びStormの展開は終わっているものとします。
#ただし、Stormのバージョンのみ0.60ではなく、0.70rcとします。

Stormの設定ファイルは「【Stormインストールディレクトリ】/conf/storm.yaml」にあります。
Storm Wikiを参考に、設定を書いていきます。

まず、初期の内容は下記のようになっています。

/usr/local/storm/conf/storm.yaml
########### These MUST be filled in for a storm configuration
# storm.zookeeper.servers:
#     - "server1"
#     - "server2"
#
# nimbus.host: "nimbus"
#
#
# ##### These may optionally be filled in:
#
## List of custom serializations
# topology.kryo.register:
#     - org.mycompany.MyType
#     - org.mycompany.MyType2: org.mycompany.MyType2Serializer
#
## Locations of the drpc servers
# drpc.servers:
#     - "server1"
#     - "server2"

今回設定する必要がある項目は下記の3項目です。

      • storm.zookeeper.servers(Zookeeperのサーバ一覧)
      • nimbus.host(Nimbusが動作するホスト)
      • storm.local.dir(Stormをインストールしたローカルディレクトリ)

とりあえず、Zookeeperは1プロセス、Nimbusもhemera上のため、
設定は下記のようになります。

/usr/local/storm/conf/storm.yaml
########### These MUST be filled in for a storm configuration
storm.zookeeper.servers:
  - "192.168.0.101"

nimbus.host: "192.168.0.101"

storm.local.dir: "/usr/local/storm"

4.OSの設定を行います

これで後は起動すればOK・・・と思いきや、
このままだとFirewallに遮断されて色々つながりません。
加えて、hostsにサーバとIPアドレスの対応が必要です。

そのため、下記のようにシステムメニューからFirewallの設定を行います。

後ではまるのが厄介なため、Stormで使いそうなポートは
軒並みFirewallによる遮断を解除することにします。

解除が必要なポート番号は下記の4個です。

      • 2181(Zookeeperの使用するポート)
      • 6627(NimbusがTopologyのコミットを待ちうけるポート)
      • 6700-6710(SupervisorがWorker用のSlotとして確保するポート)
      • 8080(StormUIを表示するためのポート)

Firewallの設定が終わったら、hostsに下記の内容を追記します。

/etc/hosts
192.168.0.101 hemera
192.168.0.102 aither
192.168.0.103 charon

5.Stormクラスタ起動!

では、アプリケーションの設定と、OSの設定が完了したため
いよいよStormを起動します。

起動の際、やるべきことは下記の4点です。

      • Zookeeperの起動
      • Nimbusの起動
      • SuperVisorの起動
      • Storm UIの起動

順に起動していきます。

> zkServer.sh start
 → ★Zookeeperの起動★
> /usr/local/storm/bin/storm nimbus &
 → ★Nimbusの起動★
> /usr/local/storm/bin/storm supervisor &
 → ★SuperVisorの起動★
> /usr/local/storm/bin/storm ui &
 → ★Storm UIの起動★

これで、Stormクラスタの起動は完了です。
確認のため、jpsコマンドで内容を見てみましょう。

> jps -l
2749 backtype.storm.daemon.supervisor ★supervisor★
2797 backtype.storm.ui.core ★Storm UI★
2579 org.apache.zookeeper.server.quorum.QuorumPeerMain ★Zookeeper★
2638 backtype.storm.daemon.nimbus ★Nimbus★

実際に、プロセスが起動していますね。
次に、Storm UIの表示確認を行います。
アドレス「http://192.168.0.101:8080」にアクセスすると、下記のページが表示されます。
#まだTopologyを起動していないので、有意な情報はありませんね^^;

これで、Stormクラスタの設定は完了です。
次回は実際にTopologyを流し、動作を確認していきますね。