スマートスタイル TECH BLOG

Galera Cluster の wsrep_notify_cmd 変数について

はじめに

このブログでもしばしば取り上げている Galera Cluster ですが、つい最近 wsrep_notify_cmd というパラメータ変数の存在を知りました。
調べてみると中々に便利そうな機能だったので、早速このブログで紹介したいと思います。

wsrep_notify_cmd とは

端的に言えば、Galera Cluster の各ノードの状態が変化した時に、自動で指定した任意のスクリプトを実行する機能です。

Galeraのノードは安定稼働している間、「Synced」になります。これは、wsrep_local_state_commentステータス変数で確認できます。

このノードのステータスは以下のようなケースで変動します。こうしたイベントをトリガーとして、変数に指定したスクリプトを実行するのが wsrep_notify_cmd の役割です。

  • ノード間のネットワークが切断、または不安定なとき
  • ノードを追加、もしくは削除したとき

wsrep_notify_cmd を活用することにより、以下のような効果が期待できます。

  • ネットワーク障害が疑われる場合に、運用管理者にメールを送信する
  • ノードの状態を逐次ファイルに記録し、想定外の操作が行われていないか監査を行う
  • 障害発生時に自動モニタリング、リカバリスクリプトをキックする

その他の詳細は、以下の公式マニュアルで解説されています。

NOTIFICATION COMMAND

実際に使ってみよう

それでは、さっそく wsrep_notify_cmd を使ってみましょう。上記のマニュアルにスクリプトのサンプルが用意されているので、それを使用します。

1. PXC環境を用意する

お好きな方法で、PXCの3ノード環境を用意してください。

ちなみに、以前弊社のブログ
でも取り上げた dbdeployer が、ついに Percona XtraDB Cluster(以下PXC)にも対応しました。

今回は、この dbdeployer を使って用意したPXCを使用します。

※ 詳しいセットアップ手順は、dbdeployer開発者のブログを参考にしてください

2. スクリプトの準備

本来は全ノードで設定することが望ましいですが、今回はNode3でのみ設定します。まずは、マニュアルに載っているスクリプトを作成します。
ユーザ名やパスワードなど接続情報は適宜変更してください。

3. wsrep_notify_cmd変数の有効化

my.cnfにwsrep_notify_cmd変数を追加します。設定値は上記で準備をしたスクリプトのパスを指定します。最後に設定を有効化するためにノードを再起動します。

wsrepデータベースが作成されていたら、スクリプトは稼働しています。

4. 動作確認

ノードのステータスを変化させるため、Node2を停止します。

この時の動作としては、Node2がクラスタから消えたことをキャッチして my-wsrep-notify.sh が作動、wsrep.membershipテーブルを自動で更新するという流れになっています。そのため、Node2を再起動すると、membership テーブルが再度更新されます。

スクリプトの内容は自由なので、ノードダウン時にアラートを飛ばしたり、他のソフトウェアを起動したりといった動作も可能です。

おわりに

以上、wsrep_notify_cmd 変数について説明しました。機能としてはシンプルですが、実行するスクリプトの内容によって、さまざまな使い方が実現できそうです。もし興味があれば、試してみてください!

Return Top