| Works
Pacemakerでフェイルオーバー時にメール送信する
以前も似たような依頼を受けたので、対応のメモです。
PacemakerについてはLinux-HA Japanとかを参照。今回の環境はここで配布されていたRHEL6用パッケージ(pacemaker-1.0.13-1.1.el6.x86_64.repo.tar.gz)をCentOS 6に入れています。構築自体はかなり前に完了していて、既に稼働してました。
クラスタを組んだサーバでフェイルオーバーが発生したということは障害が発生したということなので、何らかの対応を取らねばなりません。とはいえ、そもそもフェイルオーバーが発生したことに気がつかなければなりませんから、通常は監視システムを併用して通知をすると思います。
しかし、今回は諸般の事情でPacemakerの機能で障害時にメール通知できないかという相談でした(将来はちゃんと監視システムを検討するということらしいですが)。
Pacemakerには"MailTo"というリソースエージェントがありますので、今回はこれを使用することになりました。
Pacemakerは既にインストールされていますので、メンテナンス時にリソースエージェント"MailTo"を追加しました。
元のCRM設定を記述したファイルに以下の設定を追記し、"crm configure load update ~"コマンドを実行して設定を反映します。
primitive mailto ocf:heartbeat:MailTo \
params \
email=admin@example.com,operator@example.com \
op monitor \
depth="0" timeout="10s" interval="10s"
これで"MailTo"リソースが切り替わる度にメールが送信されるはずです。
しかし、実際にはメール送信されません。どうもローカルのSMTPを使うようでしたが、そんな準備はしていませんでした。
そこでリソースエージェントがメール送信に使うコマンドを確認してみると、"/usr/lib/ocf/lib/heartbeat/ocf-binaries"ファイルの中に"${MAILCMD:=/bin/mailx}"という記述がありました。
"mailx"コマンドであれば、通常はホームディレクトリの".mailrc"ファイルで転送先SMTPサーバや認証情報を記載できます。
ただし、今回はあくまでリソースエージェントの中だけで使いたいので、以下の方法を取りました。
- 新規ファイルとして"/etc/ha.d/mailrc"ファイルを作成し、メール送信時のパラメータを記述
- リソースエージェントのスクリプト"/usr/lib/ocf/resource.d/heartbeat/MailTo"の最初に変数"export MAILRC=/etc/ha.d/mailrc"を記述し、パラメータを読み込むように変更
"/etc/ha.d/mailrc"の内容は次のような内容です。
# SMTPサーバ
set smtp=smtp://smtp.example.com
# Fromのメールアドレス
set from="pacemaker@example.com"
# SMTP認証情報
set smtp-auth=login
set smtp-auth-user=pacemaker
set smtp-auth-password=password
これで暫定的ですが、Pacemakerのフェイルオーバー時にメール通知されるようになりました。
あとは、早くちゃんとした監視システムを入れてくれるのを願うばかりです。