LoginSignup
14
14

More than 5 years have passed since last update.

MySQL-MHAを導入してみる

Last updated at Posted at 2015-11-30

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

MySQL-MHAを導入してみる

MHA構成

# Server
mysql-dbm01:(mysqldb-master)
mysql-dbs01:(mysqldb-slave)
mysql-dbctl01:(mysql-mha-manager)

OS:CentOS6.5
MySQL:5.5.38

MySQLは既にインストール済みという前提で進めるので、もしまだインストールしてない場合は
下記手順を参考に準備しておいて下さい
CentOS6.5にMySQL5.5.38をインストールする手順
MySQLでレプリケーションを組んでみる
MySQLのmasterとslaveの手動切り替え

MHA構成に必要なパッケージのインストール

MySQLサーバへMHAノード(mha4mysql-node)をインストール

$ cd /usr/local/src
$ wget https://72003f4c60f5cc941cd1c7d448fc3c99e0aebaa8.googledrive.com/host/0B1lu97m8-haWeHdGWXp0YVVUSlk/mha4mysql-node-0.56-0.el6.noarch.rpm
$ yum localinstall mha4mysql-node-0.56-0.el6.noarch.rpm

$ rpm -ql mha4mysql-node

MHAマネージャ(mha4mysql-manager)をインストール

$ cd /usr/local/src
$ wget https://72003f4c60f5cc941cd1c7d448fc3c99e0aebaa8.googledrive.com/host/0B1lu97m8-haWeHdGWXp0YVVUSlk/mha4mysql-node-0.56-0.el6.noarch.rpm
$ wget https://72003f4c60f5cc941cd1c7d448fc3c99e0aebaa8.googledrive.com/host/0B1lu97m8-haWeHdGWXp0YVVUSlk/mha4mysql-manager-0.56-0.el6.noarch.rpm
$ yum localinstall mha4mysql-node-0.56-0.el6.noarch.rpm
$ yum localinstall mha4mysql-manager-0.56-0.el6.noarch.rpm
$ rpm -ql mha4mysql-manager

MHA構築前の事前準備

sshログイン出来る用に設定する

# mysql-dbctl01:(mysql-mha-manager)で鍵を作成し、他のサーバへも展開する
$ su - mysql
$ ssh-keygen -t rsa
$ cd /var/lib/mysql/.ssh
$ mv id_rsa.pub authorized_keys
$ chmod 600 authorized_keys

# myqlサーバ(master:slave)にもscpコマンドで配布する
$ scp id_rsa {user_name}@XXX.XXX.XXX.XXX:/var/lib/mysql/.ssh
$ scp authorized_keys {user_name}@XXX.XXX.XXX.XXX:/var/lib/mysql/.ssh

# 権限周りをmysqlユーザの600で設定しておく(mysql-dbm01, mysql-dbs01)
$ chown mysql:mysql /var/lib/mysql/.ssh/id_rsa
$ chown mysql:mysql /var/lib/mysql/.ssh/authorized_keys
$ chmod 600 /var/lib/mysql/.ssh/id_rsa
$ chmod 600 /var/lib/mysql/.ssh/authorized_keys

mysql側にmha用のユーザを作成しておく

mysql> GRANT ALL ON *.* TO 'mha'@'XXX.XXX.XXX.XXX' IDENTIFIED BY 'mha';
mysql> select user, host from mysql.user where user = 'mha';
+------+-----------------+
| user | host            |
+------+-----------------+
| mha  | XXX.XXX.XXX.XXX |
+------+-----------------+
1 row in set (0.00 sec)

ログ・作業ディレクトリの準備

# 今回は、manager_workdir・remote_workdirも同じディレクトリ構成にしたので
# mysql-mha-manager, mysqldb(master-slave)共に同じように用意します
$ sudo mkdir /var/lib/mha
$ chown mysql:mysql /var/lib/mha
$ chmod 755 /var/lib/mha

設定ファイルの作成

$ vim /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.XXX
[server2]
hostname=XXX.XXX.XXX.XXX

MHA接続最終確認

MHA構成のサーバ同士でSSH接続できるかを確認する

