新宿鮫:第4回AWSもくもく勉強会にいってきました。

今までAWSを、Eclipseから叩いたりコンソールから叩いたりしてきたのですが、
今回はRDSをイジってみようと思います。
 
■ RDSでMySQLインスタンスをマルチアベイラビリティゾーンで立てる
 
デフォルトはこの画面なのですが、

 
今回はせっかくなので新しいUIでやってみようと思います。

 
MySQLで。

 
Multi-AZ DeploymentをYesにします。(コレだけってのが半端ないですよね…)

 
そのままデフォルトで突っ走って、、(ほんとはセキュリティグループとかどのサブネットとかですが。。)

 
バックアップもなしで。。

 
Zoneがap-northeast-1aでSecondary Zoneがap-northeast-1cになりました。

 
 
■ EC2インスタンスからデータベースにアクセス
 
先日支払いに怯えてインスタンスを全てterminateしてしまったので、、

 
普通にEC2インスタンス立てたのですが、MySQLクライアントとか面倒臭いかなと思って
網元なWordPressのAMI使って立てました。

 
この楽チンさはたまらないですね〜

 
 
■ テーブルを作ってデータの出し入れをしてみる
 
SSHでEC2インスタンスに接続して、MySQLコマンドでRDSに接続して、
データベースを作ります。

mysql> create database hoge;
Query OK, 1 row affected (0.00 sec)

mysql> use hoge
Database changed

 
フザけたテーブル作ってすみません。。w

mysql> create table hage_tbl(
    ->    hage_id INT NOT NULL AUTO_INCREMENT,
    ->    hage_when VARCHAR(10) NOT NULL,
    ->    hage_why VARCHAR(10) NOT NULL,
    ->    hage_how VARCHAR(10) NOT NULL,
    ->    PRIMARY KEY ( hage_id )
    -> );
Query OK, 0 rows affected (0.09 sec)

 
インサート文を流してからクエリ投げてみます。良さげ。

[root@ip-10-134-128-186 ~]# cat hage.sql
insert into hage_tbl (hage_when, hage_why, hage_how) values ('20000102', 'natural', 'heavy');
[root@ip-10-134-128-186 ~]# mysql -hmydbinstance.cslehsosusgw.ap-northeast-1.rds.amazonaws.com -uawsuser -pxxxx -Dhoge < hage.sql
[root@ip-10-134-128-186 ~]# mysql -hmydbinstance.cslehsosusgw.ap-northeast-1.rds.amazonaws.com -uawsuser -pxxxx -Dhoge
〜略〜
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql> select * from hage_tbl;
+---------+-----------+----------+----------+
| hage_id | hage_when | hage_why | hage_how |
+---------+-----------+----------+----------+
|       1 | 20000102  | natural  | heavy    |
+---------+-----------+----------+----------+
1 row in set (0.00 sec)

 
って事で、カウント文なSQLも作って、

[root@ip-10-134-128-186 ~]# cat hage_select.sql
select count(*) from hage_tbl;
[root@ip-10-134-128-186 ~]# mysql -hmydbinstance.cslehsosusgw.ap-northeast-1.rds.amazonaws.com -uawsuser -pxxxx -Dhoge < hage_select.sql
count(*)
1

 
無限ループでdateコマンド&INSERT&SELECTして5秒スリープなんてシェル書いて、

#!/bin/sh
while :
do
  date
  mysql -hmydbinstance.cslehsosusgw.ap-northeast-1.rds.amazonaws.com -uawsuser -pxxxx -Dhoge < hage.sql
  mysql -hmydbinstance.cslehsosusgw.ap-northeast-1.rds.amazonaws.com -uawsuser -pxxxx -Dhoge < hage_select.sql
  sleep 5
done

流し続けながらフェールオーバーしてみます。
 
Zone: ap-northeast-1c で Secondary: Zone ap-northeast-1a なRDSを、、
#この前に一度フェールオーバーさせたので最初はaとc反対でしたが、ご容赦くださいw

 
Rebootしてやって、、

 
もちろん Reboot with Failover で。

 
Rebootingの間にスクリプトがピタっと止まりまして、、

 
availableになったので、スクリプトが再び動き出すかと思いきや。。。

 
結局15分くらい待ったのですが、ウンともスンとも言わないのでCtrl+Cしたら、、、

Wed May  8 20:43:51 JST 2013
count(*)
140
Wed May  8 20:43:56 JST 2013

^CCtrl-C -- sending "KILL QUERY 210" to server ...
Ctrl-C -- query aborted.
ERROR 2013 (HY000) at line 1: Lost connection to MySQL server during query
count(*)
140
Wed May  8 21:01:00 JST 2013
count(*)
141
Wed May  8 21:01:05 JST 2013
count(*)
142

 
ん…。コリはどういう事なのでしょうか…w
再開はしましたが、なんとも気味の悪い。。。
 
ググってみると、同じような思いをされてる方がいらっしゃるようですね。。
Amazon RDSのフェールオーバーを試してみたが – OpenGroove
 

何やら不完全燃焼気味ですが、Javaなアプリでコネクションプールとかの場合どうなんだ?とか、
引き続きイジってみたいなと思います。。
 
RDSだからMySQLのログとか見れなさそうだけど、とはいえ、、的な感じもありそうだし、
その辺ももうちと見てみたいなと思います。
 
ちなみに、最近ちょこちょこAWSイジってて、毎回落とすのも面倒くさいなぁと思って
ほったらかしてたら、先月はチョイチョイ請求されてた今日この頃ですw

 
 

Amazon Web Services クラウドデザインパターン実装ガイド
大澤 文孝
日経BP社
売り上げランキング: 12,170

 

Amazon Web Services クラウドデザインパターン 設計ガイド
玉川 憲 片山 暁雄 鈴木 宏康
日経BP社
売り上げランキング: 3,373

コメント

タイトルとURLをコピーしました