PostgreSQL リカバリーキットが提供する監視機能についてご説明します。
対象製品
・PostgreSQL リカバリーキット (LifeKeeper for Windows)
※本処理概要は LifeKeeper for Windows v8.6 に付属するリカバリーキットをもとに作成しています。
クイックチェック (quickCheck)
(1) リソースのステータスが ISP 以外のとき、即時監視処理を終了します。
(2) Windows の sc コマンドを使用して得られるサービスのステータスから、PostgreSQL サービスの起動状態を確認します。
sc query [サービス名]
サービスのステータスが 4(Running) の場合、監視に成功したとみなして監視処理を終了します。
サービスのステータスが 7(Paused) の場合、以下のメッセージをイベントログに出力しますが監視成功とみなして監視処理を終了します。
Error 113543 "The PostgreSQL service [サービス名] for resource [リソース名] has been manually paused. User intervention required to either stop or restart the service. Aborting PostgreSQL health checks."
サービスのステータスが上記以外の場合、以下のメッセージをイベントログに出力後、監視失敗とみなして監視処理を終了します。
Error 113544 "The quickchk action failed. The PostgreSQL service [サービス名] for resource[リソース名] is not running."
詳細チェック (deepCheck)
(1) リソースのステータスが ISP 以外のとき、即時監視処理を終了します。
(2) Windows の sc コマンドを使用して得られるサービスのステータスから、PostgreSQL サービスの起動状態を確認します。
sc query [サービス名]
サービスのステータスが 4(Running) の場合、サービスが正常に稼働しているとみなして (3) へ進みます。
サービスのステータスが上記以外の場合、以下のメッセージをイベントログに出力後、監視失敗とみなして監視処理を終了します。
Error 113563 "The PosgreSQL service [サービス名] for resource [リソース名] is not running. Aborting PostgreSQL health checks."
(3) pg_ctl コマンドを使用し、PostgreSQL のステータスを確認します。
pg_ctl status -D [datadir]
コマンドの実行に成功し、かつコマンド実行結果を得られた場合、(4) へ進みます。
コマンドの実行に失敗した場合、もしくは実行結果として何も得られなかった場合、以下のメッセージをイベントログに出力後、監視失敗とみなして監視処理を終了します。
Error 113002 "The command [コマンド名] for PostgreSQL resource [リソース名] failed with a return code of [エラー値]. The command returned the following output: [コマンド実行結果文字列]"
(4) (3) で得られたコマンド実行結果から PostgreSQL が専有するポート番号を抽出します。
実行結果からポート番号が得られなかった場合、以下のメッセージをイベントログに出力後、監視失敗とみなして監視処理を終了します。
Error 113003 ”Unable to determine PostgreSQL status for resource [リソース名]. Port info missing from status check output: [ポート番号]."
また、実行結果から得られたポート番号と PostgreSQL リソースが保持するポート番号が一致しなかった場合、以下のメッセージをイベントログに出力後、監視失敗とみなして監視処理を終了します。
Error 113004 "The port [コマンドから得られたポート番号] returned from the status check does not match the resource [リソース名] port value: [リソースが持つポート番号]."
上記以外の場合、(5) へ進みます。
(5) psql コマンドを使用し、データベースへの接続確認を行います。
psql -p 5432 -U [ユーザ名] -c \dS -d template1 -w
コマンドの返値が 0 の場合、監視に成功したとみなして監視処理を終了します。
返値が 0 以外の場合、(6) へ進みます。
(6) psql コマンドを使用し、すべてのデータベースを出力します。
psql -p 5432 -U [ユーザ名] -l -w
コマンドの返値が 0 の場合、監視に成功したとみなして監視処理を終了します。
返値が 0 以外の場合、(5) と (6) のコマンド結果を使用して以下の 2つのメッセージをイベントログに出力後、監視失敗とみなして監視処理を終了します。
Error 113000 ”Unable to connect to the database instance for resource [リソース名]. Failed connection details: [コマンド実行結果]" Error 113564 ”The deepchk action failed for resource [リソース名]."
起動処理 (restore)
(1) リソース起動を行うにあたり、最初に以下のメッセージを出力します。
Information 113504 "LifeKeeper: BEGIN RESTORE action for PostgreSQL resource [リソース名] on server [ノード名]."
(2) Windows の sc コマンドを使用して得られるサービスのステータスから、PostgreSQL サービスの起動状態を確認します。
sc query [サービス名]
サービスのステータスが 4(Running) の場合、リソースが既に稼働しているとみなして (A) へ進みます。
サービスのステータスが 4(Running) 以外の場合、(3) へ進みます。
(3) Windows の sc コマンドを使用し、PostgreSQL サービスを起動します。
sc start [サービス名]
sc コマンドの実行に失敗した場合、リソースの起動に失敗したとみなして以下のメッセージをイベントログに出力して (B) へ進みます。
Error 113005 ”Failed to start the PostgreSQL server for resource [リソース名] on server [ノード名]. The command [実行したコマンド名] failed."
sc コマンドの実行に成功した場合、(4) へ進みます。
(4) Windows の sc コマンドを使用して得られるサービスのステータスから、PostgreSQL サービスの起動状態を確認します。
sc query [サービス名]
サービスのステータスが 4(Running) の場合、サービスが正常に起動したとみなして (5) へ進みます。
サービスのステータスが 1(Stopped) の場合、もしくは値を得られなかった場合、リソースの起動に失敗したとみなして (B) へ進みます。
サービスのステータスが上記以外の場合、5秒間待機した後に (4) の処理を繰り返します。この繰り返し処理は 12回行われます。
12回繰り返してもサービスのステータスとして 4(Running) を得られなかった場合、リソースを正常に起動できなかったとみなして以下のメッセージを出力した後に (B) へ進みます。
Error 113006 "Failed to start the PostgreSQL server for resource [リソース名] on server [ノード名]. Timed out waiting for the PostgreSQL service [サービス名] to reach the running state."
(5) 詳細チェック処理の (3) から (6) までの処理 を実行します。
本処理に成功した場合、リソースの起動に成功したとみなして (A) へ進みます。
本処理に失敗した場合、5秒間待機して (5) の処理を繰り返します。この繰り返し処理は 2回行われます。
2回繰り返しても失敗した場合、リソースの起動に失敗したとみなして (B) へ進みます。
(A) 起動処理に成功した場合、以下のメッセージを出力して起動処理を終了します。
Information 113500 "LifeKeeper: END successful RESTORE action for PostgreSQL resource [リソース名] on server [ノード名]."
(B) 起動処理に失敗した場合、以下のメッセージを出力して起動処理を終了します。
Error 113501 ”LifeKeeper: END failed hierarchy RESTORE for PostgreSQL resource [リソース名] on server [ノード名]. Failed with a return value of [エラーコード]."
停止処理 (remove)
(1) リソース停止を行うにあたり、最初に以下のメッセージを出力します。
Information 113524 "LifeKeeper: BEGIN REMOVE action for PostgreSQL resource [リソース名] on server [ノード名]."
(2) Windows の sc コマンドを使用して得られるサービスのステータスから、PostgreSQL サービスの起動状態を確認します。
sc query [サービス名]
サービスのステータスが 1(Stopped) の場合、リソースが既に停止しているとみなして (A) へ進みます。
サービスのステータスが 1(Stopped) 以外の場合、(3) へ進みます。
(3) Windows の sc コマンドを使用し、PostgreSQL サービスを停止します。
sc stop [サービス名]
sc コマンドの実行に失敗した場合、リソースの停止に失敗したとみなして以下のメッセージをイベントログに出力して (B) へ進みます。
Error 113007 "Failed to stop the PostgreSQL server for resource [リソース名] on server [ノード名]. The command [実行したコマンド名] failed."
sc コマンドの実行に成功した場合、(4) へ進みます。
(4) Windows の sc コマンドを使用して得られるサービスのステータスから、PostgreSQL サービスの起動状態を確認します。
sc query [サービス名]
サービスのステータスが 1(Stopped) の場合、サービスが正常に停止したとみなして (A) へ進みます。
サービスのステータス値を得られなかった場合、リソースの停止に失敗したとみなして (B) へ進みます。
サービスのステータスが上記以外の場合、5秒間待機した後に (4) の処理を繰り返します。この繰り返し処理は 12回行われます。
12回繰り返してもサービスのステータスとして 1(Stopped) を得られなかった場合、リソースを正常に停止できなかったとみなして以下のメッセージを出力した後に (B) へ進みます。
Error 113008 "Failed to stop the PostgreSQL server for resource [リソース名] on server [ノード名]. Timed out waiting for the PostgreSQL service [サービス名] to reach the stopped state."
(A) 停止処理に成功した場合、以下のメッセージを出力して停止処理を終了します。
Information 113520 "LifeKeeper: END successful REMOVE action for PostgreSQL resource [リソース名]" on server [ノード名]."
(B) 停止処理に失敗した場合、以下のメッセージを出力して停止処理を終了します。
Error 113521 "LifeKeeper: END failed hierarchy REMOVE for PostgreSQL resource [リソース名] on server [ノード名]. Failed with a return value of [エラーコード]."
回復処理 (recover)
(1) リソース回復処理を行うにあたり、最初に以下のメッセージを出力します。
Information 113584 "LifeKeeper: BEGIN RECOVERY action for PostgreSQL resource [リソース名] on server [サービス名]."
(2) Windows の sc コマンドを使用して得られるサービスのステータスから、PostgreSQL サービスの起動状態を確認します。
sc query [サービス名]
サービスのステータスが 1(Stopped) の場合、リソースが既に停止しているとみなして (5) へ進みます。
サービスのステータスが 1(Stopped) 以外の場合、(3) へ進みます。
(3) Windows の sc コマンドを使用し、PostgreSQL サービスを停止します。
sc stop [サービス名]
sc コマンドの実行に失敗した場合、リソースの停止に失敗したとみなして以下のメッセージをイベントログに出力して (B) へ進みます。
Error 113007 "Failed to stop the PostgreSQL server for resource [リソース名] on server [ノード名]. The command [実行したコマンド名] failed."
sc コマンドの実行に成功した場合、(4) へ進みます。
(4) Windows の sc コマンドを使用して得られるサービスのステータスから、PostgreSQL サービスの起動状態を確認します。
sc query [サービス名]
サービスのステータスが 1(Stopped) の場合、サービスが正常に停止したとみなして (5) へ進みます。
サービスのステータス値を得られなかった場合、リソースの停止に失敗したとみなして (B) へ進みます。
サービスのステータスが上記以外の場合、5秒間待機した後に (4) の処理を繰り返します。この繰り返し処理は 12回行われます。
12回繰り返してもサービスのステータスとして 1(Stopped) を得られなかった場合、リソースを正常に停止できなかったとみなして以下のメッセージを出力した後に (B) へ進みます。
Error 113008 "Failed to stop the PostgreSQL server for resource [リソース名] on server [ノード名]. Timed out waiting for the PostgreSQL service [サービス名] to reach the stopped state."
(5) Windows の sc コマンドを使用して得られるサービスのステータスから、PostgreSQL サービスの起動状態を確認します。
sc query [サービス名]
サービスのステータスが 4(Running) の場合、リソースが既に稼働しているとみなして (A) へ進みます。
サービスのステータスが 4(Running) 以外の場合、(6) へ進みます。
(6) Windows の sc コマンドを使用し、PostgreSQL サービスを起動します。
sc start [サービス名]
sc コマンドの実行に失敗した場合、リソースの起動に失敗したとみなして以下のメッセージをイベントログに出力して (B) へ進みます。
Error 113005 ”Failed to start the PostgreSQL server for resource [リソース名] on server [ノード名]. The command [実行したコマンド名] failed."
sc コマンドの実行に成功した場合、(7) へ進みます。
(7) Windows の sc コマンドを使用して得られるサービスのステータスから、PostgreSQL サービスの起動状態を確認します。
sc query [サービス名]
サービスのステータスが 4(Running) の場合、サービスが正常に起動したとみなして (8) へ進みます。
サービスのステータスが 1(Stopped) の場合、もしくは値を得られなかった場合、リソースの起動に失敗したとみなして (B) へ進みます。
サービスのステータスが上記以外の場合、5秒間待機した後に (7) の処理を繰り返します。この繰り返し処理は 12回行われます。
12回繰り返してもサービスのステータスとして 4(Running) を得られなかった場合、リソースを正常に起動できなかったとみなして以下のメッセージを出力した後に (B) へ進みます。
Error 113006 "Failed to start the PostgreSQL server for resource [リソース名] on server [ノード名]. Timed out waiting for the PostgreSQL service [サービス名] to reach the running state."
(8) 詳細チェック処理の (3) から (6) まで の処理を実行します。
本処理処理に成功した場合、リソースの起動に成功したとみなして (A) へ進みます。
本処理処理に失敗した場合、リソースの起動に失敗したとみなして (B) へ進みます。
(A) 回復処理に成功した場合、以下のメッセージを出力して回復処理を終了します。
Information 113580 "LifeKeeper: END successful RECOVERY action for PostgreSQL resource [リソース名] on server [ノード名]."
(B) 回復処理に失敗した場合、以下のメッセージを出力して回復処理を終了します。
Error 113581 "LifeKeeper: END failed hierarchy RECOVERY for PostgreSQL resource []リソース名 on server [ノード名]. Failed with a return value of [エラーコード]."
改訂履歴
[公開日:2018年1月31日]