2011年8月16日火曜日

EC2でMySQL(リージョン間レプリケーション編)

前回に引き続き、MySQLの話です。
今回は、リージョン間でMySQLのレプリケーションを行います。
まずマスター用(Asia Pacific Tokyo)とスレーブ用(EU-West Ireland)、それぞれ1インスタンスずつ用意します。

ここでは、例として、
  • マスターのIP:mmm.mmm.mmm.mmm
  • スレーブのIP:sss.sss.sss.sss
  • データベース:clouadpack
  • レプリケーション用のユーザー:repl_user
  • レプリケーション用のパスワード:repl_pass
とします。
ここでは各IPはElasticIPでパブリックなIPを適用しておきます。

まず、マスター、スレーブ、それぞれでデータベースを作成します。
$ mysql -u root
mysql> create database cloudpack;
Query OK, 1 row affected (0.00 sec) 

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| cloudpack          |
| mysql              |
| performance_schema |
| test               |
+--------------------+

次にマスターサーバーで、スレーブサーバーからのアクセスを許可し、バイナリログを生成するようにします。
$ myql -u root 
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl_user@"sss.sss.sss.sss" IDENTIFIED BY 'repl_pass';
mysql> flush privileges;
# vi /etc/my.cnf
...
log-bin = /var/db/repl/binary-log
...
server-id = 1


スレーブサーバーでは、マスターサーバーの情報を登録します。
# vi /etc/my.cnf
...
server-id = 2
$ mysql -u root
mysql> CHANGE MASTER TO
  MASTER_HOST='mmm.mmm.mmm.mmm',
  MASTER_USER='repl_user',
  MASTER_PASSWORD='repl_pass',
  MASTER_PORT=3306;

それぞれのMySQLを起動するEC2のセキュリティグループに3306(MySQLポート。それ以外を使用する場合はそのポート番号)を互いのIPで許可します。


そして、マスターサーバー、スレーブサーバーの順で再起動します。
# /etc/init.d/mysqld restart 

実際に、レプリケーションが動いているか確認します。

マスター
$ mysql -u root cloudpack; 
mysql>
CREATE TABLE `hoge` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(256) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 
;
mysql> 
mysql> 
mysql> insert into hoge (name) values('moge');
Query OK, 1 row affected (0.02 sec)

スレーブ
$ mysql -u root cloudpack;  
mysql> show tables;
+---------------------+
| Tables_in_cloudpack |
+---------------------+
| hoge                |
+---------------------+
1 rows in set (0.00 sec)
mysql> 
mysql> 
mysql> select * from hoge;
+----+------+
| id | name |
+----+------+
|  1 | moge |
+----+------+
1 row in set (0.00 sec)

スレーブにも反映されていることが確認できました。
リージョン間の接続はオーバーインターネットになるため、SSL接続を行いたい場合は、suz-labのエントリーが参考になります。

今日は夏ばてにつき、ここまで。