2012年10月4日木曜日

【CentOS 6.2】MySQL MHA環境を構築して動かしてみた

■概要
前回インストールまで行ったので今回はその種サーバ的なものを元にMySQLMHAクラスタを構築して実際に動かしてみました
前回記事:http://kakakikikeke.blogspot.com/2012/10/centos-62mysql-mha_2.html

種サーバと同様のサーバを後3台作成しましょう
クラウド環境ならクローンすれば一瞬で終わりますが、そうでない場合は頑張ってあと3台同じ物を作成してください

また以下の記事では
  • mha0をマネージャノード
  • mha1をマスタノード
  • mha2, mha3をスレーブノード
として動作することを想定しております

■sshノンパス設定
以下の記事を参考にsshのノンパス設定を行なってください
http://kakakikikeke.blogspot.com/2012/03/10ssh.html
sshのノンパス設定は種となっている今回作成した3台+マネージャとなる種の1台の計4台の間で行えるように設定してください
種サーバにsshのノンパス設定を行ったあとに種サーバをクローンするとそれぞれでsshノンパスログインが勝手にできているようになっているので簡単です

■マスタノードの構築
service mysqld start
mysql -u root
mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'%' IDENTIFIED BY 'replpwd';
mysql> GRANT REPLICATION SLAVE ON *.* TO repl IDENTIFIED BY 'replpwd';
mysql> flush PRIVILEGES;
mysql> quit
vi /etc/my.cnf
log-bin
server-id=10
service mysql restart
mysql -u root
mysql> FLUSH TABLES WITH READ LOCK;
mysql> quit
cd /var/lib/
tar cvf - mysql|gzip -c > /tmp/var_lib_mysql.tgz
mysql -u root
mysql> SHOW MASTER STATUS;
mysql> UNLOCK TABLES;
mysql> quit
scp /tmp/var_lib_mysql.tgz mha2:/tmp
scp /tmp/var_lib_mysql.tgz mha3:/tmp
chkconfig mysqld on

■各スレーブノード構築
service mysqld start
service mysqld stop
cd /var/lib
mv mysql mysql.org
tar xvf /tmp/var_lib_mysql.tgz
cd mysql
rm -f *-bin.?????? *-bin.index
rm -f *.pid *.err
vi /etc/my.cnf
log-bin
server-id=20
service mysqld start
mysql -u root
mysql> CHANGE MASTER TO
-> MASTER_HOST = 'mha1',
-> MASTER_USER = 'repl',
-> MASTER_PASSWORD = 'replpwd',
-> MASTER_LOG_FILE = 'mysqld-bin.000001',
-> MASTER_LOG_POS = 106;
mysql -u root
mysql> START SLAVE;
chkconfig mysqld on

■マスタノードへのデータ投入とレプリケーション確認
mysql -u root
mysql> create database zzz;
mysql> grant all privileges on *.* to root with grant option;
mysql> flush privileges;
mysql -u root
show databases;
この段階でスレーブ側にzzzが作成されているのが確認できたので
マスタースレーブ構成のレプリケーション環境は構築できました

■マネージャサーバ設定とMHA構成確認及び起動
vi /etc/app1.cnf
[server default]
# mysql user and password
user=root
password=
ssh_user=root
# working directory on the manager
manager_workdir=/var/log/masterha/app1
# working directory on MySQL servers
remote_workdir=/var/log/masterha/app1

[server1]
hostname=mha1

[server2]
hostname=mha2

[server3]
hostname=mha3
masterha_check_ssh --conf=/etc/app1.cnf
masterha_check_repl --conf=/etc/app1.cnf
masterha_manager --conf=/etc/app1.cnf
masterha_check_status --conf=/etc/app1.cnf
上記コマンドは別の端末を開いて確認可能
masterha_stop --conf=/etc/app1.cnf
上記コマンドは別の端末を開いて実施
起動した端末でプロセスが終了していることを確認する
このあと動作確認を実施するので起動しておいてください

■MHA動作確認
マスタノードをシャットダウンする
shutdown -h
するとスレーブノードが自動的にマスターに昇格し
他のスレーブノード向き先が昇格したマスターノードに変更されている
スレーブノードにて以下のコマンドを実施して確認してみてください
mysql -u root
mysql> show slave status;
mysql> show master status;

ただ、注意していただきたいのは

ダウンしてしまったマスタは再起動後もマスタとしてして存在し続けます
そのため再起動後はマスタに昇格した元スレーブノードをマスタとして設定したあとに再度ダウンしたマスタをスレーブとして起動してあげる必要があります

そして、もう一点

一度MHAがおきるとマネージャで起動した「masterha_manager --conf=/etc/app1.cnf」のプロセスが死にます
なので、再度マネージャでプロセスを起動する必要があります


■その他
現在のマスターを調べる方法
[root@mha0 ~]# masterha_check_status --conf=/etc/app1.cnf
app1 (pid:4147) is running(0:PING_OK), master:mha1

0 件のコメント:

コメントを投稿