半年間、MySQLを基礎からやり直すことにしたので、その間に勉強したことをQiitaに投稿していきます。
前提条件
MHA環境下にあるレプリケーションが組んであるDBサーバが2台以上あること
※ MHAの導入・DBサーバ(MySQL)の準備は下記を参考にしてください
CentOS6.5にMySQL5.5.38をインストールする手順
MySQLでレプリケーションを組んでみる
MySQLのmasterとslaveの手動切り替え
[MySQL-MHAを導入してみる]
(http://qiita.com/shotaTsuge/items/7cd21707cdbaa336a822)
今回の目的
- マスターサーバが生きている状態で、特定のスレーブサーバをマスターに昇格したい
- マスターサーバが生きている状態で、特定のスレーブサーバをマスターに昇格して元マスターを新マスターのスレーブに入れ替えたい
今回使用するコマンド
実施
特定のスレーブサーバをマスターに昇格させる
設定ファイルの確認
$ cat /etc/mha.cnf
[server default]
# mha用に作成したmysqlユーザ情報
user=mha
password=mha
# mysqlのレプリ用ユーザ
repl_user=repli
repl_password=repli
# ログ・作業ディレクトリパス情報
# mysql-mha-managerのディレクトリパス
manager_workdir=/var/lib/mha
manager_log=/var/log/mha/mha.log
# mysqldb(master-slave)のディレクトリパス
remote_workdir=/var/lib/mha
# バイナリログのディレクトリパス
master_binlog_dir=/var/lib/mysql
# ssh接続ユーザ
ssh_user=mysql
# 現マスター
[server1]
hostname=XXX.XXX.XXX.XX1
# 新マスター
[server2]
hostname=XXX.XXX.XXX.XX2
[server3]
hostname=XXX.XXX.XXX.XX3
masterha_master_switchコマンドで指定したサーバをマスターに昇格させる
#################################################################################
# 事前にMHAサーバにSSHでログインして、mysqlユーザになっていること
# 事前にMHAプロセスは停止しておく事
#################################################################################
# new_master_hostに次にマスターにしたいサーバのIPを入力する
-bash-4.1$ masterha_master_switch --master_state=alive --conf=/etc/mha.cnf --new_master_host=XXX.XXX.XXX.XX2
# 問題なければyesと入力します
It is better to execute FLUSH NO_WRITE_TO_BINLOG TABLES on the master before switching. Is it ok to execute on XXX.XXX.XXX.XX1(XXX.XXX.XXX.XX1:3306)? (YES/no): yes
# 次のマスターが指定したサーバ(ポート)でいいか聞かれるのでyesと入力する
Starting master switch from XXX.XXX.XXX.XX1(XXX.XXX.XXX.XX1:3306) to XXX.XXX.XXX.XX2(XXX.XXX.XXX.XX2:3306)? (yes/NO): yes
# 今回は仮想IPの切り替えを行わないので、問題ないのでyesと入力します
master_ip_online_change_script is not defined. If you do not disable writes on the current master manually, applications keep writing on the current master. Is it ok to proceed? (yes/NO): yes
# completed successfullyと出れば完了です
Switching master to XXX.XXX.XXX.XX2(XXX.XXX.XXX.XX2:3306) completed successfully.
確認
$ mysql -uroot -e "show slave status\G"
$ mysql -uroot -e "show master status\G"
特定のスレーブサーバをマスターに昇格させて元マスターを新マスターのスレーブにする
設定ファイルの確認
※特定のスレーブサーバをマスターに昇格させる時と変更がないので省略します
masterha_master_switchコマンドで指定したサーバをマスターに昇格させて元マスターを新マスターのスレーブにする
#################################################################################
# 事前にMHAサーバにSSHでログインして、mysqlユーザになっていること
# 事前にMHAプロセスは停止しておく事
#################################################################################
# new_master_hostに次にマスターにしたいサーバのIPを入力する
# --orig_master_is_new_slaveをオプションをつけて元マスターを新マスターのスレーブにさせる
-bash-4.1$ masterha_master_switch --master_state=alive --conf=/etc/mha.cnf --new_master_host=XXX.XXX.XXX.XX2 --orig_master_is_new_slave
# 問題なければyesと入力します
It is better to execute FLUSH NO_WRITE_TO_BINLOG TABLES on the master before switching. Is it ok to execute on XXX.XXX.XXX.XX1(XXX.XXX.XXX.XX1:3306)? (YES/no): yes
# 次のマスターが指定したサーバ(ポート)でいいか聞かれるのでyesと入力する
Starting master switch from XXX.XXX.XXX.XX1(XXX.XXX.XXX.XX1:3306) to XXX.XXX.XXX.XX2(XXX.XXX.XXX.XX2:3306)? (yes/NO): yes
# 今回は仮想IPの切り替えを行わないので、問題ないのでyesと入力します
master_ip_online_change_script is not defined. If you do not disable writes on the current master manually, applications keep writing on the current master. Is it ok to proceed? (yes/NO): yes
# completed successfullyと出れば完了です
Switching master to XXX.XXX.XXX.XX2(XXX.XXX.XXX.XX2:3306) completed successfully.
確認
$ mysql -uroot -e "show slave status\G"
$ mysql -uroot -e "show master status\G"
まとめ
以下のドキュメントを見ると他にも仮想IPの付け替えも実施出来たりする様なので、興味がある人は是非試してみて下さい。
masterha_master_switch
とりあえず言える事は、masterha_master_switchコマンドを知ってるとマスター切り替え作業の時とかに便利なんで覚えておくといいと思います!
実際に、本番稼動中DBサーバのマスター切り替え(+仮想IP付け替え)とかでも使ってます。
※本番稼動中のDBサーバで実施する際は、ちゃんと事前に検証してくださいね!!