CLUSTERPRO Xでアクティブなサーバ名を取得してイベントログに記録する
クラスタ化されたDBサーバが正しく運用しているかどうかを監視するために、Active-Standbyのクラスタ構成の、どのサーバが現在アクティブなのかをチェックする必要があります。
何か障害が発生してフェイルオーバーした時にはイベントログに記録されますが、それを見落とすとわかりません。
またサーバの起動時(クラスタ起動時)にもアクティブなサーバの名前がイベントログに記録されますが、OS起動直後ではそれを監視するサービスの起動に時間がかかったりして、正しく見張れないこともあります。
定期的にイベントログに、アクティブなサーバ名が記録されればいいのですが、そのような機能はCLUSTERPRO Xにはありませんでした。
しかしCLUSTERPRO Xのコマンドで実現可能です。
例ではWindows Server 2003を想定し、eventcreateコマンドでイベントログを書き込んでいます。
CLUSTERPRO Xでアクティブなサーバ名をイベントログに記録するバッチ (Windows Server 2003)
CLUSTERPRO-CHECK.bat |
@echo off title CLP-CHK color 3f IF "%1"=="" GOTO ERR01 FOR /F "usebackq tokens=1,2,3,4,5,6" %%i in (`clpstat -s --grp "%1"`) do (echo CLUSTERPRO X %%i %%j %%k %%l %%m %%n %date% %time%) FOR /F "usebackq tokens=1,2,3,4,5,6" %%i in (`clpstat -s --grp "%1"`) do (EVENTCREATE /T INFORMATION /L APPLICATION /ID 9999 /SO CLP-CHK /D "CLUSTERPRO X %%i %%j %%k %%l %%m %%n %date% %time%") GOTO ENDJOB :ERR01 echo バッチ実行時にフェイルオーバーグループ名を引数で指定してください pause :ENDJOB |
FORコマンドの部分は折り返されているので要注意。
タスクスケジューラなどで定期的に実行すれば、アクティブなサーバ名が記録できる。
(写真1)バッチファイル実行時のコマンドプロンプト
(写真2)バッチファイル実行後のイベントビューア
clpstatコマンドはCLUSTERPROで様々な状態を表示するコマンドです。
clpstat -gで、フェイルオーバークラスタのグループ名と、アクティブなサーバ名が表示されます。
clpstat -s --grp <グループ名>では、グループ名とサーバ名が1行で表示されます。
そのためWindowsのイベントログに簡単に書き込むことが出来ます。
上記の例ではバッチファイルの起動時に、引数としてグループ名を渡し、汎用的にしています。
グループ名を自動的に取得して、自動的にバッチに渡すことが出来ればいいんですが、そこまではまだできていません。
@yfunada さん、サンクス!!