Amazon RDS for MySQLのクロスリージョン・リードレプリカを試す

記事タイトルとURLをコピーする
サーバーワークスの新坂です。



RDS for MySQLでクロスリージョン・リードレプリカ機能が発表されましたね。<br />
<span style="line-height: 1.6em;">Amazon Web Servicesブログの記事を見ますと、世界中のリージョンへデータベースをレプリケーションできるようです。すごいですね。クラウドですね。</span><br />
<a href="http://aws.typepad.com/aws_japan/2013/11/cross-region-read-replicas-for-amazon-rds-for-mysql.html" style="line-height: 1.6em;"><span style="line-height: 1.6em;">【AWS発表】 Amazon RDS for MySQLがクロスリージョン・リードレプリカを作成可能に</span></a>



<span style="line-height: 1.6em;">でもデータベースを世界へ複製するってパフォーマンスはどうなんでしょう、という疑問がわきます。ということで</span><span style="line-height: 1.6em;">試してみました。</span>



<!--more-->

リードレプリカ作成

まずはリードレプリカを作成してみます。マスターとなるDBインスタンス&rarr;「Instance Actions」&rarr;「Create Read Replica」を選択します。



<a href="http://corporate-tech-blog-wp.s3.amazonaws.com/tech/files/2013/12/2.png" rel="" style="" target="_blank" title=""><img alt="" class="alignnone size-full wp-image-25460" height="449" src="http://corporate-tech-blog-wp.s3.amazonaws.com/tech/files/2013/12/2.png" style="" title="2" width="597" /></a>



次に、レプリカ作成情報を設定します。ここで他のリージョンが選択できます。



<a href="http://corporate-tech-blog-wp.s3.amazonaws.com/tech/files/2013/12/3.png" rel="" style="" target="_blank" title=""><img alt="" class="alignnone size-full wp-image-25461" height="338" src="http://corporate-tech-blog-wp.s3.amazonaws.com/tech/files/2013/12/3.png" style="" title="3" width="594" /></a>



完了です。簡単ですね。



<a href="http://corporate-tech-blog-wp.s3.amazonaws.com/tech/files/2013/12/4.png" rel="" style="" target="_blank" title=""><img alt="" class="alignnone size-full wp-image-25462" height="208" src="http://corporate-tech-blog-wp.s3.amazonaws.com/tech/files/2013/12/4.png" style="" title="4" width="526" /></a>

レプリカの確認

今回は東京リージョンをマスターとして、サンパウロ・カルフォルニア・シンガポールの3リージョンにリードレプリカを作成しました。<br />
マスターDBインスタンスのページには、リードレプリカが別リージョンに作成されていることが表示されます。



<a href="http://corporate-tech-blog-wp.s3.amazonaws.com/tech/files/2013/12/5.png" rel="" style="" target="_blank" title=""><img alt="" class="alignnone size-large wp-image-25463" height="242" src="http://corporate-tech-blog-wp.s3.amazonaws.com/tech/files/2013/12/5-1024x433.png" style="" title="5" width="573" /></a>

レプリカの遅延

リージョンが異なるということは、ネットワーク的にも遠いということになりますから、データ反映ラグが気になるところです。<br />
簡単なスクリプトを作成して試してみました。

準備

テスト用に 列を1つ持つproduct テーブルを作成します。
CREATE TABLE product ( code VARCHAR(50) );
連続してレコードを挿入するスクリプトを作成します。ワンライナーで書けます。
for i in `seq 1000`; do mysql oreno -h mydb.******.ap-northeast-1.rds.amazonaws.com -uuser -ppassword --execute="INSERT INTO product (code) values ($i);"; done;
各リージョンのレコード数をSELECTするスクリプトを作成します。(非同期実行させます)
mysql oreno -h mydb.******.ap-northeast-1.rds.amazonaws.com   -uuser -ppassword --execute="select 'Tokyo'      as region,count(*) from productG"&
mysql oreno -h mydbsa.******.sa-east-1.rds.amazonaws.com      -uuser -ppassword --execute="select 'Sao Paulo'  as region,count(*) from productG"&
mysql oreno -h mydbca.******.us-west-1.rds.amazonaws.com      -uuser -ppassword --execute="select 'California' as region,count(*) from productG"&
mysql oreno -h mydbsg.******.ap-southeast-1.rds.amazonaws.com -uuser -ppassword --execute="select 'Singapore'  as region,count(*) from productG"&

テスト実行

連続レコード挿入ワンライナーを実行します。手元から東京リージョンのマスターDBへINSERTします。<br />
1秒間あたり、12レコードをINSERTできました。



並行して、各リージョンのレコード数をSELECTするスクリプトを実行して、レコード数の差異を確認してみます。

ある一瞬の結果

手元(東京)から実行しているので、SQL自体も近い順に届くのでしょう。<br />
あまり意味のない結果かもしれませんが、東京とサンパウロで12レコード差です。<br />
<strong>毎秒12レコードINSERTしていることと、ネットワーク遅延を考慮するとラグは1秒未満でしょうか。</strong>
リージョン レコード数
Tokyo 50,092
Singapore 50,094
California 50,097
Sao Paulo 50,104

CloudWatchで確認

上記のテストスクリプトを1時間ほど実行したところで、CloudWatchで確認します。

シンガポール

グラフに動きが現れません。測定限界値未満なのでしょうか。



<a href="http://corporate-tech-blog-wp.s3.amazonaws.com/tech/files/2013/12/11.png" rel="" style="" target="_blank" title=""><img alt="" class="alignnone size-full wp-image-25468" height="244" src="http://corporate-tech-blog-wp.s3.amazonaws.com/tech/files/2013/12/11.png" style="" title="シンガポール" width="388" /></a>

カルフォルニア

<span>こちらもグラフに現れません。</span>



<a href="http://corporate-tech-blog-wp.s3.amazonaws.com/tech/files/2013/12/12.png" rel="" style="" target="_blank" title=""><img alt="" class="alignnone size-full wp-image-25469" height="244" src="http://corporate-tech-blog-wp.s3.amazonaws.com/tech/files/2013/12/12.png" style="" title="カルフォルニア" width="388" /></a>

サンパウロ

時々1秒の遅延が確認できます。



<a href="http://corporate-tech-blog-wp.s3.amazonaws.com/tech/files/2013/12/13.png" rel="" style="" target="_blank" title=""><img alt="" class="alignnone size-full wp-image-25470" height="244" src="http://corporate-tech-blog-wp.s3.amazonaws.com/tech/files/2013/12/13.png" style="" title="サンパウロ" width="388" /></a>

まとめ

今回のテストは、データが極めて小さいということもあるかもしれませんが、テスト結果から推察するに、レプリケーション・ラグは秒単位というところでしょうか。<br />
CloudWatchでモニタリング・アラートすることも可能ですので、数秒のラグも問題になるような用途の場合は、ぜひとも活用したいところです。