[Windows] IIS Recovery Kit の処理概要

IIS リカバリーキットが提供する監視機能についてご説明します。

対象製品
・IIS リカバリーキット (LifeKeeper for Windows)
 ※本処理概要は LifeKeeper for Windows v8.4 に付属するリカバリーキットをもとに作成しています。

IIS リカバリーキットに関する注意事項
IIS リカバリーキットでは、保護サービスとして WWW(W3)、FTP、SMTP のいずれかを選択してリソースを作成します。
また、これらの保護サービスは IIS バージョンによってサービス名が異なるため、本ナレッジでは以下のとおり名称を定義しています。
 ・W3:WEB、W3SVC
 ・FTP:FTP、MSFTPSVC、FTPSVC
 ・SMTP:SMTP、SMTPSVC

 
クイックチェック (quickCheck)

(1) リソースが保護しているサービスが起動しているかどうかを以下のコマンドで確認します。

$LKBIN/sc query [SVCTYP] ([SVCTYP] は W3、FTP、SMTP のどれか) 

 サービスのステータスが 1(Stopped) または 3(StopPending) の状態であった場合、監視失敗とみなして以下のようなメッセージをイベントログに出力し、監視処理を終了します。

Error 9705 "Checking LifeKeeper resource \"$TAGNAME\". IIS Service \"$SVCTYPE\" on system $SYS is not in the started state as required for site \"$SITENAME\". StateCode = $SVCSTATECODE."

(2) サイトの Index 値を以下のコマンドを使用して確認します。

(2-1) 監視サービスが FTP、かつ OS バージョンが Windows 2008 R2 より新しい場合:

$SystemRoot/system32/inetsrv/appcmd.exe list sites /text:id /site.name:[サイト名]

(2-2) (2-1) 以外の場合:
   以下コマンドの実行結果から、サイト名の項目を抽出して Index 値を確認します。

$LKROOT/admin/kit/webapp/bin/EnumIIS.exe query [サービス名]

   上記のコマンドの実行結果で Index 値を取得できなかった場合、監視失敗とみなして以下のようなメッセージをイベントログに出力し、監視処理を終了します。

Error 9707 "Checking LifeKeeper resource \"$TAGNAME\". The IIS metabase index for protected site \"$SITENAME\" is null (invalid) on system $SYS. The site may not exist."

(3) サイトが起動しているかを以下のコマンドを使用して確認します。

(3-1) 監視サービスが FTP、かつ OS バージョンが Windows 2008 R2 より新しい場合:

$POWERSHELLBIN/powershell.exe -command "Set-ExecutionPolicy RemoteSigned; Import-Module WebAdministration; IIS:;cd Sites; Get-WebItemState -Protocol $protocol [サイト名] | $LKBIN/egrep -i "Started|Stopped" | sed -e 's/  *//g'"

(3-2) (3-1) 以外の場合:

$LKROOT/admin/kit/webapp/bin/EnumIIS.exe query [サービス名] [INDEX][INDEX] は (2-2) で取得した index 値)

 上記のコマンドの実行結果でサイトが停止している場合、監視失敗とみなして以下のようなメッセージをイベントログに出力し、監視処理を終了します。

Error 9704 "Checking LifeKeeper resource \"$TAGNAME\". IIS Site \"$SITENAME\" on system $SYS is not in the started state.  Current state is \"$SITESTATE\"."

 

詳細チェック (deepCheck)

(1) クイックチェックを実行します。

(2) 監視サービスが FTP である場合、以下のフォルダへ FTP.exe の実行に使用する空ファイルを作成します。

$LKROOT/admin/kit/webapp/[サイト名].txt

(3) サイトの Index 値を以下のコマンドを使用して確認します。

(3-1) 監視サービスが FTP、かつ OS バージョンが Windows 2008 R2 より新しい場合:

$SystemRoot/system32/inetsrv/appcmd.exe list sites /text:id /site.name:[サイト名]

(3-2) (3-1) 以外の場合:
   以下コマンドの実行結果から、サイト名の項目を抽出して Index 値を確認します。

$LKROOT/admin/kit/webapp/bin/EnumIIS.exe query [サービス名]

(3-3) 上記のコマンドの実行結果で Index 値を取得できなかった場合、監視失敗とみなして以下のようなメッセージをイベントログに出力し、監視処理を終了します。

