Taste of Tech Topics

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

StormのプロセスをDaemon化してみます(その1

こんにちは。kimukimuです。

これまでStormの関連プロセス(ZooKeeper、Nimbus、Storm UI、Supervisor)は
このブログにおいては手動で起動していましたが、
それだとプロセス管理等も出来ないですし、
ログアウトした時にプロセスが落ちる・・・等といった問題も残ります。

なので、今回からはStormの各プロセスをDaemon化する手順をまとめてみます。

1.Twitterにおいてはどういう風にプロセス管理されているの?

storm-userメーリングリストにおいては「daemontools」を使用しているという情報がありました。
#メーリングリストの「stop/start all daemons」というスレッドにおいて。

ですが、この「daemontools」、下記のような事情があり微妙に不便です。

  • ソースコードで公開されているため、パッケージ管理配下に入れにくい
  • 管理コンソール等は無く、全てコマンドライン

そのため、まずは上記の2つが揃っている「Monit」を導入して
Stormプロセスを管理下に入れられるかを確認してみます。

2.Monitって何?

一言で言うと、「デーモン/サービス監視プログラム」です。
異常をきたしたサービスを自動的に再起動したり、
異常発生時にメール通知したり特定のコマンドを実行させることができます。
また、WEBインターフェースも内蔵しており、
他ホスト上のブラウザからデーモンの状態確認や手動での停止/起動が可能です。

そんなわけで、毎回ログインして確認するのが大変なものぐさにとっては良さそうに見えるプログラムです。

3.Monitのインストール

インストール自体はyumで可能なのですが、
これはCentOSのデフォルトのリポジトリには存在しません。
そのため、rpmforgeをリポジトリに追加する必要があります。

■rpmforgeの追加

// リポジトリの追加
[root@hyperion ~]# yum install yum-priorities
[root@hyperion ~]# yum install yum-plugin-priorities
// リポジトリ設定ファイルの編集
[root@hyperion ~]# vi /etc/yum.repos.d/CentOS-Base.repo
 → 各セクションの末尾に「priority=1」を追加
// GPGキーをインストール
[root@hyperion ~]# wget http://apt.sw.be/RPM-GPG-KEY.dag.txt
[root@hyperion ~]# rpm --import RPM-GPG-KEY.dag.txt
// rpmforge-releaseをインストール
[root@hyperion ~]# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-1.el6.rf.x86_64
[root@hyperion ~]# rpm -ivh rpmforge-release-0.5.2-1.el6.rf.x86_64.rpm
// yumをアップデート
yum -y update rpmforge-release

これでrpmforgeがリポジトリに追加され、rpmforgeからmonitがインストール可能となります。
■Monitインストール

[root@hyperion ~]# yum install monit

・・・リポジトリ追加するとあっさり終わりますね^^;

4.Monitの初期設定

とりあえず、Webコンソールを外部から接続可能に設定します。
「/etc/monit.conf」の下記の場所を編集します。
#allow localhostの行は削除します。

set httpd port 2812 and
    use address 192.168.0.203  # // Webコンソールのアドレスを設定
    allow admin:monit          # require user 'admin' with password 'monit'
    allow @monit               # allow users of group 'monit' to connect (rw)
    allow @users readonly      # allow users of group 'users' to connect readonly

その後、Monitのサービスを起動します。

[root@hyperion ~]# service monit start
Starting monit: Starting monit daemon with http interface at [192.168.0.203:2812]
[  OK  ]

起動が完了したら、ブラウザから「http://192.168.0.203:2812」にアクセスし、
admin/monitを入力してログインします。すると・・・・

こういう風にWebコンソールが表示されました。
Stormのサービスもこの一覧に追加して操作できればうれしいですね!

5.Stormのサービス化ってどうやるの?

特に特殊なことをするわけでもなく、
/etc/init.d用のサービス操作スクリプトを書いてサービス化を行います。

スクリプト自体は極々普通のシェルのため、地道に書きますか・・・
と思ったのですが、つい数日前に「StormのRPMパッケージプロジェクト」が公開されました。
そのため、このプロジェクトの内容を用いてサービス化を行う方針で行きます。

では、実際に次回以降サービス化/Monitへの登録が出来るかを試してみますね。