sc_watch
コマンドを用いると、SCore-D の自動運転が可能になります。まず、
sc_watch
は scout 環境を生成し、次に SCore-D を scout 環
境内で起動します。その後、sc_watch
は SCore-D からの応答
を watch-dog 方式で監視します。SCore-D が数分間応答しなくなると、
sc_watch
はクラスタになんらかの障害が発生したものとみなし、
システムのリブートを初めから試みます。
sc_watch
プログラムは障害を検知した場合に Unix コマンドや
シェルスクリプトを呼び出すことができます。例えば Unix の
mail
コマンドで管理者へメールを送るようなシェルスクリプト
を指定しておけば、システムがダウンした場合に管理者がその通知をメールで
受け取れるようになります。
sc_watch
がシステム障害を検知した場合、副作用のクリーンアッ
プ用に scout コマンドを呼び出すこともできます。
以下に sc_watcu
の実行例を示します:
システム障害が検知されると、# sc_watch -g pcc scored [14/Sep/2001,16:31:43] SC_WATCH (4.1) started. [14/Sep/2001,16:31:43] Interval is set to 10 minutes. [14/Sep/2001,16:31:43] Local Action = (none) [14/Sep/2001,16:31:43] Remote Action = (none) [14/Sep/2001,16:31:43] Abort action = (none) [14/Sep/2001,16:31:43] Boot Retry Max. = 10 [14/Sep/2001,16:31:43] Booting System: scored SCOUT: Spawning done. 14/Sep/2001 16:31:51 SYSLOG: /opt/score/deploy/scored 14/Sep/2001 16:31:51 SYSLOG: SCore-D 4.1 $Id: init.cc,v 1.63 2001/09/07 09:10:26 hori Exp $ 14/Sep/2001 16:31:51 SYSLOG: Compile option(s): 14/Sep/2001 16:31:51 SYSLOG: SCore-D network: myrinet/myrinet2k 14/Sep/2001 16:31:51 SYSLOG: Cluster[0]: (0..15)x2.i386-redhat7-linux2_4.i686.800 14/Sep/2001 16:31:51 SYSLOG: Memory: 501[MB], Swap: 259[MB], Disk: 3027[MB] 14/Sep/2001 16:31:51 SYSLOG: Network[0]: myrinet/myrinet2k 14/Sep/2001 16:31:51 SYSLOG: Network[1]: ethernet/ethernet 14/Sep/2001 16:31:51 SYSLOG: Scheduler initiated: Timeslice = 500 [msec] 14/Sep/2001 16:31:51 SYSLOG: Queue[0] activated, exclusive scheduling 14/Sep/2001 16:31:51 SYSLOG: Queue[1] activated, time-sharing scheduling 14/Sep/2001 16:31:51 SYSLOG: Queue[2] activated, time-sharing scheduling 14/Sep/2001 16:31:51 SYSLOG: Session ID: 0 14/Sep/2001 16:31:51 SYSLOG: Server Host: comp00.pccluster.org 14/Sep/2001 16:31:51 SYSLOG: Backup Host: comp0f.pccluster.org 14/Sep/2001 16:31:51 SYSLOG: Operated by: root 14/Sep/2001 16:31:51 SYSLOG: SCore-D Watcher (server.pccluster.org:46514) 14/Sep/2001 16:31:51 SYSLOG: --------- SCore-D (4.1) bootup -------- ...
sc_watch
は SCore-D を終了
し、システムのリブートを試みます。
他の多くの SCore コマンドと異なり、[14/Sep/2001 16:41:22] System failure detected. SCOUT: session done [14/Sep/2001 16:41:24] System has been shutdown. [14/Sep/2001 16:41:30] Booting System: scored SCOUT: Spawn done. 14/Sep/2001 16:41:51 SYSLOG: /opt/score/deploy/scored 14/Sep/2001 16:41:51 SYSLOG: SCore-D 4.1 $Id: init.cc,v 1.63 2001/09/07 09:10:26 hori Exp $ ...
sc_watch
は scout 環境
の「外側」で呼び出されなければなりません。これは sc_watch
がクラスタ上で動作している SCore-D プロセスを scout
を介
して kill するためです。
SYSLOG 出力の最後の行に、SCore-D が、ユーザによって起動された
sc_watch
プロセスとの接続に成功した、というメッセージがあ
ります。この TCP 接続を通じて sc_watch
が SCore-D を監視
します。
sc_watch
プロセスは SCore-D が正常にシャットダウンされた
とき、あるいは ^C(SIGINT)により終了します。
sceptic コマンドは、host_group シェル変数で指定 されたホストグループに属するホストが正常に動作しているかどうかを調べま す。異常と判断されたホストは scorehosts.defects ファイルに出力 されます。host_group=pcc install_root=/opt/score # $install_root/bin/sceptic -g $host_group >> /opt/score/etc/scorehosts.defects echo defected hosts cat /opt/score/etc/scorehosts.defects echo new host list $install_root/bin/scorehosts -r $host_group /etc/rc.d/init.d/scoreboard stop /etc/rc.d/init.d/scoreboard start echo scoreboard is restarted.
sceptic コマンドの scorehosts.defects への出力は常に アペンドでなければなりません。そうでないと困った事態を引き起こします。 あるホストが故障してそれが直ったとしましょう。その後別なホストが故障し ました。すると、結果的に一度に2つのホストが置き換えられてしまうことに なります。SCore 4.1 のチェックポイントではチェックポイントファイルにパ リティブロックを持っています。これによりひとつのホストのチェックポイン トファイルが失われても、他のホストのパリティブロックにより失われたファ イルを復旧することができます。しかしながら、ふたつ以上のホストが置き換 えられると復旧が不可能になる場合が生じるのです。
次に行なうべき事は、/etc/rc.d/init.d/scoreboard スクリプトファ イルの変更です。そのファイルには以下のような関数が記述してあるはずです。
この関数を次のように変更します。この変更により scoreboard コマンドが故障したホストのリストを記述したファイル を読むようになります。startsccoreboard() { pid=`pidofproc scoreboard` [ -n "$pid" ] && ps h $pid >/dev/null 2>&1 && return ulimit -c 0 su nobody -c "$INSTALL_ROOT/sbin/scoreboard -file /opt/score/etc/scorehosts.db -pid" > /var/run/scoreboard.pid && success }
最後に、sc_watch コマンドを以下のようにサーバホスト( scoreboard プロセスが走行している)で起動します。startsccoreboard() { pid=`pidofproc scoreboard` [ -n "$pid" ] && ps h $pid >/dev/null 2>&1 && return ulimit -c 0 su nobody -c "$INSTALL_ROOT/sbin/scoreboard -file /opt/score/etc/scorehosts.db -defects /opt/score/etc/scorehosts.defects -pid" > /var/run/scoreboard.pid && success }
SCore-D がクラッシュすると、sceptic コマンドが計算ホストが故 障していないかどうか調べます。故障したホストが見つかると、ファイルに記 録し、scoreboard プロセスを再起動します。これにより故障したホ ストは scorehosts.db に記述してある代替ホストに置き換わります。 最後に SCore-D が sc_watch コマンドにおより再起動されます。ユー ザプロセスがチェックポイントを行なっていた場合、故障したホスト上の失わ れたファイルはパリティブロックにより復旧され、ユーザプロセスの実行は、 チェックポイントまで遡って再開されます。# sc_watch -g pcc -l replace.sh scored [14/Sep/2001,16:31:43] SC_WATCH (4.1) started. [14/Sep/2001,16:31:43] Interval is set to 10 minutes. [14/Sep/2001,16:31:43] Local Action = replace.sh [14/Sep/2001,16:31:43] Remote Action = (none) [14/Sep/2001,16:31:43] Abort action = (none) [14/Sep/2001,16:31:43] Boot Retry Max. = 10 [14/Sep/2001,16:31:43] Booting System: scored SCOUT: Spawning done. ...