こんにちは、SCSKの伊藤です。
LifeKeeper for Windows v10.1の新機能として、Generic ARK用のPowerShellテンプレートが追加されました。
本記事では、このPowerShellテンプレートを使ってGeneric ARKリソースを作成していきます。
参考資料
■LifeKeeper for Windowsリリースノート Version 10.1

LifeKeeper Core:Generic Applicationスクリプト用のPowerShellテンプレートを追加しました。
■[ドキュメント][Windows] 汎用アプリケーションリソース開発の手引

そもそも、Generic Application Recovery Kit(Generic ARK)とは
標準のリカバリキットが用意されていない独自のアプリケーションや任意のサービスを監視・制御する場合、Generic ARKとしてリソース作成する必要があります。
Generic ARKには、以下のようなメリットがあります。
『汎用性』
アプリケーションの「起動処理」「停止処理」「監視処理」「回復処理」を行うための各スクリプトをユーザー自身が用意することで、自作プログラム等を含めてどのようなアプリケーションでもLifeKeeperで保護が可能。
『コスト抑止』
追加の有償ARKを購入する必要がなく、コストを抑えて独自の冗長化構成を実現可能。
『柔軟性』
「特定のプロセスが落ちたらフェイルオーバーさせる」「独自のチェックコマンドを実行して異常を検知する」など、細かい要件に合わせた柔軟な設計が可能。
『柔軟性』については様々な応用が可能です。
●特定サーバと通信が途絶えたらフェイルオーバーさせたい。
⇒起動・停止スクリプトをダミー(戻り値 0 のみ)にして、監視スクリプトに特定サーバとPingなどの通信チェックを組み込み、リソース階層に登録。
●リソースの起動・停止に合わせて特定のコマンドを実行させたい。
⇒監視設定を空白またはスクリプトをダミーにして、起動スクリプトと停止スクリプトに実行したいコマンドを組み込み、リソース階層に登録。
●フェイルオーバー時、リソース起動に合わせて特定サーバにリモートコマンドを実行したい。
⇒停止・監視スクリプトをダミーにして、起動スクリプトにsshコマンドなどリモートコマンドを組み込み、リソース階層に登録。
など、アプリケーションの制御のみに縛られずコマンドを実行させることも可能です。
Generic ARKのテンプレートとは
Generic ARKを使って冗長化するために提供されているひな形です。
Generic ARK用にスクリプトをゼロから書くのは負担が大きいため、必要な処理の枠組みがあらかじめ記述されていて最小限の記載を追加するだけで作成が完了するテンプレートが提供されています。
■[Windows]任意のWindowsサービスを冗長化可能なGeneric ARKサンプルスクリプト

テンプレートの使い方
LifeKeeperのインストール先がデフォルトパスの場合、以下のパスに各テンプレートが格納されております。
【デフォルトパス】C:\LK\Admin\kit\app\templates
いずれのテンプレートも使用する場合は、最小限の変更箇所としてはコメントアウトされている『Custom code goes here』以下の箇所になります。
| ~省略~ # ————————————————————————————- # Custom code goes here # ————————————————————————————- ←★ここに外部コマンドを記載★ # RetCode is used to identify a successful or failed restore $RetCode = $LASTEXITCODE; if ( $RetCode -ne 0 ) ~省略~ |
外部コマンドを実行した結果の戻り値($LASTEXITCODE)が「0」であれば正常、「0 以外」であれば異常と判定されます。
PowerShellテンプレートを使ってみよう!
今回は、PowerShellテンプレートを使用してプリントサーバー(Print Spooler)を冗長化してみます。
使用する環境とリソース階層は以下の通り、PrintSpoolerリソース以外は作成済みです。
■環境情報
| ホスト名 | アクティブサーバ = WIN19S01 スタンバイサーバ = WIN19S02 |
| OS | Windows Server 2019 |
| LifeKeeper製品 | LifeKeeper for Windows v10.1 |
■リソース階層
| PrintSpooler | GenericARKリソース |
| ip-192.168.10.100 | IPアドレスリソース ※作成済み※ |
| Vol.Z | データレプリケーションリソース ※作成済み※ |
1.アクティブサーバでテンプレートを修正する。
それぞれのテンプレートの任意の場所にコピーして、下記のように変更。
<restore.ps1>(変更箇所のみ抜粋)
| # ————————————————————————————- # Custom code goes here # ————————————————————————————- sc.exe start spooler > $null # RetCode is used to identify a successful or failed restore $RetCode = $LASTEXITCODE; |
<remove.ps1>(変更箇所のみ抜粋)
| # ————————————————————————————- # Custom code goes here # ————————————————————————————- sc.exe stop spooler > $null # RetCode is used to identify a successful or failed remove $RetCode = $LASTEXITCODE; |
<quickchk.ps1>(変更箇所のみ抜粋)
| # ————————————————————————————- # Custom code goes here # ————————————————————————————- cmd.exe /c “tasklist /FI “”IMAGENAME eq spoolsv.exe”” | findstr /I “”spoolsv.exe”” > nul” # RetCode is used to identify a successful or failed quick check $RetCode = $LASTEXITCODE; |
2.LifeKeeper Web Management Consoleを起動し、LifeKeeperにサインインする。
3.「オペレーション」から「リソース階層の作成」をクリックする。
4.Application Recovery Kitで「Generic Application」を選択し、「次へ」をクリックする。
5.それぞれのスクリプトパスを入力し、「次へ」をクリックする。
6.Generic Applicationリソースタグに『PrintSpooler』を入力し、「次へ」をクリックする。
7.表示された内容を確認して「実行」をクリックする。
8.処理が『成功』したら、「リソース階層の拡張」をクリックする。
9.各項目をデフォルトのまま「次へ」をクリックする。
10.拡張前のチェックに『成功』したら「次へ」をクリックする。
11.各項目をデフォルトのまま「次へ」をクリックする。
12.表示された内容を確認して「実行」をクリックする。
13.処理が『成功』したら、「閉じる」をクリックする。
14.作成した「PirntSpooler」リソースの右クリックメニューから「依存関係の作成」をクリックする。
15.子リソースに『ip-192.168.10.100』を選択して「確認」をクリックする。
16.表示された内容を確認して「作成」をクリックする。
17.処理が『成功』したら、「閉じる」をクリックする。
18.リソース階層の作成が完了したら、スタンバイサーバの「PrintSpooler」の右クリックメニューから「サービス開始」をクリックする。
19.表示された内容を確認して「サービス開始」をクリックする。
20.処理が『成功』したら、「閉じる」をクリックする。
21.以上で、GenericARK「PirntSpooler」リソースの作成およびスイッチオーバー確認が完了する。
さいごに
GenericARKを使えば、簡単に色々なものを冗長化したり、リソースの起動・停止に合わせて複雑な処理をさせることも可能です。
少しでも参考になれば幸いです。
詳しい内容をお知りになりたいかたは、以下のバナーからSCSKLifekeeper公式サイトまで






















