前回の続きでSerfを触ってる。前回のエントリを見て、@zembutsuさんが作ってくれたserf-muninが素晴らしかったので、弊社仕様に若干修正して導入した。
Serf-muninが自動生成、削除するファイルは/etc/munin/conf.d/
配下で、
既存のmunin環境(/etc/munin/munin.conf
とか)を壊すことがないと思うので、すぐに試すことが出来ると思う。
導入環境は
- CentOS 6.4
- Serf 0.2.0
- munin-2.0.17
で、Serfの起動コマンドや生成されるmuninのconfの関係上、Serf 0.2.0とmunin 2.0以上は必須条件になります。
serf-muninの仕組みの説明
1. web server1がmuninサーバと同じクラスタにserf joinしてくる
2. Web server1がクラスタにjoinしてきたので、member-joinイベントが発生
- muninサーバで
member-join
イベントで指定しているスクリプトが実行される - muninサーバの
/etc/munin/conf.d/web001.foobar.conf
という設定ファイルが追加され、ポーリング対象のサーバが追加される。 - Web Serve1がmuninのグラフに追加される
3. DB server1がクラスタにjoinしてきたので、member-joinイベントが発生
- muninサーバで
member-join
イベントで指定しているスクリプトが実行される - muninサーバの
/etc/munin/conf.d/db001.foobar.conf
という設定ファイルが追加され、ポーリング対象のサーバが追加される。 - DB Serve1がmuninのグラフに追加される
4. Web server1が突然の死。member-leaveイベントが発生
- muninサーバで
member-leave
イベントで指定しているスクリプトが実行される - muninサーバの
/etc/munin/conf.d/web001.foobar.conf
という設定ファイルが削除され、ポーリング対象のサーバから削除される。 - Web Server1がmuninのグラフから削除される
もしWeb Server1が復活したら、勝手にクラスタに参加してくるので、再度ポーリング先に自動追加される。
実際の設定
muninサーバ側の設定
SERF_ROLE
はmuninのconf内でgroupに利用するために設定してます。
muninサーバにはmanage
というroleを設定してます。
作業の流れは
- Serfをダウンロードして、
/usr/local/bin/serf
に設置 - 自動生成されるconf用ディレクトリ
/etc/munin/conf.d
を作成 - serf join/leaveイベント発生時に実行されるスクリプト
serf-munin.sh
を作成し、設置 - Serfの起動スクリプトを作成
- Serfの起動
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
|
この状態で既に/etc/munin/conf.d/${HOSTNAME}.conf
というファイルが出来上がって、
1 2 3 |
|
というような内容になっている。
munin-node側の設定
MUNIN_SERVER
にmuninサーバのIPもしくはfqdnを設定。MUNIN_SERVER
で指定したサーバに
serf join
しに行きます。
SERF_ROLE
はmuninのconf内でgroupに利用するために設定してます。
例ではweb
というroleを設定しており、実環境でもweb
、db
、backup
などとroleを設定してます。
作業の流れは
- Serfをダウンロードして、
/usr/local/bin/serf
に設置 - Serfの起動スクリプトを作成
- Serfの起動
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
この状態で既に/etc/munin/conf.d/${HOSTNAME}.conf
というファイルが出来上がって、
1 2 3 |
|
というような内容になっていて、
1
|
|
でSerfと止めると、confが削除されるのが分かる。
Serf 0.2.0になって、serf agent join="IP"
みたいなことが出来るようになっていて起動スクリプトもシンプルになった。
やってることは非常に単純でSerfの設置、スクリプト設置だけなのでpuppet化も非常に楽。
Serf 0.2.0の変更点は@zembutsuさんのブログが非常に参考になります。素晴らしいエントリ!!
担当しているサービス用にインストール用のwrapperスクリプトを公開しているので、参考にどうぞ。
Serf 0.2.0から暗号化も可能になったので、これでサーバ起動して、Puppet流せば、 新規サーバのmuninグラフが勝手に出来上がる仕組みが出来上がった。