20120303 jaws summit-rds-public
TRANSCRIPT
Agenda
RDSとは
RDSデモ
RDSの機能
RDSの事例
RDSのTips§ パラメータチューニング
まとめ
Copyright © 2011 Amazon Web Services
Thursday, March 22, 12
AWSプラットフォーム
4
【仮想サーバ】Amazon EC2
【RDBMS】Amazon RDS
【ストレージ】
Amazon S3【コンテンツ配信】
CloudFront
データセンター
【ロードバランサー】
Amazon Elastic Load Balancing
データベース
サービス
ネットワーク&インフラ
【仮想ディスク】
Amazon Elastic Block store
エッジロケーション
【仮想ネットワーク】
Amazon VPC
【モバイルSDK】AWS SDK for Android
& iOS
【キューサービス】Amazon SQS
【NoSQL】Amazon SimpleDB
【プッシュサービス】Amazon SNS
【分散処理】Amzon Elastic MapReduce
【メール配信】Amazon SES
【コンテナ管理】AWS Elastic Beanstalk
【デプロイ管理】CloudFormation
【名前解決】Amazon Route 53
Thursday, March 22, 12
Amazon RDSとは?- 詳細 -2009年に登場したクラウド上RDBMSサービス
設定と運用が容易な”データベース in クラウド”
EC2同様、管理の容易なDBサーバを数分で起動
自動バックアップ、パッチ更新、レプリケーションおよびリードレプリカはAWSにお任せ
既存MySQL/Oracleアプリケーションとツールが利用可能
時間単位の従量課金 (DBインスタンスのクラスとリージョンで価格は変動)
6
Thursday, March 22, 12
自社構築 vs RDS
HWの購入ラックへ設
置電源とNWを設定
OSインストール
基本設定RDBMSインストール
RDBMSレプリケーション設定
RDBMS稼働確認
Thursday, March 22, 12
自社構築 vs. RDS
9
数分で起動可能か?単一APIコールまたは数クリックでスケールが可能か?
起動時に既に適切な設定がされているか?同期レプリケーションと自動フェイルオーバー(option)
ポイントインタイムリカバリバックアップやクローンの為のDBスナップショット管理
ハードウェアや完全な環境の制御自動パッチ更新(option)
既存MySQL製品との互換性コスト0でダッシュボードでCPU/メモリ等メトリクス
Thursday, March 22, 12
RDSコマンドラインRDS Command Line Tools§ http://aws.amazon.com/developertools/2928
§ 最新版は1.6.001 (API 2012-01-15)
Javaベース
§ AWS_RDS_HOME/JAVA_HOME設定
キーの提供
§ アクセスキーのペア
§ X.509の証明書
Thursday, March 22, 12
RDSコマンドラインrds-authorize-db-security-group-ingress rds-create-db-instance rds-create-db-instance-read-replica rds-create-db-parameter-group rds-create-db-security-group rds-create-db-snapshot rds-delete-db-instance rds-delete-db-parameter-group rds-delete-db-security-group rds-delete-db-snapshot rds-describe-db-engine-versions rds-describe-db-instances rds-describe-db-parameter-groups rds-describe-db-parameters rds-describe-db-security-groups
rds-describe-db-snapshotsrds-describe-engine-default-parametersrds-describe-eventsrds-describe-orderable-db-instance-optionsrds-describe-reserved-db-instancesrds-describe-reserved-db-instances-offeringsrds-modify-db-instancerds-modify-db-parameter-grouprds-purchase-reserved-db-instances-offeringrds-reboot-db-instancerds-reset-db-parameter-grouprds-restore-db-instance-from-db-snapshotrds-restore-db-instance-to-point-in-timerds-revoke-db-security-group-ingressrds-version
Thursday, March 22, 12
コマンドラインからRDSを起動するrds-create-db-instance yourdb --allocated-storage 5 --db-instance-class db.m1.small --engine mysql --master-username admin --master-user-password admin --availability-zone ap-northeast-1a --db-name hogedb --db-security-groups default --engine-version 5.5.8 --multi-az false --region ap-northeast-1
Thursday, March 22, 12
Javaから起動するpublic static void main(String[] args) throws IOException { AmazonRDS client = new AmazonRDSClient(…); client.setEndpoint("rds.ap-northeast-1.amazonaws.com"); CreateDBInstanceRequest req = new CreateDBInstanceRequest(); req.setDBInstanceIdentifier(“mydb"); req.setDBName(“mydb"); req.setMultiAZ(Boolean.FALSE); //マルチAZ設定 req.setDBInstanceClass(“db.m1.small”); //m1.smallを利用 req.setAllocatedStorage(new Integer(5)); // 5GB req.setDBSecurityGroups(Arrays.asList("default")); req.setEngine(“MySQL”); //MySQL 5.5.8を利用 req.setEngineVersion("5.5.8"); req.setMasterUsername("admin"); req.setMasterUserPassword("admin"); req.setAvailabilityZone(“ap-northeast-1a”);//AZを指定 //DBを作成する DBInstance result = client.createDBInstance(req);}
Thursday, March 22, 12
RDSのエンドポイントRegion Endpoint Protocol
US East (Northern Virginia) Region rds.us-east-1.amazonaws.com HTTPS
US West (Oregon) Region rds.us-west-2.amazonaws.com HTTPS
US West (Northern California) Region rds.us-west-1.amazonaws.com HTTPS
EU (Ireland) Region rds.eu-west-1.amazonaws.com HTTPS
Asia Pacific (Singapore) Region rds.ap-southeast-1.amazonaws.com HTTPS
Asia Pacific (Tokyo) Region rds.ap-northeast-1.amazonaws.com HTTPS
Thursday, March 22, 12
RDS(MySQL) の全体アーキテクチャ
29
アベイラビリティゾーンA アベイラビリティゾーンB
自動バックアップ
スナップショット
自動バックアップ
スナップショット
データ同期
非同期レプリケーション
自動フェイルオーバー
Thursday, March 22, 12
RDS(MySQL) アーキテクチャ
30
アベイラビリティゾーンA アベイラビリティゾーンB
自動バックアップ
スナップショット
自動バックアップ
スナップショット
データ同期
非同期レプリケーション
自動フェイルオーバー
マルチAZデプロイメント(マルチAZ)
Thursday, March 22, 12
マルチAZデプロイメントとは(マルチAZ)
ワンクリックで適用可能な耐障害性を高めるソリューション
§ 高い技術力を持つDBAが行っていた設計をそのままサービス化
同期レプリケーション+自動フェイルオーバ§ アプリ側での対処は必要なし
フェイルオーバのタイミング
§ パッチ適用などのメンテナンス計画停止
§ インスタンスやハードウェア障害
31
Thursday, March 22, 12
RDS(MySQL) アーキテクチャ
32
アベイラビリティゾーンA アベイラビリティゾーンB
自動バックアップ
スナップショット
自動バックアップ
スナップショット
データ同期
非同期レプリケーション
自動フェイルオーバー
リードレプリカ
Thursday, March 22, 12
リードレプリカとは?特定DBインスタンスの読み込み用のコピー
想定ユースケース
§ リードのスケーリング、ビジネスレポート
§ マルチAZの耐障害性の代替の機能ではないマルチAZとは異なり、MySQL本来の非同期レプリケーションをそのまま使う
最大5台まで設定可能
マルチAZとリードレプリカを併用はもちろん可能
33
Thursday, March 22, 12
RDS(MySQL) アーキテクチャ
34
アベイラビリティゾーンA アベイラビリティゾーンB
自動バックアップ
スナップショット
自動バックアップ
スナップショット
データ同期
非同期レプリケーション
自動フェイルオーバー
自動バックアップ機能
Thursday, March 22, 12
自動バックアップ機能
RDS標準装備
1日1回+トランザクションログ
保存期間は最大8日間§ それ以降はスナップショット保存
5分前までの任意の期間に復元可能
35
Thursday, March 22, 12
スケールアップ機能マネージメントコンソールからスケールアップ可能
§ 一度停止が必要 (Multi-AZを有効にしていれば停止時間を少なくきる)
コマンドラインからも勿論可能§ 例:rds-modify-db-instance hogedb -c db.m1.large --apply-immediately
CPUは1ECUから26ECUまで
メモリは1.7GBから68GBまで
ディスクは5GBから1TBまで
§ 大量書き込みなどスケールアウトでの対処が難しい場合にスケールアップで対処可能
§ 増量できても削減できないので注意が必要
36
Thursday, March 22, 12
Oracle RDSとは
2011年Q2ロウンチ
§ Oracle Database 11g Release 2Oracle Database SE1, SE, EE + オプションパック
ライセンス持ち込み(BYOL) か 従量課金(時間単位)
初期はシングルインスタンスでレプリケーションなどはすぐに機能追加の予定
OracleVMのハードパーティショニングで稼働
40Thursday, March 22, 12
RDSのOracleサポートライセンス持ち込み(BYOL)
§ RDS部分についてはAWSプレミアムサポート (インフラ部分含む)
§ AWSがパッチとアップグレードを管理
§ Oracleデータベースに関してはOracleサポートIDを使ったOracle社のサポート
従量課金ライセンス
§ RDS部分およびOracleに関してもAWSプレミアムサポートでカバー
41
Thursday, March 22, 12
RDSプライシング注意点
マルチAZでは価格は2倍になる
ストレージで$0.12/GB
IOで$0.12/100万リクエスト
バックアップ用ストレージは無料
RDS用リザーブドインスタンスもご提供§ 1年間、3年間のコミットによる価格を大幅削減
46
Thursday, March 22, 12
Oracle RDSプライシング
複数ライセンスオプションが今後利用可能に§ 既存のOracleライセンス§ OracleまたはOracleパートナーから新規にOracleライセンスを購入
§ Amazonからの従量課金制での利用
Amazon RDSの2つのプライシングモデル§ オンデマンドな時間単位の従量課金モデル§ Amazon RDS リザーブドインスタンス
47
Thursday, March 22, 12
Gumiさんのサーバー構成
ゾーンA
Appサーバ
Cacheサーバ
KVSサーバ
AppサーバAppサーバ
KVSサーバ
c1.xlarge - 60台
m1.large- 4台 m1.large
- 8台 x 2
ゾーンB
ELB
RDS- マルチAZ
同期
Thursday, March 22, 12
gumi事例: AWS運用モデル
複数のゲームをAWSで運用(全体で25億PV/月)§ 最大ゲーム1本で6000万PV/日§ ゲーム毎に、ELB+EC2+RDSの同じセットを再利用
人気ゲーム ゲームA ゲームB ゲームC
Appサーバ
Cacheサーバ
KVSサーバ
AppサーバAppサーバ
KVSサーバ
ELB
Appサーバ
Cacheサーバ
KVSサーバ
Appサーバ
Appサーバ
KVSサーバ
ELB
Appサーバ
Cacheサーバ
KVSサーバ
Appサーバ
Appサーバ
KVSサーバ
ELB
Appサーバ
Cacheサーバ
KVSサーバ
Appサーバ
Appサーバ
KVSサーバ
ELB
Thursday, March 22, 12
gumi事例: AWS運用モデル
複数のゲームをAWSで運用(全体で25億PV/月)§ 最大ゲーム1本で6000万PV/日§ ゲーム毎に、ELB+EC2+RDSの同じセットを再利用
人気ゲーム ゲームA ゲームB ゲームC
インフラエンジニアは1名!(~2011/8、今は3名!)
Appサーバ
Cacheサーバ
KVSサーバ
AppサーバAppサーバ
KVSサーバ
ELB
Appサーバ
Cacheサーバ
KVSサーバ
Appサーバ
Appサーバ
KVSサーバ
ELB
Appサーバ
Cacheサーバ
KVSサーバ
Appサーバ
Appサーバ
KVSサーバ
ELB
Appサーバ
Cacheサーバ
KVSサーバ
Appサーバ
Appサーバ
KVSサーバ
ELB
Thursday, March 22, 12
gumi事例: AWS運用モデル
ゲームのライフサイクルにあわせて、サーバー台数、サーバースペックを調整
開発時
Appサーバ
1台にまとめて個人毎に
Appサーバ
ELB
ゾーンA
Appサーバ
Cacheサーバ
KVSサーバ
AppサーバAppサーバ
KVSサーバ
c1.xlarge - 60台
m1.large- 4台 m1.large
- 8台 x 2
ゾーンB
ELB
RDS- マルチAZ
同期
Thursday, March 22, 12
gumi事例: AWS運用モデル
ゲームのライフサイクルにあわせて、サーバー台数、サーバースペックを調整
開発時
Appサーバ
申請時
1台にまとめて個人毎に
最小構成に
Appサーバ
ELB
ゾーンA
Appサーバ
Cacheサーバ
KVSサーバ
AppサーバAppサーバ
KVSサーバ
c1.xlarge - 60台
m1.large- 4台 m1.large
- 8台 x 2
ゾーンB
ELB
RDS- マルチAZ
同期
Thursday, March 22, 12
gumi事例: AWS運用モデル
ゲームのライフサイクルにあわせて、サーバー台数、サーバースペックを調整
開発時
Appサーバ
申請時 公開時
1台にまとめて個人毎に
最小構成にAppサーバーを8台DBをマルチAZに(m1.large)
Appサーバ
ELB
ゾーンA
Appサーバ
Cacheサーバ
KVSサーバ
AppサーバAppサーバ
KVSサーバ
c1.xlarge - 60台
m1.large- 4台 m1.large
- 8台 x 2
ゾーンB
ELB
RDS- マルチAZ
同期
Thursday, March 22, 12
gumi事例: ピーク時のさばき方
突発的な対応が必要なときは、EC2、RDSのスペックを上げて、時間をかせぐ
Appサーバ
Cacheサーバ
KVSサーバ
AppサーバAppサーバ
KVSサーバ
ELB
m1.large
メモリ 7.5GBCPU 4ECU
Thursday, March 22, 12
gumi事例: ピーク時のさばき方
突発的な対応が必要なときは、EC2、RDSのスペックを上げて、時間をかせぐ
Appサーバ
Cacheサーバ
KVSサーバ
AppサーバAppサーバ
KVSサーバ
ELB
m1.large
メモリ 7.5GBCPU 4ECU
m2.4xlarge
メモリ 68GBCPU 26ECU
Thursday, March 22, 12
gumi事例: バックアップの仕組み
データベース部分
§ RDSのポイントインタイムリカバリを利用(8日分)• 5分前以前の何時の時点にも戻せる
§ 8日前以前の分については、 手動スナップショットを利用する
Thursday, March 22, 12
gumi事例: モニタリング
CloudWatch + SNS
§ CloudWatch + SNSで負荷やディスク残量を監視
§ ディスクク容量が少なくなるとメールで通知
Thursday, March 22, 12
Gumiさんの事例からわかる事
非常にスケールが必要なアプリケーションでもRDSは有効§ スケールアップ
§ スケールアウト(リードレプリカ)
DBの管理コストを劇的に削減し、アプリケーションを構築する部分にリソースを集中できる
RDSの柔軟さを活用する事で、ピークにもあわてず対応できる
Thursday, March 22, 12
RDSのTips
DBセキュリティグループ
RDSへのデータの移行
パラメーターチューニング
タイムゾーンに関して
メトリクス
マルチAZに関しての考え方
いつRDSを使うべきか
Thursday, March 22, 12
DBセキュリティグループ
RDS専用のセキュリティグループ§ EC2のセキュリティグループを許可する
• または§ CIDRで許可する
rds-create-db-security-group hoge --db-security-group-description "foo"rds-authorize-db-security-group-ingress hoge -g bar -o $ACCOUNT_ID -o:アカウントID -g:EC2セキュリティグループ名rds-revoke-db-security-group-ingress hoge -o $ACCOUNT_ID -g bar
Thursday, March 22, 12
RDSへのデータの移行MySQLを使った一例§ mysqldump
• 少量データの場合直接インポート
§ mysqlimportでバルクインポート• フラットなファイルで複数に分割、圧縮
• RDSを一旦停止、スナップショット作成
• スナップショットから新DB作成
• 自動バックアップを一旦停止
• mysqlimportでのデータのロード
• 自動バックアップ復旧
• サービス再開
Thursday, March 22, 12
パラメータチューニング
ManagementConsoleからは出来ない
DBパラメータグループを作成して、パラメータをチューニングする§ RDSコマンドを使う必要がある
• rds-create-db-parameter-group• rds-modify-db-parameter-group
//Slow queryを取得するよう変更した例rds-modify-db-parameter-group group1
-p "name=slow_query_log, value=ON, method=immediate" -p "name=long_query_time, value=1, method=immediate"
-p "name=min_examined_row_limit, value=100, method=immediate"
Thursday, March 22, 12
パラメータチューニング(2)
$ rds-describe-db-parameters group1 --source userDBPARAMETER long_query_time 1 user integer dynamic trueDBPARAMETER min_examined_row_limit 100 user integer dynamic trueDBPARAMETER slow_query_log 1 user boolean dynamic true
$ rds-describe-db-parameters group1 --source userDBPARAMETER long_query_time engine-default integer dynamic true DBPARAMETER min_examined_row_limit engine-default integer dynamic trueDBPARAMETER slow_query_log engine-default boolean dynamic true
Thursday, March 22, 12
パラメータチューニング(3)
注意点§ チューニング出来る項目と出来ない項目がある
• タイムゾーンは変更不可・・・
§ rds-describe-db-parametersを使ってチェック§ または、ManagementConsoleでチェック
Thursday, March 22, 12
タイムゾーンに関して
rds-describe-db-parametersで見てみると、タイムゾーンは変更不可能な設定項目§ アプリケーション側でJSTなど適切なタイムゾーンを指定する必要あり
§ init_connectパラメータによる、タイムゾーンの設定は現状保証されない
Thursday, March 22, 12
メトリクスと監視CloudWatchにてRDSメトリクスを監視メトリクス名 説明BinLogDiskUsage マスターのバイナリログサイズCPUUtilization CPU利用量DatabaseConnections DBのコネクション数FreeableMemory 使えるメモリ量FreeStorageSpace 使えるディスクスペースReadIOPS 読み込みの平均IOPSReadLatency 読み込みのレイテンシReadThroughput 読み込みスループットReplicaLag リードレプリカのタイムラグSwapUsage DBで使用しているスワップWriteIOPS 書き込みの平均IOPSWriteLatency 書き込みのレイテンシWriteThroughput 書き込みスループット
Thursday, March 22, 12
メトリクスと監視(2)Amazon RDS Eventsでも監視可能§ ManagementConsoleで監視
§ rds-describe-events
Thursday, March 22, 12
MultiAZにおけるリードレプリカの更新停止に関して(MySQL)
MultiAZ環境でフェイルオーバしたタイミングでリードレプリカの更新の伝播が停止する可能性がある§ 常にそうなるわけではない
非同期のMySQLレプリケーション§ binlogがディスクにフラッシュされていない状況下で、フェイルオーバした場合に稀に発生
§ レプリケーションのコストとの兼ね合い
Thursday, March 22, 12
MultiAZにおけるリードレプリカの更新停止に関して(MySQL)(2)対応策1
§ rds-modify-db-parameter-groupで• binlogの同期:sync_binlog=1
• 2PCコミット:innodb_support_xa=1
• http://dev.mysql.com/doc/refman/5.1/en/binary-log.html
対応策2
§ 問題が発生した場合に、リードレプリカを再度作り直す
Thursday, March 22, 12
マルチAZに対しての考え方
良く聞く声:マルチAZでマスターをWebアプリと同一のAZに割り当てたい
マインドシフトが必要§ マルチAZでWebアプリが構築されていれば、RDSのマスターがどちらにあるかは意識しなくてよい
§ マルチAZでの複数DCが利用できるものを最大限に活かしてWebアプリのコンポーネントを分散して配置するのが重要
Thursday, March 22, 12
いつRDSを使うべきか
RDSの代替案§ Amazon SimpleDB§ EC2上でMySQLやOracleを展開
vs SimpleDB§ シンプルなクエリ、堅牢性・管理不要を追及したい場合はSimpleDB
§ 既存MySQLの知識やツールを使いたい場合はRDS
Thursday, March 22, 12
いつRDSを使うべきか(2)
vs EC2上のMySQLやOracle
§ 完全に自分でコントロールしたい場合、RDSの提供範囲外のものが欲しい場合はEC2
§ RDSの機能セットや管理機能が必要十分で、運用保守の手間を下げたい場合はRDS
http://aws.amazon.com/running_databases/
Thursday, March 22, 12
参考文献RDSのDBインスタンスサイズガイド§ http://aws.amazon.com/articles/Amazon-RDS/2936
RDSのDBパラメータガイド§ http://aws.amazon.com/articles/Amazon-RDS/2935
RDSモニタリングガイド§ http://aws.amazon.com/articles/Amazon-RDS/2934
RDSへのデータインポートガイド§ MySQL編:http://aws.amazon.com/articles/Amazon-RDS/2933
§ Oracle編:http://aws.amazon.com/articles/Amazon-RDS/
4173109646282306
75
Thursday, March 22, 12