Generic Applicationスクリプト用のPowerShellテンプレートを使ってみよう!

こんにちは、SCSKの伊藤です。

LifeKeeper for Windows v10.1の新機能として、Generic ARK用のPowerShellテンプレートが追加されました。
本記事では、このPowerShellテンプレートを使ってGeneric ARKリソースを作成していきます。

 

参考資料

■LifeKeeper for Windowsリリースノート Version 10.1

新機能 - LifeKeeper for Windows LIVE - 10.1
LifeKeeper for Windows Version10.1の新機能 *v10.1は、すべてのv10.1.x製品バージョンを指します。...
v10.1.0新機能
LifeKeeper Core:Generic Applicationスクリプト用のPowerShellテンプレートを追加しました。

 

■[ドキュメント][Windows] 汎用アプリケーションリソース開発の手引

[ドキュメント][Windows] 汎用アプリケーションリソース開発の手引
LifeKeeper for Windows向けに、Generic ARK の開発を行う上での要件や仕様についてまとめた開発の手引です。 Gen_Dev_guide_LK4W.pdf 926 KBDownload    改訂履歴 使用できる...

 

そもそも、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サンプルスクリプト

[Windows]任意のWindowsサービスを冗長化可能なGeneric ARKサンプルスクリプト
LifeKeeper for Windows v7.0.1 から任意の Windows サービス(以下、サービス)を Generic ARK を用いて簡易に冗長化できるサンプルスクリプトが標準で付属されました。同サンプルスクリプトを用いて、...
マニュアルや技術情報等にて「サンプルスクリプト」と表記されている場合もある。

 

テンプレートの使い方

LifeKeeperのインストール先がデフォルトパスの場合、以下のパスに各テンプレートが格納されております。

【デフォルトパス】C:\LK\Admin\kit\app\templates

サービスをターゲットとする場合は、テンプレートを一切修正の必要がなくリソース作成時の『アプリケーション情報』にサービス名を入力するだけでリソース化できる「example_serviceテンプレート」が使用可能。
【デフォルトパス】C:\LK\Admin\kit\app\templates\example_service_powershell

 

いずれのテンプレートも使用する場合は、最小限の変更箇所としてはコメントアウトされている『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;
WindowsServer2019(Windows PowerShell 5.1)では、PowerShellバージョン固有の挙動による影響で45行目の「$LASTEXITCODE=$SUCCESS;」のコメントアウトまたは削除が必要。

 

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公式サイトまで

 

×
タイトルとURLをコピーしました