システムが正常に動作しているか監視し、異常発生時にシステムのリセット等を行う「ウオッチドッグ」についてです。
ウオッチドッグでは、定期的にソフトウェアがハードウェアタイマーにアクセスします。
もし、このアクセスが途絶えると、システムに異常が発生したと判断し、リセット等が行われます。
ハードウェアタイマーが無い場合は、softdog と呼ばれるソフトウェア版を利用します。
ただし、ハードウェアタイマーがハードウェアでリセットを実施するのに対し、softdog ではソフトウェアでリセットを実施します。
softdog自体も動作できないような状況下では、リセットがされないので、ハードウェアタイマーがある場合はそちらを使用します。
タイマーの確認
マザーボードでインテル・チップセットを使っている場合、ハードウェアタイマーが利用できます。
rootで lsmod | grep iTCO_wdt を実行し、iTCO_wdt を含む行が表示されれば、ハードウェアタイマーが利用できます。
# lsmod | grep iTCO_wdt iTCO_wdt 7115 0 iTCO_vendor_support 3056 1 iTCO_wdt
無い場合は、ソフトウェア版タイマー softdog を使用します。
root で modprobe softdog 実行後に、lsmod | grep softdog を実行します。
softdog を含む行が表示されれば使用できます。
# lsmod | grep softdog softdog 13319 0
以上で、ハードウェアタイマー iTCO_wdt か、ソフトウェア版タイマー softdog、どちらが使用できるかを確認しておいて下さい。
後ほど、設定でどちらを使用するかを指定します。
パッケージインストール
Linuxでは「ウオッチドッグ」機能を提供するパッケージ watchdog があります。
インストールは下記で行います。
Ubuntu の場合 apt-get install watchdog CentOS の場合 yum install watchdog
設定
タイマーの確認 の箇所で、ハードウェアタイマー iTCO_wdt か、ソフトウェア版タイマー softdog、どちらが使用できるかを確認しました。
どちらのタイマーを使用するかは、/etc/default/watchdog ファイルの watchdog_module 行で指定します。
・ハードウェアタイマーが使用できる場合
/etc/default/watchdog
watchdog_module="iTCO_wdt"
・ソフトウェア版タイマー softdog を使用する場合
/etc/default/watchdog
watchdog_module="softdog"
softdog を使用する場合は、カーネルパニックが発生すると softdog自身も動作出来ない為、softdogによるリセットも起こりません。
そこで、カーネルパニック時に自動起動する設定を行なっておきます。
/etc/sysctl.conf
kernel.panic = 60 kernel.panic_on_oops = 1
設定を反映させます。
sysctl -p
ハードウェアタイマーや、ソフトウェア版タイマーの設定で行った設定を、watchdogへ反映させます。
/etc/init.d/watchdog stop /etc/init.d/watchdog start
なお、/etc/init.d/watchdog reload とすると、/etc/default/watchdog の watchdog_module行で指定したモジュールの反映が行われません。
必ず、上記のように stop した後に start して下さい。
設定後、システム起動時にも自動的に watchdog が起動するようになります。
動作
watchdogパッケージでは、システム起動時の出来るだけ早い時期に、プロセス wd_keepalive が起動します。
システム起動が完了すると、プロセス wd_keepalive が終了し、プロセス watchdog が起動します。
プロセス wd_keepalive , watchdog は、一定時間ごとに、ハードウェアタイマー iTCO_wdt や、ソフトウェアタイマー softdog へアクセスします。
アクセスは、/dev/watchdog を介して行われます。
デフォルトでは、60秒間 /dev/watchdog へのアクセスが滞ると、システムがリセットされます。
ちなみに、softdog で実施されるリセット処理は、下記で紹介した echo b > /proc/sysrq-trigger と同じことが実施されます。
linux強制再起動 - shutdownコマンドでもダメな時の再起動手段 パソコン鳥のブログ
システム停止時には、プロセス watchdog が終了して、代わりにプロセス wd_keepalive が起動します。
これで、ウオッチドッグ機能が動作できます。
設定その2
動作 の箇所の説明で、プロセス watchdog、wd_keepalive の2つが出てきましたが、違いは何でしょうか?
wd_keepalive は、一定時間ごとに、ハードウェアタイマー iTCO_wdt や、ソフトウェアタイマー softdog へアクセスする機能だけです。
一方、watchdog は一定時間ごとにタイマーへアクセスする機能に加えて、システムを監視して異常になったらリブートを行う機能があります。
例えば、ロードアベレージを監視して、高すぎる場合にはリブートさせることが出来ます。
ここで行われるリブートは通常のシステム再起動時と異なり、実施されるリブート手順が簡単になっています。
これは、watchdog がリブートするような、メモリ使用量異常やロードアベレージが高い状況では、通常のリブートでは失敗する可能性が高いからです。
その為、watchdog ではより確実にリブートできるようになっているようです。
以降では、watchdog で監視できる項目とその設定について説明します。
設定後は、/etc/watchdog.conf に記述し、次のコマンドで watchdogへ反映させて下さい
/etc/init.d/watchdog stop /etc/init.d/watchdog start
・ロードアベレージ
指定したロードアベレージ以上になると、異常と判定します。
1,5,15分平均のロードアベレージを下記書式で指定します。
max-load-1 = 40 max-load-5 = 30 max-load-15 = 20
・ネットワークインタフェースでのパケット受信
指定したネットワークインタフェースでパケットを受信していないと、異常と判定します。
下記書式で指定します。指定は、複数行出来ます。
interface = eth0
パケット受信のチェックは、デフォルトでは1秒ごとに行われます。
この監視項目では、チェック間隔をデフォルトの1秒から長くした方が良いです。
チェック間隔は /etc/watchdog.conf で下記のように秒数で指定して下さい。
/etc/watchdog.conf
interval = 3
間隔が短いと、異常と判断されやすくなります。
但し、間隔が長過ぎると、異常に気付くまでに時間がかかることになりますので、バランスをとって下さい。
・ping の疎通
指定した宛先アドレスに ping が通らないと、異常と判定します。
宛先をを下記書式で指定します。指定は、複数行出来ます。
ping = 192.168.1.100
・メモリ使用量
メモリの空き容量が一定サイズ以下で、異常と判定します。
空き容量はページ数で下記書式で指定します。
1ページは 4096 Bytes なので、下記の例では 4096Bytes × 10000 = 約40MB を指定しています。
min-memory = 10000
なお、「メモリの空き容量」は、/proc/meminfo の結果の MemFree:の行と、SwapFree:の行の合計です。
watchdog の-ソース memory.c にて確認しました。
参考
ウォッチドッグタイマで自動的に再起動する – いますぐ実践! Linuxシステム管理 / Vol.198
Linux/softdog(watchdog) – PukiWiki Plus!
仙石浩明の日記: ハードウェア・ウォッチドッグ・タイマー iTCO_wdt のススメ
kernel – カーネルパニック時に自動で再起動させる – Qiita
watchdog(8): software watchdog daemon – Linux man page
Linux Watchdog
コメント