LoginSignup
7
4

More than 5 years have passed since last update.

MHAを手動実行させてマスターを入れ替えてみる

Posted at

半年間、MySQLを基礎からやり直すことにしたので、その間に勉強したことをQiitaに投稿していきます。

前提条件

MHA環境下にあるレプリケーションが組んであるDBサーバが2台以上あること
※ MHAの導入・DBサーバ(MySQL)の準備は下記を参考にしてください
CentOS6.5にMySQL5.5.38をインストールする手順
MySQLでレプリケーションを組んでみる
MySQLのmasterとslaveの手動切り替え
MySQL-MHAを導入してみる

今回の目的

  • マスターサーバが生きている状態で、特定のスレーブサーバをマスターに昇格したい
  • マスターサーバが生きている状態で、特定のスレーブサーバをマスターに昇格して元マスターを新マスターのスレーブに入れ替えたい

今回使用するコマンド

masterha_master_switch

実施

特定のスレーブサーバをマスターに昇格させる

設定ファイルの確認

$ 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サーバで実施する際は、ちゃんと事前に検証してくださいね!!

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4