keepalived + MySQL-MHAでフェイルオーバー(その5 mysql5.5、5.6 混在環境でのフェイルオーバー編)

アドウェイズエンジニアのイシマルです。

4月から2013新卒の方が入られて、1ヶ月以上過ぎましたが、活気があってよいですね。


では、本題のmysql5.5、5.6 混在環境でのフェイルオーバー編を紹介します。

keepalivedMySQL-MHA等は、前回までの

keepalived + MySQL-MHA + xtrabackupで自動フェイルオーバーと手動ファイルバック(その1 keepalived編)
keepalived + MySQL-MHA + xtrabackupで自動フェイルオーバーと手動フェイル(その2 MySQL-MHA編)
keepalived + MySQL-MHA + xtrabackupで自動フェイルオーバーと手動フェイル(その3 xtrabackup編)
keepalived + MySQL-MHAでフェイルオーバー(その4 master_ip_failover_script編)

も参考にしてください。

■今回の要旨

* MySQL5.5、5.6が混在している環境で、フェイルオーバーするとどうなるか。
* MySQL5.5から5.6へのバージョンアップ手順

■環境

以下のように、MySQL5.5のサーバがマスターで、MySQL5.5のサーバ1台、MySQL5.6のサーバが2台スレーブで繋がっている状態で検証を行ないました。

mha

Manageサーバの設定

# vi /etc/app1.cnf
[server default]
manager_log=/var/lib/mysql_mha/log/masterha/app1/app1.log
manager_workdir=/var/lib/mysql_mha/masterha/app1
password=localtest_password
remote_workdir=/var/lib/mysql_mha/log/masterha/app1
ssh_user=mysql
user=root
master_ip_failover_script= /var/lib/mysql_mha/masterha/script/master_ip_failover

[server1]
hostname=192.168.0.101

[server2]
hostname=192.168.0.102

[server3]
hostname=192.168.0.103
candidate_master=1

[server4]
hostname=192.168.0.104


※優先的にマスターになるサーバを、db-003(MySQL5.6)にしています。
レプリケーション及びMHAの設定は、その2 MySQL-MHA編を参考にしてください。

■MySQL5.5、5.6が混在している環境で、フェイルオーバーするとどうなるか。

普通に考えるとこんなことはしないと思いますが、面白半分で、検証の為にやってみました。

MHAマネージャーが起動している状態で、Masterの「DBサーバ1」のMySQLを落として、フェイルオーバーさせます。

[root@db-001 ~]# /etc/init.d/mysql stop



結果 優先的にマスターになるサーバを、db-003(MySQL5.6)にしているにも関わらず
db-002(MySQL5.5)がマスターに昇格しました。

MHAのソースを少し見てみましたが、MHAはMySQLのバージョンも見て、oldest versionのslaveサーバを優先的にマスターに昇格させているようです。

■MySQL5.5から5.6へのバージョンアップ手順

なるべくサーバを止めないでバージョンアップするにはどうしたらよいでしょうか。
私が考えた結論としては、

1. Master以外のSlaveを全てMySQL5.6に1台ずつ順番にバージョンアップする。
2. MasterのMySQL(5.5)をシャットダウンして、フェイルオーバーする。
3. 元MasterのMySQLを5.6にバージョンアップし、新MasterにSlaveとして繋ぐ。

こんな手順ですかね。

mysql5.5、5.6 混在環境でのフェイルオーバー編は以上となります。