※LifeKeeper for Linux v9.7.0 からオンラインマニュアルに MySQL Recovery Kit の処理概要が追加されました。
管理ガイドにある処理概要をご参照ください。
https://docs.us.sios.com/spslinux/9.7.0/ja/topic/application-recovery-kits
対象製品
MySQL Recovery Kit (LifeKeeper for Linux)
※本処理概要は LifeKeeper for Linux v9.1.1 に付属するリカバリキットをもとに作成しています。
起動処理
リソース作成時にご指定いただきました MySQL の設定ファイル (my.cnf) より、各情報を取得し、
後述致します項目により MySQL の起動操作および起動確認を実施いたします。
1) 停止状態の確認
監視処理と同一の項目を確認し、MySQL が停止状態にあることを確認します。
本項目において既に稼働状態にあると判断された場合、以降の起動操作は実施せずに起動処理は成功となります。
本項目において停止状態にあると判断された場合、以降の起動操作を実施します。
2) MySQL の通常起動
※ LifeKeeper for Linux v9.1.1 より systemd 環境での起動処理を追加しています。
・safe_mysqld または mysqld_safe コマンドを通じた MySQL の通常起動
# <実行パス>/<コマンド> --defaults-file=<設定ファイル> --datadir=<データディレクトリ> --user=<ユーザ名>
実行パス:リソース作成時に指定した MySQL のバイナリへのパス
コマンド:safe_mysqld または mysqld_safe が指定される
データディレクトリ:リソース作成時に取得したデータディレクトリ
ユーザ名:my.cnf の [mysqld] セクション内の [user] の値
・systemd 環境でのMySQL の起動
/usr/bin/systemctl start <サービス名>
3) 起動状態の確認
項目 2) を実行の後に 5秒待機し、監視処理と同一の項目を確認し、MySQLが稼働状態にあることを確認します。
本項目は稼働状態にあると判断されるまで、最大で MYSQL_START_MAX に指定された回数まで確認を実施します。
本項目において稼働状態あると判断された場合、起動は成功となり本処理は終了します。
4) 通常起動の再試行
項目 3) において起動状態を確認できない場合、項目 2) と項目 3) を再度実施します。
本項目は項目 3) において稼働状態と判断されるまで、最大で「MYSQL_RETRY_COUNT – 1」の回数、再試行されます。
5) safe_mysqld または mysqld_safe コマンドを通じた MySQL の強制起動
※systemd 環境の場合は、MySQL の強制起動処理はございませんので、
本処理は実施せずに、6) 以降の処理に推移します。
項目 4) において稼働状態と判断されない場合、本項目の動作へ移行します。
本項目は LKMYSQL_CNF_ONLY に 1 が指定されている場合、起動処理は失敗となります。
LKMYSQL_CNF_ONLY が未記載または、0 が指定されている場合、以降のコマンドが実行されます。
# <実行パス>/<コマンド> --user=<ユーザ名> --port=<ポート番号> --socket=<ソケット> --datadir=<データディレクトリ> --pid-file=<pidファイル> <ログオプション></pidファイル>
実行パス:リソース作成時に指定した MySQL のバイナリへのパス
コマンド:safe_mysqld または mysqld_safe が指定される
ユーザ名:my.cnf の [mysqld] セクション内の [user] の値
ポート番号:my.cnf の [mysqld] セクション内の [port] の値
ソケット:my.cnf の [mysqld] セクション内の [socket] の値
データディレクトリ:リソース作成時に取得したデータディレクトリ
PID ファイル:my.cnf の [mysqld] セクション内の [pid-file] の値
ログオプション:my.cnf の [mysqld] セクション内の [log] の値
※ 上記ログオプションにつきまして、
my.cnf 内の設定がある場合は、「–log=<[log] の値>」が指定され、
my.cnf 内の設定がない場合は、ログオプションがない状態で実行されます。
6) 起動状態の最終確認
項目 5) を実行の後に、監視処理と同一の項目を確認し、MySQL が稼働状態にあることを確認します。
本項目において稼働状態を確認できるまで、最大で MYSQL_START_MAX に指定された回数まで確認を実施します。
なお、稼働状態と判断されない場合の再試行が実施されるまでの間隔は 5秒 (固定) です
最終的に本項目において MySQL が稼働状態にないと判断された場合、起動処理は失敗となります。
停止処理
リソース作成時にご指定いただきました MySQL の設定ファイル (my.cnf) より、各情報を取得し、
後述致します項目により MySQL の停止操作および停止確認を実施いたします。
1) 稼働状態の確認と myqladmin コマンドを通じた停止
監視処理と同一の項目を確認し、MySQL が稼働状態にあることを確認します。
本項目において稼働状態にあると判断された場合、mysqladmin コマンドを通じた停止操作を実施します。
# mysqladmin -u <ユーザ名> --password=<パスワード> --socket=<ソケット> shutdown
ユーザ名:my.cnf の [client] セクション内の [user] の値
パスワード:my.cnf の [client] セクション内の [password] の値
ソケット:my.cnf の [mysqld] セクション内の [socket] の値
戻り値により上記コマンドが成功したと判断された場合、以降の停止操作は実施せずに停止処理は成功となります。
2-A) PID ファイルと稼働中プロセス ID の比較
MySQL の「PID ファイル」が存在する場合、
ps コマンドの出力中に MySQL の「PID ファイル」に記載された番号のプロセスが存在するか確認します。
PID ファイル:my.cnf の [mysqld] セクション内の [pid-file] の値
※ 本項目においてプロセスの存在が確認できない場合、既に停止状態にあると判断し、
以降の操作は実施せずに停止処理は成功となります。
2-B) 指定のポート番号とソケットを使用するプロセスの確認
MySQL の「PID ファイル」が存在しない場合に、
ps コマンドの出力中に、指定の「ポート番号」と「ソケット」を使用するプロセスが存在するか確認します。
ポート:my.cnf の [mysqld] セクション内の [port] の値
ソケット:my.cnf の [mysqld] セクション内の [socket] の値
※ 本項目においてプロセスの存在が確認できない場合、既に停止状態にあると判断し、
以降の操作は実施せずに停止処理は成功となります。
3) 親プロセスに対する SIGTERM による停止
項目 2-A) または 2-B) より確認したプロセス ID をもとに、ps コマンドから親プロセスを確認し、
親プロセスに対し SIGTERM を発行し、5秒 (固定)待機します。
4) 親プロセスに対する SIGKILL による停止
ps コマンドの出力中を確認し親プロセスが存在する場合は、未だに停止状態にない判断し、
親プロセスに対し SIGKILL を発行し、5秒 (固定) 待機します。
本項目は親プロセスが存在する間、最大で MYSQL_STOP_MAX に指定された回数まで、SIGKILL の発行を実施します。
5) SIGTERM による停止
項目 2-A) または 2-B) より確認したプロセス ID に対し SIGTERM を発行し、5秒 (固定) 待機します。
※ 本項において SIGTERM の発行に失敗している場合は、停止処理は失敗となります。
※ 本項において SIGTERM の発行に成功している場合は、停止処理は成功となります。
監視処理
リソース作成時にご指定いただきました MySQL の設定ファイル (my.cnf) より、各情報を取得し、
後述致します項目により MySQL の動作確認を実施いたします。
1) mysqladmin コマンドを通じた VARIABLES の参照
# mysqladmin -u <ユーザ名> --password=<パスワード> --socket=<ソケット> variables
ユーザ名:my.cnf の [client] セクション内の [user] の値
パスワード:my.cnf の [client] セクション内の [password] の値
ソケット:my.cnf の [mysqld] セクション内の [socket] の値
※ 本項目において VARIABLES が参照できた場合、稼働状態と判断します。
2-A) PID ファイルと稼働中のプロセス ID の比較
項目 1) において VARIABLES が参照できず、MySQL の「PID ファイル」が存在する場合に、
ps コマンドの出力中に、MySQL の「PID ファイル」に記載された番号のプロセスが存在するか確認します。
PID ファイル:my.cnf の [mysqld] セクション内の [pid-file] の値
※ 本項目においてプロセスの存在が確認できた場合、稼働状態と判断します。
2-B) 指定のポート番号とソケットを使用するプロセスの確認
項目 1) において VARIABLES が参照できず、MySQL の「PID ファイル」が存在しない場合に、
ps コマンドの出力中に、指定の「ポート番号」と「ソケット」を使用するプロセスが存在するか確認します。
ポート:my.cnf の [mysqld] セクション内の [port] の値
ソケット:my.cnf の [mysqld] セクション内の [socket] の値
※ 本項目においてプロセスの存在が確認できた場合、稼働状態と判断します。
回復処理
監視処理において、正常と判断されなかった場合に本処理が実施されます。
本処理におきましては、停止処理と起動処理を順に実施します。詳細は上述の各処理に関する記述をご参照ください。
本処理の内、起動処理の実施に失敗した場合は、リソース障害となりフェイルオーバーに至ります。
関連パラメータ
以下は、MySQL Recovery Kit のパラメータ名とその意味を説明しています。
これらの値は /etc/default/LifeKeeper 設定ファイルを編集することにより設定可能です。
MYSQL_START_MAX
単位:回
デフォルト:12 (ファイル中未記載)
影響範囲:リソースの起動処理および、回復処理
説明:起動処理において、MySQL の起動確認を本パラメータに指定された回数分、
起動が確認できるまで 5秒毎 (固定) に実施します。デフォルトでは最大 12回実施します。
MYSQL_STOP_MAX
単位:回
デフォルト:2 (ファイル中未記載)
影響範囲:リソースの停止処理および、回復処理
説明:停止処理において、MySQL の停止確認の際、残存プロセスがある場合に本パラメータに指定された回数分、
残存プロセスに対しSIGKILL を発行します。デフォルトでは最大 2回実施します。
MYSQL_RETRY_COUNT
単位:回
デフォルト:3 (ファイル中未記載)
影響範囲:リソースの起動処理および、回復処理
説明:起動処理において、MySQL の起動操作を本パラメータに指定された回数分、
動が確認できるまで実施します。デフォルトでは最大 3回実施します。
LKMYSQL_CNF_ONLY
単位:真偽 (1=真, 0=偽)
デフォルト:0 (ファイル中未記載)
影響範囲:リソースの起動処理
説明:起動処理において、safe_mysqld または mysqld_safe に引数で指定するパラメータを
MySQL の設定ファイル (my.cnf) に限定します。デフォルトでは 0 である為、限定しません。
改訂履歴
掲載日: 2016年01月29日
更新日:2019年10月31日