Error 9765 "Checking LifeKeeper resource \"$TAGNAME\". The IIS metabase index for protected site \"$SITENAME\" is null (invalid) on system $SYS. The site may not exist."

(4) 監視サービスが SMTP である場合、サービスの監視に成功したと判断して監視処理を終了します。 
  また、EnumIIS.exe コマンドの実行結果でステータスが Started 以外であった場合も、サービスの監視に成功したと判断して監視処理を終了します。
 
  監視サービスが WWW か FTP で、かつ EnumIIS.exe コマンドの実行結果でステータスが Started であった場合のみ、(4-1) へ進みます。

(4-1) 以下のコマンドを実行し、サイトに関連付けられている binding 情報を抽出します。

(4-1-1) 監視サービスが FTP、かつ OS バージョンが Windows 2008 R2 より新しい場合:

$SystemRoot/system32/inetsrv/appcmd.exe list sites [サイト名] /text:bindings

(4-1-2) (4-1-1) 以外の場合:

$LKROOT/admin/kit/webapp/bin/EnumIIS.exe query $SERVICE [INDEX] | $LKBIN/grep "Binding"

(4-2) 取得した Binding 情報から、バインド Port 番号と IP アドレスを抽出します。

(4-3) IP アドレスを取得できなかった場合、以下のようなメッセージをイベントログに出力して監視処理を終了します。ただし、この場合監視失敗とはみなしません。

Warning 9773 Checking LifeKeeper protected resource \"$TAGNAME\". The IIS configuration for site \"$SITENAME\" does not include an IP address! Deep check validation of the site can not be completed.

(4-4) 監視サービスが FTP 以外である場合、(4-5) へ進みます。
   監視サービスが FTP である場合、(2) で作成した空ファイルを用いて FTP サーバへアクセスし、レスポンスを取得します。

$windir/system32/ftp.exe -s:"$LKROOT/admin/kit/webapp/[サイト名].txt"

   レスポンスの応答結果として 230 が得られなかったとき、FTP サーバへログインできなかったと判断して以下のようなメッセージをイベントログへ出力し、監視処理を終了します。
   ※ 応答コード 230 は FTP サーバへ正常にログインできたことを示します。

Error 9760 The FTP site \"$SITENAME\" failed to respond successfully to the user supplied query.  A successful FTP login response must include a 230 response line that starts with \"230 \". The actual FTP response was as follows: $FTPRESPONSE"

   応答結果として 230 が得られたとき、FTP サービスの監視に成功したと判断して監視処理を終了します。

(4-5) 監視サービスが FTP 以外である場合、以下のコマンドを使用してサイトへの接続性を確認します。

$LKROOT/admin/kit/webapp/bin/pollsite [SVCTYPE] [IP アドレス] [PORT 番号] ([SVCTYP] は W3、SMTP のどれか)

   上記コマンドの実行結果、返値が 0 であればサービスの監視に成功したと判断して監視処理を終了します。
   返値が 1から6 であった場合、監視に失敗したとみなして以下のようなメッセージをイベントログへ出力し、監視処理を終了します。

   1) Error 9754 The number of arguments passed to pollsite is not correct.
   2) Error 9755 Cannot obtain a valid handle for polling the $SITETYPE.
   3) Error 9756 Cannot get a valid connection to the ftp $SITETYPE or the ftp site failed to respond.
   4) Error 9757 Cannot get a valid connection to the http $SITETYPE.
   5) Error 9758 Cannot obtain a valid http request handle from the polled $SITETYPE.
   6) Error 9759 The $SITETYPE failed to respond to the http request.

   返値が 1から6 以外であった場合も監視に失敗したとみなしますが、イベントログを出力せずに監視処理を終了します。
 

起動処理 (restore)

(1) メタベースから IIS サイトのサービスタイプを取得し、サービスの Binding 情報が取得できるかを確認します。

(1-1) 起動サービスが FTP、かつ OS バージョンが Windows 2008 R2 より新しい場合:

$SystemRoot/system32/inetsrv/appcmd.exe list sites [サイト名] /text:bindings

(1-2) (1-1) 以外の場合:
   以下コマンドの実行結果から、サイト名の項目を抽出して Index 値を確認します。

$LKROOT/admin/kit/webapp/bin/EnumIIS.exe query [サービス名]

(1-3) 上記のコマンドの実行結果で Binding 情報を取得できなかった場合、起動失敗とみなして以下のようなメッセージをイベントログに出力し、(8) へ進みます。

