Step-2ではミドルウェアレベルでの垂直分散を行います。具体的には「パブリックサブネット」内のEC2単体で賄っていたミドルウェアのうちMySQLを「プライベートサブネット」に「Amazon Aurora MySQL」を利用して切り出します。
垂直分散について調べてみましょう(10分)
RDS(Relational Database Service)、Auroraについて調べてみましょう(10分)
ここではStep-1で作成したEC2インスタンス内にあるMySQLを垂直分散させるために、10.0.2.0のプライベートサブネットに作るAurora用のセキュリティグループを作成します。サービスからEC2を選択しましょう
セキュリティグループタグからセキュリティグループの作成ボタンを押下
以下の設定値を設定しましょう。ルールの追加を押下
項目 | 設定値 |
---|---|
セキュリティグループ名 | db-ユーザ名 (例 db-user05) |
説明 | db-ユーザ名 (例 db-user05) |
VPC | 作成したVPCを指定 |
MySQL/Auroraを選択し、ソースのカラムでは web などのキーワードで補完させ自分が作成したwebサーバ用のセキュリティグループを選択しましょう。選択ご作成ボタンを押下
作成したセキュリティグループ(db-userXX)が作成されていることを確認しましょう
次にDB用のサブネットグループを作成します。サービスからRDSのリンクをクリック
左下のサブネットグループのリンクをクリックし、DBサブネットグループの作成ボタンを押下
サブネットグループの詳細を設定しましょう。名前は「db-subnet-userXX」XXは自身のユーザID、説明はなんでもいいです(名前をコピーでも)、VPCは自身が作ったVPC(vpc-userXX)を指定しましょう
引き続き下にスクロールしサブネットの追加を行いましょう。以降のオペレーションをアベイラビリティゾーン1d,1cで行います。アベイラビリティゾーンから1dを選択、プライベートネットワークの10.0.2.0を選択、サブネットを追加しますボタンを押下、下段に追加されていることを確認、アベイラビリティゾーンから1cを選択、プライベートネットワークの10.0.3.0を選択、サブネットを追加しますボタンを押下、下段に追加されていることを確認、最後に作成ボタンを押下
作成されていることを確認しましょう
これまでの準備を踏まえ、10.0.2.0のプライベートネットワークにRDS Auroraインスタンスを作成しましょう。インスタンスタブからインスタンスの起動ボタンを押下
Amazon Auroraを選択し次へボタンを押下
マスターパスワードは「vg1daypassword」を指定、DBインスタンスは一番上のdb.t2.smallを選択、その他は以下を確認しましょう。全て設定したら次へボタンを押下
項目 | 設定値 |
---|---|
DBインスタンスのクラス | db.t2.small |
マルチAZ配置 | いいえ |
DBインスタンス識別子 | db-userXX XXは自身のID |
マスターユーザの名前 | root |
マスターパスワード | vg1daypassword |
ネットワークセキュリティでは以下の設定をしましょう
項目 | 設定値 |
---|---|
Virtual Private Cloud (VPC) | 自分が作成したVPCを選択 |
サブネットグループ | 自分が作成したサブネットグループ「db-subnet-userXX」 |
パブリックアクセシビリティ | いいえを選択 |
アベイラビリティゾーン | ap-noatheast-1d |
VPCセキュリティグループ | 既存のVPCセキュリティグループの選択 |
VPCセキュリティグループを選択 | 作成したDB用のセキュリティグループを指定、合わせてdefaultは削除 |
データベースの設定は以下の設定をしましょう
項目 | 設定値 |
---|---|
DBクラスター識別子 | 設定しない |
データベースの名前 | sampledb |
データベースのポート | 3306 |
DBパラメータグループ | そのまま |
DBクラスターのパラメータグループ | そのまま |
一番下までスクロールし、拡張モニタリングを無効に設定、メンテナンス:マイナーバージョン自動アップグレードの無効化に設定、最後にDBインスタンスの作成ボタンを押下
削除保護はチェックを外しておく(普段はつけておいて良いが、消す時に手間がかかるので今回は外す
DBインスタンスの詳細の表示ボタンを押下
左のインスタンスのリンクをクリックし、右側に作成したAuroraインスタンスが表示されることを確認しましょう。ステータスが利用可能になるまでに数分掛かります
左のクラスターりのリンクをクリックし自分のユーザ名のあるクラスター識別子のリンクをクリックしましょう
クラスターエンドポイント、読み込みエンドポイントをメモしましょう。このエンドポイントがAuroraにアクセスする際に利用します
EC2サーバにSSH接続し、EC2サーバからAuroraに接続してみましょう。また作成したAuroraインスタンスが意図したセグメントに配置されているかも確認しましょう。
$ ssh -i 1day-userXX.pem -o StrictHostKeyChecking=no [email protected]
[ec2-user@ip-10-0-0-65 ~]$
クラスタエンドポイントを使用してAuroraに接続しましょう。読み書きの権限についても確認しましょう。
注意 db-userXX-cluster.cluster-cenae7eyijpr.ap-northeast-1.rds.amazonaws.comは各自のクラスタエンドポイントに直すこと。パスワードはAurora作成時に設定した内容を指定すること
$ mysql -uroot -p -hdb-user05-cluster.cluster-cenae7eyijpr.ap-northeast-1.rds.amazonaws.com
mysql> select @read_only;
+------------+
| @read_only |
+------------+
| NULL |
+------------+
1 row in set (0.00 sec)
mysql> exit
続いてネットワークセグメントの確認(クラスタエンドポイント)をしましょう
$ nslookup db-user05-cluster.cluster-cenae7eyijpr.ap-northeast-1.rds.amazonaws.com
Server: 10.0.0.2
Address: 10.0.0.2#53
Non-authoritative answer:
db-user05-cluster.cluster-cenae7eyijpr.ap-northeast-1.rds.amazonaws.com canonical name = db-user05.cenae7eyijpr.ap-northeast-1.rds.amazonaws.com.
Name: db-user05.cenae7eyijpr.ap-northeast-1.rds.amazonaws.com
Address: 10.0.2.226
読み込みエンドポイントを使用してAuroraに接続しましょう。読み書きの権限についても確認しましょう。
注意 db-userXX-cluster.cluster-ro-cenae7eyijpr.ap-northeast-1.rds.amazonaws.comは各自の読み込みエンドポイントに直すこと。パスワードはAurora作成時に設定した内容を指定すること
$ mysql -uroot -p -hdb-userXX-cluster.cluster-ro-cenae7eyijpr.ap-northeast-1.rds.amazonaws.com
mysql> select @read_only;
+------------+
| @read_only |
+------------+
| NULL |
+------------+
1 row in set (0.01 sec)
mysql> exit
続いてネットワークセグメントの確認(読み込みエンドポイント)をしましょう
$ nslookup db-user05-cluster.cluster-ro-cenae7eyijpr.ap-northeast-1.rds.amazonaws.com
Server: 10.0.0.2
Address: 10.0.0.2#53
Non-authoritative answer:
db-user05-cluster.cluster-ro-cenae7eyijpr.ap-northeast-1.rds.amazonaws.com canonical name = db-user05.cenae7eyijpr.ap-northeast-1.rds.amazonaws.com.
Name: db-user05.cenae7eyijpr.ap-northeast-1.rds.amazonaws.com
Address: 10.0.2.226
原始的なバックアップリストアの機能を用いてEC2インスタンスのMySQL内にあるサンプルアプリのデータをAuroraに移行します
EC2インスタンスにログイン(事前にログインしてる場合は割愛する)
$ ssh -i 1day-userXX.pem -o StrictHostKeyChecking=no [email protected]
[ec2-user@ip-10-0-0-65 ~]$
mysqldumpを使いEC2インスタンスMySQLからデータバックアップ。パスワードは設定した内容を指定(vg1daypassword)
$ mysqldump -u root -p sampledb > export.sql
Enter password:
[ec2-user@ip-10-0-0-65 ~]$ ll
合計 220
-rw-rw-r-- 1 ec2-user ec2-user 221255 3月 30 00:55 export.sql
EC2インスタンスのMySQLは今後使用しないので停止し、自動起動の設定を抑止しましょう
$ sudo systemctl stop mysqld
$ sudo systemctl disable mysqld
リストア
Auroraのクラスタエンドポイントを指定してexport.sqlをリストアしましょう
!注意! <
の向きを間違うとバックアップしたファイルを上書きしてしまうので注意すること
mysql -uroot -p -hdb-userXX-cluster.cluster-cenae7eyijpr.ap-northeast-1.rds.amazonaws.com sampledb < export.sql
Enter password:
今回は環境変数に指定しているので
$ sudo vi /etc/sysconfig/ec2-user
-DATASOURCENAME=root:vg1daypassword@tcp(127.0.0.1:3306)/sampledb
+DATASOURCENAME=root:vg1daypassword@tcp(db-userXX-cluster.cluster-cenae7eyijpr.ap-northeast-1.rds.amazonaws.com:3306)/sampledb
$ sudo systemctl restart 1dayapp
ブラウザでサンプルアプリが動いているEC2インスタンスのパブリック DNS (IPv4)を開きましょう。データリストア前と同様にサイトが表示されれば成功です。
ここまでのオペレーションでStep2は完了です!