EC2でMysqlのレプリケーションをしてみた

こんにちは!竹石です。

風雲麻雀記で「EC2でMysqlのレプリケーションをしましょう。」ということで、
EC2の無料インスタンスで試してみました。
※(風雲麻雀記は2016年01月14日をもってサービスを終了致しました。)

やること

  • EC2でインスタンスを2つ作成
  • Mysqlインストール
  • レプリケーション設定
  • バックアップを取る
  • サーバをターミネートする

とりあえず、t2.micro(750時間無料)といえど、750時間以上使うと
お金が発生しそうなので、バックアップを取って、サーバを落とすところまで。

1. EC2でインスタンスを2つ作成

まずは、AWSのコンソールにログインし、EC2を選択し、Launchボタンを押します。

EC2_Management_Console_start

ディストリビューションは一番上のAmazon Linuxを選択し、インスタンスタイプはt2.microを選択しました。

あとは、適当に秘密鍵を作成して、選択します。

EC2_Management_Console_key

これを2回繰り返す、もしくは、作成するインスタンス数を2に設定して作ります。

そして、セキュリティグループの設定をそれぞれします。

EC2_Management_Console_security

2つのサーバのMysqlが互いに通信できるように、

Inboundで3306ポートに対して、互いのPrivateIPを設定します。

EC2_Management_Console_setting

2. Mysqlインストール

この項目は、下記のブログに従って行うものとします。

http://promamo.com/?p=2933

3. レプリケーション設定

マスターサーバ
/etc/my.cnfに下記2行追加します。

[mysqld]
server-id = 1
log_bin

スレーブサーバに下記を追加します。

[mysqld]
server-id = 11
replicate-do-db=db名(対象DB指定だけど、この手順ではなくてもいい)

各Mysqlを再起動。

/etc/init.d/mysqld restart

マスターサーバのMysqlにログインし、スレーブサーバのユーザ作成とアクセスを許可。

grant replication slave on *.* to 'replication'@'スレーブサーバのPrivate IP' identified by 'pass'

マスターのステータスを確認。

show master status
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysqld-bin.000001 |     264 |              |                  |
+-------------------+----------+--------------+------------------+

スレーブサーバでマスターサーバを登録。

change master to master_host = 'マスターサーバのPrivate IP',
master_user = 'replication',
master_password = 'pass',
master_log_file = 'mysqld-bin.000001',
master_log_pos = 264

スレーブのステータスを確認。

show slave status¥G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: マスターサーバのPrivate IP
                  Master_User: replication
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysqld-bin.000001
          Read_Master_Log_Pos: 1368
               Relay_Log_File: mysqld-relay-bin.000001
                Relay_Log_Pos: 541
        Relay_Master_Log_File: mysqld-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

Slave_IO_Running: Yes、Slave_SQL_Running: Yesだったら設定できています。

だめなら、telnetとかで疎通確認してください。

yum install telnet
telnet 対象サーバ 3306

4. バックアップを取る

インストールしたアプリとか設定を保存しておけるようなので、下記のようにイメージを作成します。

スクリーンショット 2015-03-31 16.49.39

詳しい手順はここに書いてあります。

http://recipe.kc-cloud.jp/archives/276

できると、左のメニューのAMIsのところで見れます。

5. ターミネートする

スクリーンショット 2015-03-31 16.52.37

ちなみに、AMIsから復活させた場合、 PrivateIPとかは変わってしまうので、

セキュリティグループの設定と、マスター-スレーブの設定はもう一回やらないとダメでした!!

監視アプリの設定をしたりしないといけないので、Amazon RDS for MySQLを使った方がいいのかもしれませんが、

スレーブを増やすだけならEC2で簡単にできそうですね。

コメントを残す

メールアドレスが公開されることはありません。

ABOUTこの記事をかいた人

アバター

WEBアプリ開発をメイン業務としている。後輩エンジニアの育成リーダーとしても活躍中。社内勉強会の立ち上げなど、会社の前線でその能力を発揮している。2009年、株式会社ヘッドウォータース新卒入社。