Error 9414 "Restoring LifeKeeper resource \"$TAGNAME\".  Protected IIS site \"$SITENAME\" was not found in the current IIS Metadata.  The site may no longer exist."

(2) リソースが保護しているサービスが起動しているかどうかを以下のコマンドで確認します。

$LKBIN/sc query [SVCTYP] ([SVCTYP] は W3、FTP、SMTP のどれか)

 サービスのステータスが 4(Running) の状態であった場合、(3) へ進みます。
 ステータスが 4(Running) 以外の状態であった場合、以下のコマンドを実行してサービスを起動します。

$LKBIN/sc start [SVCTYP] ([SVCTYP] は W3、FTP、SMTP のどれか)

 本コマンドの実行に成功した場合、(3) へ進みます。
 本コマンドの実行に失敗した場合、起動失敗とみなして以下のようなメッセージをイベントログに出力し、(8) へ進みます。

Error 9409 "IIS Service \"$SVCTYPE\" servicing LifeKeeper resource \"$TAGNAME\" could not be started.  Current state is now \"$SVCSTATEDESC\" on system $SYS."

(3) サイトの Index 値を以下のコマンドを使用して確認します。

(3-1) 起動サービスが FTP、かつ OS バージョンが Windows 2008 R2 より新しい場合:

$SystemRoot/system32/inetsrv/appcmd.exe list sites /text:id /site.name:[サイト名]

(3-2) (3-1) 以外の場合:
   以下コマンドの実行結果から、サイト名の項目を抽出して Index 値を確認します。

$LKROOT/admin/kit/webapp/bin/EnumIIS.exe query [サービス名]

(3-3) 上記のコマンドの実行結果で Index 値を取得できた場合、(4) へ進みます。
   Index 値を取得できなかった場合、起動失敗とみなして以下のようなメッセージをイベントログに出力し、(8) へ進みます。

Error 9420 "While restoring resource \"$TAGNAME\" an invalid (null) instance number was retrieved from the IIS metabase for site \"$SITENAME\".  The site can not be started."

(4) すべての IIS サービスでバインドされているバインド情報を以下のコマンドで取得し、自サービスのバインド情報と衝突していないことを確認します。

(4-1) 起動サービスが FTP、かつ OS バージョンが Windows 2008 R2 より新しい場合:

$SystemRoot/system32/inetsrv/appcmd.exe list sites /text:site.name

(4-2) (4-1) 以外の場合:

$LKROOT/admin/kit/webapp/bin/EnumIIS.exe query [サービス名]

(4-3) 各々のコマンドの実行結果から、自サービスのバインド情報とその他サービスのバインド情報を抽出します。
   他サービスが自サービスのバインド情報を利用してサービス起動している場合、自サービスは起動できていないと判断して起動失敗とみなして以下のようなメッセージをイベントログに出力し、(8) へ進みます。

Error 9422 "IIS Site $SITENAME can not be started because its IP:Port:Header binding ($abind) is currently in use on site \"$ACTIVESITE\"."

(5) 以下コマンドでリソースに関連付いているサイトを起動します。

(5-1) 起動サービスが FTP、かつ OS バージョンが Windows 2008 R2 より新しい場合:

$POWERSHELLBIN/powershell.exe -command "Set-ExecutionPolicy RemoteSigned; Import-Module WebAdministration; IIS:; cd Sites; Start-WebItem -Protocol $protocol [サイト名]

(5-2) (5-1) 以外の場合:

$LKROOT/admin/kit/webapp/bin/EnumIIS.exe start [サービス名] [INDEX] ([INDEX] は (3-2) で取得した index 値)

(6) (5) 操作によりサイトが起動したかを以下のコマンドを使用して確認します。

(6-1) 起動サービスが FTP、かつ OS バージョンが Windows 2008 R2 より新しい場合:

$POWERSHELLBIN/powershell.exe -command "Set-ExecutionPolicy RemoteSigned; Import-Module WebAdministration; IIS:;cd Sites; Get-WebItemState -Protocol $protocol [サイト名]" | $LKBIN/egrep -i "Started|Stopped" | sed -e 's/  *//g'

(6-2) (6-1) 以外の場合:

$LKROOT/admin/kit/webapp/bin/EnumIIS.exe query [サービス名] [INDEX] ([INDEX] は (3-2) で取得した index 値) 

