イベントハンドラとは?
前回の記事で見たように,
イベントハンドラは単純にコマンド実行するだけでなく,
そのため,
イベントは大きく2つに分類
Serfがイベントハンドラを実行するタイミングは,
Serfが強力なのは,
表1 イベントの分類
イベントの分類 | 特徴 | イベントの種類 |
---|---|---|
メンバ管理 | クラスタへのメンバ参加・離脱等のタイミングで自動的に発生するイベント | member-join,member-leave,member-failed,member-update,member-leap |
カスタム | ユーザが任意のタイミングで発生させるイベント | user event,query |
イベントの種類
具体的にSerfが持つイベントの種類を見ていきます。Serfが「どの」タイミングで「何」を実行したいかを決めるのは,
メンバ管理系イベント
「member-」で始まるイベントは,
- 「member-join」
Serfクラスタに新しいメンバが参加(join)したタイミングで発生します。このとき,
クラスタ全体に対して, 新しいメンバがクラスタに参加したことが伝わります。具体的な使い方としては, クラスタ参加のタイミングでChefやPuppetなどの構成管理ツールを使う自動プロビジョニング処理に使えます。他には, パブリック・ クラウド上に自動展開される仮想マシンのホスト名・ IPアドレスの把握や, その情報を元に, 監視設定の自動投入へ応用できます。 - 「member-update」
Serfエージェントが各々に対して設定できるタグを変更するときに発生します。このタグ機能は,
「role=web」のように, 任意のキー=バリューの組み合わせを設定できます。使い方としては, 特定のタグの値に応じて, 任意のコマンドの一斉実行や, プロビジョニング用スクリプトの実行に活用できます。 - 「member-leave」
Serfクラスタからノードが離脱(left)したタイミングで発生します。これは,
Serfエージェントを「Ctrl+C」で中断するなど, 正常に終了される場合です。明示的に停止したとSerfクラスタから判断されるため, 以降はSerfクラスタからのヘルスチェックから除外されます。 - 「member-failed」
Serfクラスタとの通信が途絶した場合や,
Serfエージェントが異常終了した場合に発生します。Serfクラスタからは一時的な障害とみなされるため, 障害後も定期的なヘルスチェックが継続します。デフォルトでは, 30秒です。この間隔は設定ファイル上でパラメータ reconnect_interval
を使い,変更することができます。このイベントは, ロードバランサからの設定除外や, 障害発生時の自動復旧コマンドの実行などに応用できます。また, member-leaveイベントとは違い, あくまで一時的な障害とみなされているため, エージェントとの通信が再開次第, クラスタに自動復帰します。 - 「member-leap」
member-leave
またはmember-failed
イベントによってクラスタから離脱後も,一定期間(標準では24時間)クラスタ内で情報が保持されます。この保持された情報を完全に削除するタイミングで発生するのが, この member-leap
イベントです。クラスタに完全に離脱するとみなされるため,例えば, 監視設定から永続的な設定削除に活用できます。
カスタムイベント
「user event」と「query」イベントは,serf event <イベント名>
やserf query <イベント名>
のように実行します。
- 「user event」(ユーザイベント)
クラスタ上のサーバでコマンドを実行します。特定のサービスの再起動や,
コマンドの実行をしたい場合に手軽に利用できます。 - 「query」(クエリ)
クラスタ上のサーバでコマンドを実行し,
その実行結果を取得して標準出力に表示します。ユーザイベントと異なり, コマンドの処理結果を画面上で確認できます。サーバにログインすることなく, サーバ内の情報を取得できます。
カスタムイベントの特徴として,-rpc-addr=
オプションを指定して,
$ serf event -rpc-addr=192.168.39.3:7373 <イベント名> <ペイロード>