こんにちは、SCSKの前田です。
私が携わった LifeKeeper の案件で導入を行った ARK について紹介をかねてお話したいと思います。
今回は、MySQL編と言うことで、世界で広く利用されているリレーショナルデータベース管理システムとなるMySQLを簡単に冗長化するための ARK の導入事例について、ご紹介していきます。
おさらい
LifeKeeperのARKについて、おさらいしたいと思います。
ARK とは、Application Recovery Kits の略で、LifeKeeper が特定のアプリケーション(オープンソースソフトウェアや商用アプリケーション)を容易にリソースとして組み込むことが可能になる製品です。
ARK による、アプリケーションのリソースへの組み込みはウィザード形式(GUI上で設定)で作業が可能となり、ARK には、アプリケーションを操作(起動・停止・監視・再起動)するための4つのスクリプトがあらかじめ準備されているため、スクリプトを設計・作成するための開発工数の削減や人的なミスを防止することが出来ます。
概要説明
MySQL ARK では、MySQL を保護対象リソースとして登録し、保護する機能を提供します。
MySQL ARK では、複数の MySQL インスタンスを稼働させることが可能になっています。
複数の MySQL インスタンスを稼働させる時の考慮事項は以下通りになります。
複数の MySQL インスタンスを稼働に関する考慮事項
・複数の(同一もしくは異なるバージョンの) MySQL インスタンスを稼動させる場合、可能であれば mysqld グループの機能を使用することを考慮してください。MySQL ARK では、複数の MySQL インスタンス構成に対して mysqld グループ (mysqld_multi) を使用することが推奨されています。
・複数の MySQL インスタンスを稼働させる場合、共有ファイルシステムを /var/lib/mysql としてマウントしないでください。mysql 起動コマンド (safe_mysqld or mysqld_safe)により、MySQL サーバが予期せずシャットダウンされるためです。
・mysqld グループの機能を使用しない場合、 my.cnf ファイルは、各ノードのデータディレクトリに保存する必要があります。mysqld グループを使用する構成では、 my.cnf ファイルはデータディレクトリではなく /etc に保存してください。
・MySQL 用の追加のポート番号は、 /etc/services ファイルに指定する必要があります。
・各 MySQL インスタンスは、個別のポート上で稼働し、個別のソケットファイルにアクセスするように設定する必要があります。これらの設定オプションは、データディレクトリにある my.cnf ファイル内で指定してください。
・各ノードは、個別の共有の位置からデータにアクセスするように設定する必要があります(つまり、各サーバは個別のデータディレクトリを使用する必要があります)。
MySQL ARK は、汎用アプリケーション(Generic Application)リソースの導入とは違い、起動・停止・監視・再起動を行うためのスクリプトを明示的に指定することはなく、リソースの作成に必要な項目に対するパラメータをウィザード形式で入力または、選択することでリソースを作成することが出来ます。
MySQL ARK として MySQL の処理内容は以下の通りとなります。
MySQL の処理
処理名 | 処理内容 |
---|---|
起動処理 | ①監視処理と同一の処理を実施し、MySQL が停止状態であることを確認 ② ①で MySQL が停止状態である場合、safe_mysqld または mysqld_safe または systemctl コマンドにより MySQL インスタンスの起動を実施 ③ ②を実行後に 5秒待機し、監視処理と同一の処理を実施し、MySQL が稼働状態であることを確認(指定された回数分繰り返し確認を実施) ④ ③で MySQL の稼働状態が確認出来ない場合、②と③の処理を実施(稼働状態であると判断されるまで再試行の回数分繰り返す) ⑤ ④で MySQL の稼働状態が確認出来ない場合、safe_mysqld または mysqld_safe コマンドにより MySQL インスタンスの強制起動を実施 (systemd 環境の場合は、MySQL の強制起動処理は無く、⑥に進む) ⑥ ⑤を実行後に、監視処理と同一の処理を実施し、MySQL が稼働状態であることを最終確認(指定された回数分繰り返し確認を実施) ⑦ ⑥で MySQL の稼働状態が確認出来ない場合、起動処理は失敗となる |
停止処理 | ①監視処理と同一の処理を実施し、MySQL が稼働状態であることを確認 ②mysqladmin コマンドにより MySQL インスタンスの停止を実施 ③ ②で mysqladmin コマンドが成功と判断されない場合、PS コマンドにより MySQL インスタンスのプロセスの確認を実施 ④ ③で MySQL インスタンスのプロセスが確認された場合、親プロセスに対し SIGTERM を発行し、5秒 (固定)待機 ⑤ ④で親プロセスが停止しない場合、親プロセスに対し SIGKILL を発行し、5秒 (固定)待機(指定された回数分繰り返し SIGKILL の発行を実施) ⑥ ⑤で親プロセスが停止しない場合、③で確認した MySQL インスタンスのプロセスに対し SIGTERM を発行し、5秒 (固定) 待機 ⑦ ⑥でプロセスが停止しない場合、停止処理は失敗となる |
監視処理 | ①mysqladmin コマンドにより VARIABLES 変数の確認を実施(VARIABLES 変数が参照出来た場合、稼働状態と判断) ② ①で VARIABLES 変数が参照出来ず、MySQL の「PID ファイル」が存在する場合、ps コマンドにより「PID ファイル」に記載された番号のプロセスが存在するか確認を実施 MySQL の「PID ファイル」が存在しない場合、ps コマンドにより指定の「ポート番号」と「ソケット」を使用するプロセスが存在するか確認を実施 (プロセスの存在が確認出来た場合、稼働状態と判断) |
再起動処理 | 停止処理と起動処理を順に実施 |
MySQL ARK の構築例
それでは、実際に MySQL ARK の構築についてお話していきたいと思います。
まずは、MySQL のリソース作成時に設定する特有のパラメータを一覧表にまとめましたので紹介いたします。
MySQL ARK のパラメータ項目
項目 | 説明 |
---|---|
my.cnf のディレクトリーパス | MySQL 設定ファイル (my.cnf) が存在する場所のフルパス名 (ファイル名は除く) を選択または入力 |
MySQL 実行パス | MySQL データベースサーバデーモンの開始と監視に使用されるバイナリーのフルパス名選択または入力 |
SQL Server リソースの作成
MySQL リソースを LifeKeeper の GUI によって作成する流れを例として紹介します。
これで、LifeKeeper による MySQL のリソースが完成です。
まとめ
今回は LifeKeeper ARK の導入事例と言うことで、MySQL のリソース作成について紹介してみました。
MySQL ARK は、汎用アプリケーション(Generic Application)リソースとは違い、起動・停止・監視・再起動を行うためのスクリプトを準備する必要がなく、リソースを作成することで意識することなく自動でスクリプトが導入されます。
MySQL ARK では、複数の MySQLインスタンス が稼働させる環境にも対応しています。※「複数の MySQL インスタンスを稼働に関する考慮事項」を参照。
MySQL ARK を導入するための手順を纏めます。
・LifeKeeper GUI を用いて、MySQL のリソースを作成する
その他 ARK の導入事例に関しては以下のリンクからどうぞ!