このプログラムはディスク(主に共有ディスク)の状態を監視するものです。
pingdによるネットワーク監視をディスクに監視に応用しました。
作成、テストはHeartbeat2.1.3, RHEL 5.1で行っています。他の環境でのテストは行っていませんので、問題があれば linux-ha-japan@lists.souceforge.jp にご報告ください。
バイナリファイル(32bit) --- diskd-1.00-i386.zip (5.6 KB) [md5sum: bde1e7d1c975c744c9fea2c47a90228d]
バイナリファイル(64bit) --- diskd-1.00-x86_64.zip (6.2 KB) [md5sum: 57a6513d76064d6b0d4887a1931de07f]
ソースファイル --- diskd-1.00-source.tar.gz (5.0 KB) [md5sum: 262288898e91a8125b53855e829cdca6]
バイナリファイルのインストール
RHEL5用(32bit, 64bit環境用)のバイナリファイルを用意しています。環境に合ったファイルを展開し、diskdを所定のディレクトリに配置してください。
以下の実行例は64bit環境です。32bit環境では/usr/lib/heartbeatになります。
# cp diskd /usr/lib64/heartbeat/.ファイルの実行権限、オーナを適切に変更してください。
# chmod 755 /usr/lib64/heartbeat/diskd # chown root:root /usr/lib64/heartbeat/diskd
ソースからのインストール
現在、diskd単体のmakefileは用意していません。Heartbeat本体と一緒にmakeしてください。
$ tar xzvf heartbeat-2.1.3.tar.gz $ tar xzvf diskd-1.00-source.tar.gz
$ cd heartbeat-2.1.3 $ cp ../diskd-1.00-source/diskd.c tools/.
$ patch -p0 < ../diskd-1.00-source/tools_Makefile.am.patch patching file tools/Makefile.am $ patch -p0 < ../diskd-1.00-source/tools_Makefile.in.patch patching file tools/Makefile.in
$ ./ConfigureMe configure --enable-snmp_subagent \
--with-group-id=90 --with-ccmuser-id=90 2>&1 | tee configure.log
$ make 2>&1 | tee make.log install
バイナリファイルはtools/.libs/diskd に作成されています。
diskdだけをインストールする場合は上のバイナリファイルのインストールを参照してください。
Heartbeat全体をインストールする場合はmake installでdiskdもインストールされます。
-N <device_name> :アクセスするデバイス名。必須項目。
-i <intarval>:ディスクアクセスする間隔。デフォルト:30秒 指定可能範囲:1~3600秒
-a <attribute>:status内の属性名。デフォルト:diskd
-t <timeout>:タイムアウト デフォルト:5秒 指定可能範囲:1~3600秒
-r <retry>:ディスク確認時の内部のリトライ回数。デフォルト:1回 指定可能範囲:0~10 retry=2とすると、最大3回の確認を行うことになる。
-I <retry_interval>:リトライする場合のリトライ間隔。デフォルト:5秒 指定可能範囲:1~3600秒
respawn root /usr/lib64/heartbeat/diskd -N /dev/sdx -a diskcheck_status -i 10
==略==
<constraints>
==略=
<rsc_location id="rul_DK_dsc" rsc="grp_DB2">
<rule id="prefered_rul_DK_dsc" score="-INFINITY" boolean_op="and">
<expression attribute="diskcheck_status" id="dkstatus1" operation="defined"/>
<expression attribute="diskcheck_status" id="dkstatus2" operation="eq" value="ERROR"/>
</rule>
</rsc_location>
==略==
</constraints> 共有ディスク排他制御等で使用している、マウントして使わないディスクパーティションを監視対象として指定する場合にはその情報(たとえば/dev/sdf5)
レベル |
出力内容 |
意味 |
出力関数 |
err |
Could not send update |
更新をattrdに送信できなかった。 |
send_update |
err |
permission denied. diskd shuld be execute by root. |
rootで本プログラムが実行されていない |
main |
err |
Argument code 0<arg> (<arg>) is not (?yet?) supported |
実装されていないコマンドライン引数が指定された |
main |
err |
non-option ARGV-elements: <arg> |
必要なオプションが指定されていない |
main |
err |
attrd registration failed |
attrdに登録できなかった |
main |
err |
Could not allocate memory |
メモリの確保ができなかった |
main |
err |
Could not open device <devicename> |
指定されたデバイスがオープンできない |
diskcheck |
err |
ioctl error, Could not flush buffer |
ioctlにてバッファをフラッシュしようとしたが失敗した |
diskcheck |
err |
Could not read from device <devicename> |
read関数で読み込みに失敗した。 |
diskcheck |
err |
select failed on device <devicename> |
select関数でfdを監視していたが、エラーとなった |
diskcheck |
err |
select timeout on device <devicename> |
select関数でfdを監視していたがタイムアウトとなった |
diskcheck |
warn |
Error(s) occurred in diskcheck function. |
diskcheck関数でなんらかのエラーが検出された |
diskcheck |
warn |
read function return errno:EAGAIN |
read関数にて読み込みを行ったがEAGAINが返却された |
diskcheck |
warn |
non-defined status, new_status = <num> |
規程されていないstatusが指定された |
check_old_status |
warn |
disk status is changed, new_status = <STATUS> |
ディスクの状態が変わった時。normal->ERROR / ERROR->normal |
check_old_status |
info |
Exiting |
本関数がコールされ、プログラムが終了段階にあることをログ出力する |
diskd_shutdown |
info |
Starting <system_name> |
diskdを開始し、mainloopに入る |
main |
info |
Exiting <system_name> |
diskdを終了する |
main |
debug |
attrd registration attempt: <times> |
attrdに登録を試みている。回数を含めて表示 |
main |
debug2 |
Diskcheck function start |
ディスクチェック関数が開始されたことを示すデバッグログ |
diskcheck |
debug2 |
Reading form data is OK |
ディスクの正常状態が確認されたことを示すデバッグログ |
diskcheck |
diskd -- バージョン1.00