[Linux] MySQL Recovery Kit の処理概要

対象製品
MySQL Recovery Kit (LifeKeeper for Linux)
※本処理概要は LifeKeeper for Linux v8.2.1 に付属するリカバリキットをもとに作成しています。

起動処理
リソース作成時にご指定いただきました MySQL の設定ファイル (my.cnf) より、各情報を取得し、
後述致します項目により MySQL の起動操作および起動確認を実施いたします。

1) 停止状態の確認

 監視処理と同一の項目を確認し、MySQL が停止状態にあることを確認します。

 本項目において既に稼働状態にあると判断された場合、以降の起動操作は実施せずに起動処理は成功となります。

 本項目において停止状態にあると判断された場合、以降の起動操作を実施します。

2) safe_mysqld または mysqld_safe コマンドを通じた MySQL の通常起動
 

# <実行パス>/<コマンド> --defaults-file=<設定ファイル> --datadir=<データディレクトリ> --user=<ユーザ名>

  実行パス:リソース作成時に指定した MySQL のバイナリへのパス
  コマンド:safe_mysqld または mysqld_safe が指定される
  データディレクトリ:リソース作成時に取得したデータディレクトリ
  ユーザ名:my.cnf の [mysqld] セクション内の [user] の値

3) 起動状態の確認

 項目 2) を実行の後に 5秒待機し、監視処理と同一の項目を確認し、MySQLが稼働状態にあることを確認します。

 本項目は稼働状態にあると判断されるまで、最大で MYSQL_START_MAX に指定された回数まで確認を実施します。

 本項目において稼働状態あると判断された場合、起動は成功となり本処理は終了します。

4) 通常起動の再試行

 項目 3) において起動状態を確認できない場合、項目 2) と項目 3) を再度実施します。

 本項目は項目 3) において稼働状態と判断されるまで、最大で「MYSQL_RETRY_COUNT – 1」の回数、再試行されます。

5) safe_mysqld または mysqld_safe コマンドを通じた MySQL の強制起動

 項目 4) において稼働状態と判断されない場合、本項目の動作へ移行します。

 本項目は LKMYSQL_CNF_ONLY に 1 が指定されている場合、起動処理は失敗となります。

 LKMYSQL_CNF_ONLY が未記載または、0 が指定されている場合、以降のコマンドが実行されます。
 

# <実行パス>/<コマンド> --user=<ユーザ名> --port=<ポート番号> --socket=<ソケット> --datadir=<データディレクトリ> --pid-file= <ログオプション>

  実行パス:リソース作成時に指定した 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日

return top