CentOS 6.x + MySQL 5.6 + keepalive(1)
CentOS 6.x に MySQL 5.6を入れて準同期レプリケーションを行いつつ
KeepAliveでHAを・・・。
最近めっきりインフラの設定とかやってなかったんで久しぶりです。
間違えとか突っ込みどころは、気にせずに読んでる方が作業するときに気をつけて頂きたいです。
作業ユーザーはrootを想定していますのでそれ以外のユーザーは
suとかsudoとかお好きな方を。ちなみにsu派です。
新規にインストールしたCentOS6.x 2台にmysqlを入れます。
(CentOS7はMariaDBですもんね。後でやります。)
# rpm -qa | grep mysql
ずらずら何かインストールされているものが出る。
# rpm -y remove mysql*
mysql関連をごっそり消しまする。
# yum install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
# yum install mysql mysql-devel mysql-server mysql-utilities
必要な物を入れる。
#mysqld --version
mysqld Ver 5.6.31 for Linux on x86_64 (MySQL Community Server (GPL))
終わりました早いです。
# /etc/init.d/mysqld start
# mysqladmin -u root password '12345'
※テスト用に12345とかにしていますが、本番に脆弱なパスワードはやめてくださいw
マスターmysqlのレプリケーション設定を行う
/etc/my.cnfに次を書き込みます。
server-id=1001
log-bin=mysql-bin
保存後 mysqlをリスタートします。
# /etc/init.d/mysqld restart
mysqlにログインしバックアップを取得します。
# mysql -u root -p12345
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
違うターミナルを立ち上げてログインし
# cd /var/lib/
# tar /tmp/mysql.tar.gz mysql
mysqlにログインしているシェルで
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 120 | | | |
+------------------+----------+--------------+------------------+-------------------+
とすると今の状態が参照できます。後で使うのでメモをとっておくと便利です。
バックアップをとったのでロックを解除します。
mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)
レプリケーション用のユーザを作成します。
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '56789';
Query OK, 0 rows affected (10.00 sec)
※脆弱なパスワードはやめましょう。
ここでiptable(ファイアーウォール)を設定してる場合(ほとんどだとは思いますが・・)
iptables -A INPUT -s xx.xx.xx.xx -p tcp --dport 3306 -j ACCEPT とします。
(/etc/sysconfig/iptablesに書き込んでiptableをリスタートでも構いません。 as you like)
(外部通信用と内部通信用のnicは別が好ましいと思います。)
ちなみに今回はDB1に 192.168.0.51 を DB2に192.168.0.52を割り当てました。
(VPSの都合です。)
マスター側は設定が終わったのでmysqlをリスタート
#/etc/init.d/mysqld restart
次はスレーブ側を設定します。
# vi /etc/my.cnf
server-id=1002
を追加して保存します。この時この番号はマスター側と重複しないように気をつけます。
mysqlを停止します。
# /etc/init.d/mysqld stop
マスター側で作った mysql.tar.gzを転送し/var/libに移動
# cd /var/lib
# tar xvzf mysql.tar.gz
mysqlを起動
# /etc/init.d/mysqld start
mysqlのスレーブ設定。
# mysql -u root -p12345
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.0.51',
-> MASTER_USER='slave',
-> MASTER_PASSWORD='56789',
-> MASTER_LOG_FILE='mysql-bin.000003',
-> MASTER_LOG_POS=120;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
※ワーニング出てる
ユーザー、及びパスワードが脆弱だと言われてるのと
先の tar 解凍するときに /var/lib/mysql/auto.confもコピーしてきたのでこれが同じで怒られてる
/var/lib/mysql/auto.confを削除してmysqlを再起動
これで同期レプリケーションの設定はOK
マスター側で
# mysql -u root -p12345
mysql> create database test;
Query OK, 1 row affected (10.00 sec)
としtestデータベースを作りスレーブ側で
# mysql -u root -p12345
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
としてtestデータベースが存在することを確認。
後は色々とマスター側でmysqlのコマンドを発行しスレーブ側に反映されるか確認する。