(6-3) 上記のコマンドの実行結果でサイトが起動していた場合、起動成功とみなして (7) へ進みます。
   上記のコマンドの実行結果でサイトが停止している場合、起動失敗とみなして以下のようなメッセージをイベントログに出力し、(8) へ進みます。

Error 9706 "Unable to start IIS Site \"$SITENAME\" on system $SYS"

(7) 起動処理に成功した場合、以下のメッセージを出力して起動処理を終了します。

Information 9407 Restore resource $TAGNAME End: Successful

(8) 起動処理に失敗した場合、以下のメッセージを出力して起動処理を終了します。

Error 9408 Restore resource $TAGNAME End: Failed.

 

停止処理 (remove)

(1) リソースが保護しているサービスの起動ステータスを以下のコマンドで確認します。

$LKBIN/sc query [SVCTYP] ([SVCTYP] は W3、FTP、SMTP のどれか)

(1-1) サービスのステータスが 4(Running) の状態であった場合、(2) へ進みます。
(1-2) サービスのステータスが 1(Stopped)、あるいは 3(StopPending) の状態であった場合、停止処理に成功したとみなして (5) へ進みます。
(1-3) サービスのステータスが 2(StartPeinding) の状態であった場合、以下のコマンドでサービスを一旦起動させます。

$LKBIN/sc start [SVCTYP] ([SVCTYP] は W3、FTP、SMTP のどれか)

   本コマンドの実行に成功した場合、(2) へ進みます。
   本コマンドの実行に失敗した場合、停止処理に失敗したとみなして以下のようなメッセージをイベントログに出力し、(6) へ進みます。

Error 9557 Removing resource \"$TAGNAME\". IIS Service \"$SVCTYPE\" could not be started before stopping site \"$SITENAME\".  Current service state on system $SYS is now \"$SVCSTATEDESC\"".

(2) サイトの Index 値を以下のコマンドを使用して確認します。

(2-1) 起動サービスが FTP、かつ OS バージョンが Windows 2008 R2 より新しい場合:

$SystemRoot/system32/inetsrv/appcmd.exe list sites /text:id /site.name:[サイト名]

(2-2) (2-1) 以外の場合:
   以下コマンドの実行結果から、サイト名の項目を抽出して Index 値を確認します。

$LKROOT/admin/kit/webapp/bin/EnumIIS.exe query [サービス名]

(2-3) 上記のコマンドの実行結果で Index 値を取得できた場合、(3) へ進みます。
   上記のコマンドの実行結果で Index 値を取得できなかった場合、以下のようなメッセージをイベントログに出力しますが、停止失敗とはみなさず (5) へ進みます。
   ※ Index を取得できないことはサイトが存在しないことを意味しており、サービスが停止したものと判断します。ただし正常な状態ではないため、警告メッセージを出力します。

Warning 9563 "Removing LifeKeeper resource \"$TAGNAME\". The IIS metabase index for protected site \"$SITENAME\" is null (invalid) on system $SYS. The site may not exist."

(3) 以下コマンドでリソースに関連付いているサイトを起動します。

(3-1) サービスが FTP、かつ OS バージョンが Windows 2008 R2 より新しい場合:

$POWERSHELLBIN/powershell.exe -command "Set-ExecutionPolicy RemoteSigned; Import-Module WebAdministration; IIS:; cd Sites; Stop-WebItem -Protocol $protocol [サイト名]"

(3-2) (3-1) 以外の場合:

$LKROOT/admin/kit/webapp/bin/EnumIIS.exe stop [サービス名] [index] ([INDEX] は (2-2) で取得した index 値)

(4) (3) 操作によりサイトが停止したかを以下のコマンドを使用して確認します。

(4-1) サービスが FTP、かつ OS バージョンが Windows 2008 R2 より新しい場合:

$POWERSHELLBIN/powershell.exe -command "Set-ExecutionPolicy RemoteSigned; Import-Module WebAdministration; IIS:;cd Sites; Get-WebItemState -Protocol $protocol $SITENAME" | $LKBIN/egrep -i "Started|Stopped" | sed -e 's/  *//g'

(4-2) (4-1) 以外の場合:

$LKROOT/admin/kit/webapp/bin/EnumIIS.exe query [サービス名] [INDEX] ([INDEX] は (2-2) で取得した index 値)

