対象製品
WebSphere MQ Recovery Kit (LifeKeeper for Linux)
※本処理概要は LifeKeeper for Linux v9.5.0 に付属するリカバリキットをもとに作成しています。
監視処理
Listener に対する動作はリソース作成時にリスナーを保護するように設定した時のみ実施します。
テストキューに対するGET/PUTは、テストキューを設定した場合のみ行います。
1) LifeKeeper からリソース保護している MQ の情報を取得します。
これらの情報はリソース作成時に登録したものです。
2) リソースが In-Service 状態であることを確認します。
In-Service でない場合、監視処理は終了します。
3) 以下の確認を順に行い、失敗した場合は異常であると判断し回復処理を起動します。
- Queue Manager と Command Server が起動していることを確認します。
Queue manager と Command Server のプロセスが起動していて、runmqsc コマンドで状態を取得できれば起動済みになります。 - テストキューに対して GET/PUT を行います。
amqsput と amqsget0 を用いてテストキューに GET/PUT を行い、正しく操作できることを確認します。 - Listenerが起動していることを確認します。
Listenerのプロセスが存在していれば起動していると判断します。 - Listenerに接続できることを確認します。
amqscnxc で接続を行います。 - amqsputc と amqsgetc を用いて、Listener を経由してテストキューに GET/PUT を行います。
起動処理
Listener に対する動作はリソース作成時にリスナーを保護するように設定した時のみ実施します。
1) LifeKeeper からリソース保護を行っている MQ の情報を取得します。
これらの情報はリソース作成時に登録したものです。
2) Queue managerがすでに起動済みであるか確認します。
psコマンドで起動中のプロセスを取得し、Queue manager と Command Server のプロセスが存在していて、runmqsc コマンドで状態を取得できれば起動済みと判断します。
起動済みの場合は、amqsput と amqsget0 を用いてテストキューに GET/PUT を行い、正しく操作できることを確認します。
GET/PUT に失敗した場合は異常と判断し回復処理を起動します。
成功した場合は、すでに起動しているために起動処理は不要と判断して、終了します。
3) Queue manager が完全な停止状態であるか確認します。
Queue manager と Command Server のプロセスが起動していなければ完全停止と判断します。
完全に停止していない場合は、Queue manager 及び Listener を停止させます。停止できなかった場合はエラーで終了します。
停止は "endmqm -i" → "endmqm -p" の順で試みた後、各プロセスに SIGKILL を送ることで実現しています。
4) strmqm と strmqcsv で Queue manager → Command server の順で起動していきます。
起動を確認するためにテストキューに対して GET/PUT を行い、正常な応答を得られた場合は起動完了になります。
正常な応答が得られない場合は、起動に失敗したと判断してエラーを返します。
5) runmqsc で "start listener" を実行して Listener を起動します。
停止処理
Listener に対する動作はリソース作成時にリスナーを保護するように設定した時のみ実施します。
1) LifeKeeper からリソース保護している MQ の情報を取得します。
これらの情報はリソース作成時に登録したものです。
2) Queue Manager が動作しているか確認します。
Queue manager と Command Server のプロセスが起動していて、runmqsc コマンドで状態を取得できれば起動済みになります。
すでに停止している場合は、手順 4 に進みます。
3) Queue Managerを停止させます。
停止は "endmqm -i" → "endmqm -p" の順で試みた後、各プロセスに SIGKILL を送ることで実現しています。
停止が確認できない場合、停止処理はエラー終了します。
4) Listener が動作している場合は停止させます。
Listener のプロセスが存在していれば動作中と判定します。
停止は endmqlsr で行います。これで停止できない場合にはプロセスに対して SIGKILL を送ります。
停止が確認できない場合、停止処理はエラー終了します。
5) Queue Manager 及び Listener が正常に停止していれば正常終了します。
どちらか失敗した場合、停止処理はエラー終了します。
回復処理
1) すでに回復処理中であるか確認し、処理中であれば何もしません。
2) Queue Manager が起動しているか確認します。
Queue manager と Command Server のプロセスが起動していて、runmqsc コマンドで状態を取得できれば起動済みになります。
起動している場合は回復完了と判断して回復処理は終了します。
3) strmqcsv で Command Server を起動します。
MQS_CMDSRV_RESTART_CNT の設定値(未設定の場合は15)だけ繰り返しても起動できない場合は回復失敗を返します。
4) 再度 Queue Manager が起動しているか確認します。
起動できている場合は、amqsput と amqsget0 を用いてテストキューに GET/PUT を行い、正常動作しているか確認します。
正常と判断した場合は手順 7 に進みます。
5) Queue Manager と Listener を強制的に停止します。
停止は "endmqm -i" → "endmqm -p" の順で試みた後、各プロセスに SIGKILL を送ることで実現しています。
停止できない場合は回復失敗で戻ります。
6) strmqm → strmqcsv の順で実行して、Queue Manager と Command Server を起動します。
起動したら、テストキューに対して PUT/GET を行い、正常に起動できたか確認します。
これを MQS_CHECK_RETRY_CNT の設定値(未設定の場合は 2 )回繰り返して、起動しないもしくは PUT/GET に失敗した場合は、回復失敗で戻ります。
7) Listener のプロセスが存在しているか確認します。存在した場合は起動済みと見なして手順 9 に進みます。
8) runmqsc で "start listener" を実行し Listener を起動します。起動できなかった場合は回復失敗で戻ります。
9) amqscnxc で Listener に接続します。接続できない場合は回復失敗で戻ります。
10) amqsputc と amqsgetc を用いて、Listener を経由してテストキューに GET/PUT を行います。
失敗した場合は回復失敗で戻ります。
11) 回復成功で戻ります。
回復失敗の場合は、LifeKeeper の機能で強制的にフェイルオーバーを発生させ、スタンバイ側に引き継ぎます。
関連パラメータ
MQパラメータ一覧
http://docs.us.sios.com/spslinux/9.5.0/ja/topic/mq-parameters-list
MQS_CMDSRV_RESTART_CNT
単位:回
デフォルト:15
影響範囲:起動処理、回復処理
説明:キュー・マネージャーの完全な再始動を試行する前に、コマンド・サーバーの再始動を試行する回数。
再試行の間に2秒のスリープがあります-デフォルトは15です。
設定値が無い場合はデフォルト値が適用されます。
MQS_CHECK_RETRY_CNT
単位:回
デフォルト:2
影響範囲:起動処理、回復処理
説明:リストアまたはリカバリーが失敗する前に、MQ が正しく開始したことを確認する回数。
再試行の間に 5秒のスリープがあります。
設定値が無い場合はデフォルト値が適用されます。
MQS_DEBUG
単位:真偽 (1=真, 0=偽)
デフォルト:0
影響範囲:リカバリキット全体
説明:値を 1 にすることでリカバリキットの処理内容をデバッグログとして lifekeeper.log に記録するようになります。
すべての処理がデバッグログとして記録されるわけではありません。
設定値が無い場合はデフォルト値が適用されます。