$ su - mysql
$ masterha_check_ssh --conf=/etc/mha.cnf
Mon Nov 30 16:33:45 2015 - [info] Reading default configuration from /etc/masterha_default.cnf..
Mon Nov 30 16:33:45 2015 - [info] Reading application default configuration from /etc/mha.cnf..
Mon Nov 30 16:33:45 2015 - [info] Reading server configuration from /etc/mha.cnf..
Mon Nov 30 16:33:45 2015 - [info] Starting SSH connection tests..
Mon Nov 30 16:33:49 2015 - [debug]
Mon Nov 30 16:33:45 2015 - [debug]  Connecting via SSH from mysql@10.34.74.182(10.34.74.182:22) to mysql@XXX.XXX.XXX.XXX(XXX.XXX.XXX.XXX:22)..
Mon Nov 30 16:33:49 2015 - [debug]   ok.
Mon Nov 30 16:33:50 2015 - [debug]
Mon Nov 30 16:33:45 2015 - [debug]  Connecting via SSH from mysql@10.34.74.255(10.34.74.255:22) to mysql@XXX.XXX.XXX.XXX(XXX.XXX.XXX.XXX:22)..
Mon Nov 30 16:33:50 2015 - [debug]   ok.
Mon Nov 30 16:33:50 2015 - [info] All SSH connection tests passed successfully.

こんなWARNINGが出た時の対応

Mon Nov 30 12:13:37 2015 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.

エラーの理由としては、デフォルトで共通設定用の/etc/masterha_default.cnfの設定ファイルを
読みにいくがファイルがないので出る警告です

まぁー無視してもいいのですが、WARNINGを出したくない場合は、空ファイルでもいいので、
とりあえずmasterha_default.cnfを作成しておくとよいです。

$ touch /etc/masterha_default.cnf

MHA構成内のDBサーバのレプリケーション確認

$ masterha_check_repl --conf=/etc/mha.cnf

ちなみに、MySQLユーザ権限周りが足りないとこんなエラー出ます

# masterha_check_repl --conf=/etc/mha.cnf実行したら、こんなエラーが出た
mysql command failed with rc 1:0!
 at /usr/bin/apply_diff_relay_logs line 375
    main::check() called at /usr/bin/apply_diff_relay_logs line 497
    eval {...} called at /usr/bin/apply_diff_relay_logs line 475
    main::main() called at /usr/bin/apply_diff_relay_logs line 120
Mon Nov 30 18:26:55 2015 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln205] Slaves settings check failed!
Mon Nov 30 18:26:55 2015 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln413] Slave configuration failed.
Mon Nov 30 18:26:55 2015 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln424] Error happened on checking configurations.  at /usr/bin/masterha_check_repl line 48
Mon Nov 30 18:26:55 2015 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln523] Error happened on monitoring servers.
Mon Nov 30 18:26:55 2015 - [info] Got exit code 1 (Not master dead).

MySQL Replication Health is NOT OK!

解決策

#myqlサーバ(master:slave)にmhaユーザの権限を付与した(IPは、mysqldbをいれる)
mysql> GRANT ALL ON *.* TO 'mha'@'XXX.XXX.XXX.XXX' IDENTIFIED BY 'mha';

#再度実行
MySQL Replication Health is OK.

MHAプロセス起動・確認・停止

# MHAプロセス起動
$ masterha_manager --conf=/etc/mha.cnf

# 別のターミナルでmysql-dbctl01:(mysql-mha-manager)へアクセスして確認
# MHAプロセス確認
$ masterha_check_status --conf=/etc/mha.cnf
mha (pid:2659) is running(0:PING_OK), master:XXX.XXX.XXX.XXX

# MHAプロセス停止
$ masterha_stop --conf=/etc/mha.cnf
Stopped mha successfully.

MHAプロセスをバックグラウンドで実行する

# MHAプロセス開始
$ nohup masterha_manager --conf=/etc/mha.cnf < /dev/null > /var/log/mha/mha.log 2>&1 &
[1] 3180

# MHAプロセス確認
$ masterha_check_status --conf=/etc/mha.cnf
mha (pid:3180) is running(0:PING_OK), master:XXX.XXX.XXX.XXX

# MHAプロセス停止
$ masterha_stop --conf=/etc/mha.cnf
Stopped mha successfully.
[1]+  Exit 1                  nohup masterha_manager --conf=/etc/mha.cnf < /dev/null > /var/log/mha/mha.log 2>&1

次回は、mha4mysql-managerのmaster_ip_failover使ってフェイルオーバ試す予定です。

14
14
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
14
14