cloudpack の 自称 Sensu芸人 の かっぱこと 川原 洋平@inokara)です。

はじめに

夜の 9 時に寝たら 1 時過ぎに目が覚めて寝れなくなったので Serf のイベントハンドラを触ってみた。


Serf について

詳しいことは @zenbutsu さんが纏めてくださっているので @zenbutsu さんの qiita 記事ブログは要チェック!


アジェンダと構成

イベントハンドラ

  1. member-join
  2. member-leave

構成

以下のような構成。

[ serf on EC2 ] [ serf on EC2 ]

すんません、アスキーアートで。


準備

serf のインストール

適当なイベントハンドラ

join.sh

/bin/sh

echo "join" > /tmp/join.log
leave.sh

/bin/sh

echo "leave" > /tmp/leave.log

最初に起動する serf ノード(以下、アニキ)

最初に起動した serf ノードに他のノードがジョインすることになる。以下のようにして serf を起動する。

./serf agent -event-handler=member-join=./join.sh -event-handler=member-leave=./leave.sh &

次に起動する serf ノード(以下、舎弟)

最初に起動した serf ノードにジョインする為に最初に起動した serf ノードの IP を指定して serf を起動する。

./serf agent -join ${最初の serf ノード IP} -event-handler=member-join=./join.sh -event-handler=member-leave=./leave.sh &

検証

契を確認

serf members で兄弟の契を確認。

01

どちらとも生きてる。

舎弟がムショ行き

舎弟の serf が突然 leave…

02

当然、アニキのイベントハンドラが動いて /tmp/leave.log には…

leave

が書き込まれる。

舎弟が娑婆へ…

舎弟の serf が復活。当然、アニキのイベントハンドラが動いて /tmp/join.log には…

join

が追記されている。

03

ちなみに…今更気付いたけど join 時って自分自身にも join と認識されてイベントハンドラが動いてた。(serf を起動させると join ってなる)

アニキがムショへ

アニキの serf が leave…悲しいかな舎弟の /tmp/leave.log には…

leave

が記録された(イベントハンドラが動いた)。従来の認識だと舎弟側ってイベントハンドラって使えない(認識されない)ものだと思っていたのでなにげに嬉しい。

ところで…アニキが娑婆へ

アニキは娑婆に戻ってめーりやした…あ、あれ…

04

孤独な状態…

その頃舎弟は…

05

アニキの帰りを健気に待ち続けている状態。

そんな場合には…アニキ側で…

./serf agent -join ${舎弟の IP アドレス} -event-handler=member-join=./join.sh -event-handler=member-leave=./leave.sh

として舎弟側に join する形で兄弟の契は改めて結ぶことが出来た。


兄弟の契はイベントハンドラがポイントに…

  • アニキも舎弟もイベントハンドラを動かすことが出来た
  • イベントハンドラで舎弟がムショに入っても(leave しても)新しい舎弟を立ち上げることが出来そう
  • 新しい舎弟が上がった場合にアニキとどうやって契を交わすかがポイント(AWS の API でタグからアニキの情報を取得するとか)
  • アニキがムショに入った場合(leave しても)も新しいアニキを舎弟側で起動することは出来そう(↑に同じく API で舎弟の情報を得る)
  • serf が起動 = join イベント

元記事は、こちら