読者です 読者をやめる 読者になる 読者になる

Taste of Tech Topics

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

Stormを簡単にインストールする方法は?(その1

Storm


こんにちは。kimukimuです。
#今回はDempsyではなく、Stormです^^;

最近思うこととして、
クラスタを簡単に構築できなければ分散システムは使えない』というのがあります。
・・・ええ、Stormの環境構築って地味に手間がかかるものでして(汗

そんなわけで、Stormを簡単にインストールするために、
インストーラ(もどき?)を作れるか試してみます。
一部であっても手間が減るのは確かですしね。

尚、以後の記述では基本的に下記の性能を持つ物理サーバマシンを使用しています。

ビルド環境マシン
  • OS:Centos 6.2 (64bit)
  • カーネルバージョン:2.6.32
  • CPU:Intel Atom D525
  • Memory:4GB
  • SSD:120GB

1.インストーラ構築に必要な要素は?

以前の環境構築の時の投稿を振り返ってみますと、Storm構築に必要な要素は下記です。

  • Zookeeper
  • ZeroMQ 2.1.7
  • JZMQ
  • Java 6
  • Python 2.6.6
  • unzip

その上で、下記の3つについては事前にインストールしておいてください。
でほぼ済むものなので省略します。
・・・そもそも、最近のOSだと最初から入っているケースが多いというのもありますが^^;

そのためインストーラとして必要となるものは最低下記の3つです。

  • Zookeeper
  • ZeroMQ 2.1.7
  • JZMQ

そのうち、ZookeeperについてはStorm開発者のnathanmarzさんがStormのML上で
「Single Zookeeper Nodeで10台〜20台のStormクラスタマシンが賄える」という意見を述べていますので、
クラスタマシンを量産するという観点においては
最悪Zookeeperは落としていいのかもしれません。
Google Group「Storm」の2012/04/19に開始している「Performance」というスレッドにて

そのため、まずはZeroMQとjzmqをRPMパッケージ化して
ローカルでビルドすることなくインストールすることを目指します。

2.rpm作成のための環境構築

ZeroMQ 2.1.7と、JZMQのソースtarballを確認したところ、
幸い、下記の通りspecファイルは存在する構成になっていました。

■ZeroMQ 2.1.7

[root@hyperion zeromq-2.1.7]# ls
AUTHORS         MAINTAINERS  acinclude.m4  configure     perf
COPYING         Makefile.am  aclocal.m4    configure.in  src
COPYING.LESSER  Makefile.in  autogen.sh    doc           tests
ChangeLog       NEWS         builds        foreign       version.sh
INSTALL         README       config        include       zeromq.spec

■jzmq

[root@hyperion jzmq]# ls
AUTHORS         ChangeLog    README       builds        jzmq.spec  src
COPYING         Makefile.am  README-PERF  configure.in  perf       test
COPYING.LESSER  NEWS         autogen.sh   debian        pom.xml

そのため、rpmbuildコマンドでrpmファイルは作成可能・・・ということになります。
なので、まずはrpmbuild用の環境を整えます。

■ビルド環境構築

// rpm-buildコマンドインストール
# yum install rpm-build
// 開発ツール/ビルドツール関連インストール
# yum groupinstall "Development Tools"
# yum install glib2-devel
// rpmbuild用のユーザを作成
# useradd rpmbuilder
// rpmbuild用ユーザのパスワードを設定し、rpmbuilderユーザに変更
# passwd rpmbuilder
# su - rpmbuilder
// rpmbuild用のディレクトリを作成
> mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
// rpmbuild用の環境変数を設定(下記参照)
> vi ~/.rpmmacros
// JAVA_HOMEを環境変数に追加
echo "export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk.x86_64" >> ~/.bashrc

■.rpmmacros

%_topdir %(echo $HOME)/rpmbuild
%debug_package %{nil}
%_smp_mflags  -j3

・・・と、とりあえずこれで環境構築は終了です。
では実際のrpmパッケージの生成に入りましょう。

3.rpmパッケージ生成

まずはZeroMQのパッケージ生成からです。
あ、もちろん環境変数反映のためにrpmbuilderユーザにはログインしなおしておいてくださいね。

■ZeroMQパッケージ生成

// ディレクトリ移動
> cd /home/rpmbuilder/rpmbuild/SOURCES
// tarballダウンロード
> wget http://download.zeromq.org/zeromq-2.1.7.tar.gz
// rpmパッケージ生成
// ※結構時間かかります。
> rpmbuild -ta zeromq-2.1.7.tar.gz
 → /home/rpmbuilder/rpmbuild/RPMS/x86_64 配下に下記の2ファイルが生成
        −zeromq-2.1.7-1.el6.x86_64.rpm
        −zeromq-devel-2.1.7-1.el6.x86_64.rpm

という形で比較的すんなり生成できました。

同じように、jqmq側の生成も行います。
尚、autogen.shとconfigureを実行しておかないとこちらはjzmq側は生成出来ないようです。
■jzmq

// ディレクトリ移動
> cd /home/rpmbuilder/rpmbuild/SOURCES
// ソースコードダウンロード
> git clone https://github.com/nathanmarz/jzmq.git
// ディレクトリ名称変更
> mv jzmq jzmq-2.1.0
// 事前ファイル生成
> cd jzmq-2.1.0
> ./autogen.sh
> ./configure
> make
// tarball生成
> cd ../
> tar cvpf jzmq-2.1.0.tar.gz jzmq-2.1.0
> rm -rf jzmq-2.1.0
// rpmパッケージ生成
// ※結構時間かかります。
> rpmbuild -ta jzmq-2.1.0.tar.gz
 → /home/rpmbuilder/rpmbuild/RPMS/x86_64 配下に下記の2ファイルが生成
        −jzmq-2.1.0-1.el6.x86_64.rpm
        −jzmq-devel-2.1.0-1.el6.x86_64.rpm

という形で、こちらも生成できました。

最終的にまっさらな環境で確認する必要はありますが、
とりあえず下記の場所にアップしてあります。

jzmq-2.1.0-1.el6.x86_64.rpm
jzmq-devel-2.1.0-1.el6.x86_64.rpm
zeromq-2.1.7-1.el6.x86_64.rpm
zeromq-devel-2.1.7-1.el6.x86_64.rpm

4.後必要なものは?

後必要なものとしては、
yum等のパッケージ管理で検知できるようにするための情報と、
後はZooKeeperのrpm・・となりますね。

ともあれ、続きは次回に。