ex1-lab

Linux, CentOS, Mac OS X, Windows, 仮想化, Apache等のLinux中心に気になることをメモがわりに・・・

MySQL-MHAを設定する

    この記事は約10分で読むことができます。

MySQL-MHAをインストールして設定する

MySQL-MHAは、MySQLでレプリケーション構成時にMasterサーバが障害等で停止した場合に、自動的に自動的SlaveサーバーをMasterサーバに昇格してのダウンタイムで短くするツールです。障害時にも自動でフェイルオーバーはできるの大変便利なツールです。また手動でのフェイルオーバーもできます。

まずはMySQLのレプリケーション環境が必要ですので導入方法は以下の記事を参考にしてください

MySQLのレプリケーション設定

今回設定するサーバーのIPアドレス・用途等の仕様は以下となります。OSはCentOS 6.8でインストールしています

IPアドレス ホスト名 用途
192.168.11.100 mha MHAマネージャー
192.168.11.101 db01 MasterDB
192.168.11.102 db02 SlaveDB(Masterサーバ停止時にはMasterに昇格)
192.168.11.103 db03 SlaveDB

MHAマネージャーのインストール及び設定

MHA-Managerをインストールします。この作業はmha(192.168.11.100)で設定します。

インストールに必要なパッケージをインストールします。一部のパッケージではEPELからインストールが必要なためEPELを有効にします

MHA for MySQLのパッケージ(mha4mysql-node-0.56-0.el6.noarch.rpm、mha4mysql-manager-0.56-0.el6.noarch.rpm)を下記URLよりダウンロードします

https://github.com/yotoobo/linux/tree/master/mha

MHA for MySQLのパッケージは、SCP等で /usr/local/srcに配置しておきます。yum localinstallコマンドでMHA for MySQLのパッケージをインストールします

パスワード無しでSSHログインできるように設定する

全サーバが共通の設定で、パスワード無しでSSHログインできるように設定します。パスワード無しでログインできるユーザーは「admin」とします

最初に、mha(192.168.11.100)で鍵を作成し、他のサーバへも展開します

MHA for MySQLのパッケージをインストールします

この作業は、MasteDB(192.168.11.101)SlaveDB(192.168.11.102,192.168.11.103)で実施します。パッケージはhtps://github.com/yotoobo/linux/tree/master/mha よりダウンロードして「/usr/local/src」に配置しておきます

MySQLのMHA用ユーザー作成

全サーバが共通の設定です
MySQL側にmha用のユーザ(mha)を作成します。パスワードは「'apple314」とします。

MHAで使用するログ・作業ディレクトリを設定

全サーバが共通の設定です

ログディレクトリ・作業ディレクトリを作成します

 

MHA-Managerの設定ファイルの設定

この作業はmha(192.168.11.100)で設定します。

設定ファイル(mha.cnf)の作成して設定をしていきます

MySQL-MHAの動作確認

この作業はmha(192.168.11.100)で設定します。

MHAでサーバ間でSSHできるかの確認とサーバー間でレプリケーションの確認をおこないます。コマンドは「masterha_check_ssh --conf=/etc/mha.cnf」と叩きます。
# SSHできるか確認

SSHの接続確認で下記のような「[warning] Global configuration file 〜」と表示された場合は、/etc/masterha_default.cnfが無いと表示されるので、/etc/masterha_default.cnfを作成すればエラーは解消されます

レプリケーションの動作確認をおこないます。コマンドは「masterha_check_repl --conf=/etc/mha.cnf」と叩きます。

 

MHAプロセスの起動、停止及びプロセス確認

この作業はmha(192.168.11.100)で設定します。

MHAのプロセスの起動、停止、プロセスの確認する方法は以下となります。
MHAプロセスの起動ですが「masterha_manager --conf=/etc/mha.cnf」とすれば起動しますが、バックグランドで起動しないと他のコンソール作業ができないので、バックグランドで起動したほうがいいです

フェイルオーバーの動作確認

MasterDBを停止して、SlaveDBのdb02がMasterとして昇格するかテストしてみます。

この作業はMasterDB(192.168.11.101)で設定します。MasterDBのMySQLを停止します

ログを確認してフェイルオーバーしたか確認します。
Master failover to 192.168.11.102(192.168.11.102:3306) complete〜〜となっているので、192.168.11.102にフェイルオーバーしています。