(4-3) 上記のコマンドの実行結果でサイトが停止していた場合、停止成功とみなして (5) へ進みます。
   上記のコマンドの実行結果でサイトを停止できていない場合、後 9回 (4-1)、あるいは(4-2) の操作を繰り返します。停止に成功した場合、(5) へ進みます。

   計 10回 (4-1)、あるいは (4-2) の操作を繰り返してもサイトを停止できなかった場合、停止処理に失敗したとみなして以下のようなメッセージをイベントログに出力し、(6) へ進みます。

Error 9556 "Unable to stop IIS site associated with LifeKeeper tag \"$TAGNAME\" on system $SYS"

(5) 停止処理に成功した場合、以下のメッセージを出力して停止処理を終了します。

Information 9558 "Remove IIS resource $TAGNAME End: Successful"

(6) 停止処理に失敗した場合、停止処理を終了します。メッセージは出力されません。
 

回復処理 (recover)

(1) リソースが保護しているサービスが起動しているかどうかを以下のコマンドで確認します。

$LKBIN/sc query [SVCTYP] ([SVCTYP] は W3、FTP、SMTP のどれか)

 サービスのステータスが 4(Running) の状態であった場合、(2) へ進みます。
 ステータスが 4(Running) 以外の状態であった場合、以下のコマンドを実行してサービスを起動します。

$LKBIN/sc start [SVCTYP] ([SVCTYP] は W3、FTP、SMTP のどれか)

 本コマンドの実行に成功した場合、(2) へ進みます。
 本コマンドの実行に失敗した場合、回復処理失敗とみなして以下のようなメッセージをイベントログに出力し、回復処理を終了します。

Error 9607 "IIS Service \"$SVCTYPE\" servicing LifeKeeper resource \"$TAGNAME\" could not be started.  Current state is now \"$SVCSTATEDESC\" on system $SYS."

(2) サイトの Index 値を以下のコマンドを使用して確認します。

(2-1) 起動サービスが FTP、かつ OS バージョンが Windows 2008 R2 より新しい場合:

$SystemRoot/system32/inetsrv/appcmd.exe list sites /text:id /site.name:[サイト名]

(2-2) (2-1) 以外の場合:
   以下コマンドの実行結果から、サイト名の項目を抽出して Index 値を確認します。

$LKROOT/admin/kit/webapp/bin/EnumIIS.exe query [サービス名]

(2-3) 上記のコマンドの実行結果で Index 値を取得できた場合、(3) へ進みます。
   Index 値を取得できなかった場合、回復処理失敗とみなして以下のようなメッセージをイベントログに出力し、回復処理を終了します。。

Error 9609 "While recovering resource \"$TAGNAME\" an invalid (null) instance number was retrieved from the IIS metabase for site \"$SITENAME\".  The site can not be started."

(3) (2) 操作で取得した Index 値を用いてサイトが起動していることを以下のコマンドを使用して確認します。

(3-1) サービスが FTP、かつ OS バージョンが Windows 2008 R2 より新しい場合:

$POWERSHELLBIN/powershell.exe -command "Set-ExecutionPolicy RemoteSigned; Import-Module WebAdministration; IIS:;cd Sites; Get-WebItemState -Protocol $protocol [サイト名]" | $LKBIN/egrep -i "Started|Stopped" | sed -e 's/  *//g'"

(3-2) (3-1) 以外の場合:

$LKROOT/admin/kit/webapp/bin/EnumIIS.exe query [サービス名] [INDEX] ([INDEX] は (2-2) で取得した index 値)

(3-3) 上記のコマンドの実行結果でサイトが起動していた場合、回復処理成功とみなして回復処理を終了します。
   サイトを起動できていない場合、後 9回 (3-1)、あるいは(3-2) の操作を繰り返します。起動に成功した場合、回復処理成功とみなして回復処理を終了します。

   計 10回 (3-1)、あるいは (3-2) の操作を繰り返してもサイトを起動できなかった場合、回復処理に失敗したとみなして以下のようなメッセージをイベントログに出力し、回復処理を終了します。

Error 9606 "Recovering resource \"$TAGNAME\". Unable to start IIS site \"$SITENAME" on system \"$SYS\"."

 


改訂履歴

[公開日:2010年1月29日]

[更新日:2017年5月19日]
以下の処理概要を追加しました。
・起動処理(restore)
・停止処理(remove)
・回復処理(recover)

return top