このプログラムはディスクの状態を監視するものです。pingdによるネットワーク監視の方式をディスク監視に応用しています。
バージョン 1.10-1 からは、rpmによるインストールが可能になっています。
作成、テストはHeartbeat-2.1.4 で行っています。問題があれば linux-ha-japan@lists.souceforge.jp にご報告ください。
diskdは一定間隔で指定されたディスクにアクセスすることによりディスクの正常性を監視しています。
以下の2種類のディスクアクセス方法があり、オプションによって指定可能です。
diskdは複数のインスタンスを起動することができます。監視対象ディスクが複数ある場合には複数起動するように指定してください。
詳細はオプション、使用方法を参照してください。
以下に、インストール、使用方法を記述します。ここでの記述は64bit環境のものです。32bit環境ではインストールされるディレクトリが異なりますので、環境に合わせて読み替えてください。
本ツールのパッケージ hb-diskd-1.10-1.hb214.x86_64.rpm をダウンロードします。その後、以下のようにrpmコマンドを使ってインストールします。
# rpm -ivh hb-diskd-1.10-1.hb214.x86_64.rpm Preparing... ########################################### [100%] 1: hb-diskd ########################################### [100%]
diskdを起動する際に指定できるオプションを以下に示します。
diskdを使って、ディスクの正常性の監視および、監視結果によりリソースの配置を制御するためにはha.cfとcib.xmlへの設定が必要となります。
例1) readによる監視 : "-N"オプション指定時 respawn root /usr/lib64/heartbeat/diskd -N /dev/sdc -a diskcheck_status -i 10 例2) writeによる監視 :"-w"オプション指定時 respawn root /usr/lib64/heartbeat/diskd -w -a diskcheck_status -i 10 例3) writeによる監視 : "-w"と"-d"オプション指定時 respawn root /usr/lib64/heartbeat/diskd -w -d /tmp/diskd -a diskcheck_status -i 10
(..略..) <constraints> (..略..) <rsc_location id="rul_DK_dsc" rsc="grp_pgsql"> <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>
図1の場合(共有ディスクをreadによる監視、ローカルディスクをwriteによる監視を実施)の設定例を以下に示します。
(..略..) respawn root /usr/lib64/heartbeat/diskd -N /dev/sdc -a diskcheck_status -i 10 respawn root /usr/lib64/heartbeat/diskd -w -a diskcheck_status_internal -i 10
<constraints> (..略..) <rsc_location id="rul_DK_shard" rsc="grp_pgsql"> <rule id="prefered_rul_DK_shard" 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> <rsc_location id="rul_DK_internal" rsc="grp_pgsql"> <rule id="prefered_rul_DK_internal" score="-INFINITY" boolean_op="and"> <expression attribute="diskcheck_status_internal" id="dkstatus_internal1" operation="defined"/> <expression attribute="diskcheck_status_internal" id="dkstatus_internal2" operation="eq" value="ERROR"/> </rule> </rsc_location> (..略..) </constraints>
レベル | 出力内容 | 意味 | 出力関数 |
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 <filename> | 書き込み用ファイルがオープンできない | diskcheck_wt |
err | select failed on file <filename> | select関数でfdを監視していたが、エラーとなった | diskcheck_wt |
err | select time out on file <filename> | select関数でfdを監視していたがタイムアウトとなった | diskcheck_wt |
err | Could not write to file <filename> | write関数で書き込みに失敗した | diskcheck_wt |
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 | failed to remove file <filename> | 書き込み用ファイルの削除に失敗した | diskcheck_wt |
warn | write function return errno:EAGAIN | write関数にて書き込みを行ったがEAGAINが返却された | diskcheck_wt |
warn | select ok, write again | select関数で監視していたfdが書き込み可能となった | diskcheck_wt |
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_wt start | 書き込み用ディスクチェック関数が開始されたことを示すデバッグログ | diskcheck_wt |
debug2 | data writing is OK | 書き込み用ディスクチェック関数により、ディスクの正常状態が確認されたことを示すデバッグログ | diskcheck_wt |
debug2 | Diskcheck function start | ディスクチェック関数が開始されたことを示すデバッグログ | diskcheck |
debug2 | Reading form data is OK | ディスクの正常状態が確認されたことを示すデバッグログ | diskcheck |