この作業はdb02(192.168.11.102)で設定します。db02で「SHOW SLAVE HOSTS」を叩き、接続されているホストを確認します。db02がMasterとなり、db03とレプリケーションできていることが確認できます

MySQL-MHA フェイルオーバーの戻し作業

元MasterDBをSlaveとして接続する

元MasterDB(db01)をdb02のスレーブとして接続してレプリケーション環境に組み込みます

1. db02をポジションを確認します。後でdb01のスレーブとして設定時にポジション情報は必要なのでメモしておきます

2. db01のスレーブとして設定します。先程のMasterDBのポジション情報反映します

今のMasterを停止して元Masterに切り替える

masterha_master_switchコマンドで、db01のスレーブサーバをマスターに昇格させて、元々のMasterします。手順としては今のMasterのdb02のMySQLを停止させればdb01がMasterとなります。

但し、mha.failover.completeファイルが作成されると、一定時間(デフォルト:8時間)経過後しかフェイルオーバーができません。対処策はmha.failover.completeを削除するか、--ignore_last_failover オプションをつけることで無効化してMHAプロセスの起動します

mha.failover.completeが存在してもフェイルオーバーする方式での起動方法

今回の作業では、mha.failover.complete を削除してフェイルオーバーするようにします

MHAプロセス停止を停止してから、masterha_master_switchコマンドで、db01をMasterとするようにします。コマンドを叩くと対話式でdb01とMasterとするか聞いてきます。「Yes」で進んでいけばOKです

masterha_master_switchのドキュメント

masterha_master_switchコマンドの参考資料です

- conf
設定ファイルの指定
- master_state=dead
必須パラメータ。
masterが生きている状態で行う場合には「alive」を設定する。(オンラインマスタースイッチになる)
死んでる状態で切り替える場合には「dead」を設定する。

- dead_master_host =(ホスト名)
master_state=deadを指定した場合には、必須パラメータ。
死んでるとmasterの指定(死んでると仮定するmasterの指定)。

- dead_master_ip
gethostbyname(dead_master_host)の結果になる。

- dead_master_port
デフォルトは3306。

- new_master_host =(ホスト名)
新しいmasterの指定。デフォルトのmha managerの自動フェイルオーバーによるslaveの選択ではなくなる。

- interactive=(0 | 1)
0:非対話型フェイルオーバー
1:対話型フェイルオーバー

- ssh_reachable =(0 | 1 | 2)
masterにSSH経由で到達可能であるかどうかを指定します。
0:SSHが到達不可の場合
1:SSHが到達可能な場合
2:SSHが到達可能か不明の場合(デフォルト)
デフォルトの2が設定されている場合には、SSH接続が可能かチェックして、0または1にステータスを変更する。
このコマンドは、内部的にマスターはSSHまたはしない経由で到達可能かチェックし、0または1を使って内部のSSHステータスを更新します。
masterがSSH経由で到達可能である場合、master_ip_failover_script、shutdown_scriptが設定されている場合には、
" -command=stopssh"が実行される。
また、masterからバイナリーログがコピーされる。
設定されていない場合には、masterha_master_switchの" -command=stop"が実行される。

- skip_change_master
差動リレーのログを適用した後のCHANGE MASTER TOコマンドをスキップする。

- skip_disable_read_only
新しいmasterにread_only=0の設定をスキップする。

- last_failover_minute =(分)
以前のフェイルオーバーから指定された時間内に再度フェイルオーバーを実行することになった場合に、
フェイルオーバーを行わない。(デフォルトでは480分。8時間)。
ただし、ignore_last_failoverが設定されている場合には、無効になる。

- ignore_last_failover
以前フェイルオーバーが失敗した場合に再び同じ現象が起こる可能性があるので、、
last_failover_minuteで指定された時間を経過するまではフェイルオーバーを開始しないため、
それを無効化するためのもの。

- wait_on_failover_error =(秒)
フェイルオーバー失敗時に、指定された秒数待機してから終了する。
デーモンスクリプトから自動化されたmasterの監視とフェイルオーバー用に、再び監視させるまでの待機時間ように。

- remove_dead_master_conf
フェイルオーバーが正常終了した場合に、死んだmasterの設定ファイルのセクション名を削除する。(デフォルトは削除されない)



 - Linux , ,