20120508 aws meister-rds-public
Post on 30-Nov-2014
7.125 Views
Preview:
DESCRIPTION
TRANSCRIPT
ほぼ週刊AWSマイスターシリーズ Reloaded ~Amazon Relational Database Service~
2012年5月8日
堀内 康弘( @horiuchi) テクニカルエバンジェリスト
Agenda
RDSとは
RDSデモ
RDSの機能
RDSの事例
RDSのTips
パラメータチューニング
まとめ
Copyright © 2011 Amazon Web Services
Amazon Relational Database Service
(RDS)とは
3
お客様のアプリケーション
基盤サービス
Building Block Services
コンピュート Amazon EC2 Auto Scale
ストレージ Amazon S3
Amazon EBS AWS Storage Gateway
データベース Amazon RDS
Amazon DynamoDB Amazon Elasticache
ネットワーク Amazon VPC
Elastic Load Balancing Amazon Route 53
AWS Direct Connect
アプリケーションプラットフォームサービス
運用と管理
コンテンツ配信Amazon
CloudFront
メッセージング Amazon SNS Amazon SQS Amazon SES
分散処理 Elastic MapReduce
ライブラリ&SDK Java, PHP, Python,
Ruby, .NET
Web インターフェー
ス Management Console
認証 &アクセス AWS IAM
Identity Federation Consolidated Billing
デプロイ&自動化 AWS Elastic Beanstalk AWS CloudFormation
モニタリング Amazon CloudWatch
AWSのグローバルなインフラ
リージョン
アベイラビリティゾーン
エッジロケーション
AWS のビルディングブロック
Amazon RDSとは?
わずらわしいDB管理作業から解放し
データを失う心配からの解放し
使うことだけに集中できる
メンテナンスレス、スケーラブル、柔軟な
RDB(MySQL, Oracle)サービス
Amazon RDSとは?- 詳細 - 2009年に登場したクラウド上RDBMSサービス
設定と運用が容易な”データベース in クラウド”
EC2同様、管理の容易なDBサーバを数分で起動
自動バックアップ、パッチ更新、レプリケーションおよびリードレプリカはAWSにお任せ
既存MySQL/Oracleアプリケーションとツールが利用可能
時間単位の従量課金 (DBインスタンスのクラスとリージョンで価格は変動)
6
自社構築 vs RDS
HWの購入 ラックへ設置 電源とNWを
設定
OS
インストール
基本設定 RDBMS
インストール
RDBMS
レプリケーション設定
RDBMS
稼働確認
自社構築 vs RDS
RDSだと
RDSのオプションを選んで起
動!
アプリケーションを
書く!!
自社構築 vs. RDS
9
数分で起動可能か?
単一APIコールまたは数クリックでスケールが可能か?
起動時に既に適切な設定がされているか?
同期レプリケーションと自動フェイルオーバー(option)
ポイントインタイムリカバリ
バックアップやクローンの為のDBスナップショット管理
ハードウェアや完全な環境の制御
自動パッチ更新(option)
既存MySQL製品との互換性
コスト0でダッシュボードでCPU/メモリ等メトリクス
RDSデモ
RDSの起動
GUIから
コマンドラインから
SDKから
RDSの起動
GUIから
コマンドラインから
SDKから
MySQLかOracleを選択
(通常はOracle SEも見えます)
ライセンス指定
DBバージョンを指定
DBタイプを指定
マルチAZオプション指定
マイナーバージョン自動更新
DBサイズ
データベース名
ポート番号
アベイラビリティゾーン
DBパラメーターグループ
DBセキュリティグループ
自動バックアップ期間
日時バックアップ時刻
メンテナンス時刻
パラメータの確認
RDSの起動
GUIから
コマンドラインから
SDKから
RDSコマンドライン
RDS Command Line Tools http://aws.amazon.com/developertools/2928
最新版は1.8.001 (API 2012-04-23)
Javaベース
AWS_RDS_HOME/JAVA_HOME設定
キーの提供
アクセスキーのペア
X.509の証明書
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-snapshots
rds-describe-engine-default-parameters
• rds-describe-events
• rds-describe-orderable-db-instance-options
• rds-describe-reserved-db-instances
• rds-describe-reserved-db-instances-offerings
• rds-modify-db-instance
• rds-modify-db-parameter-group
• rds-purchase-reserved-db-instances-offering
• rds-reboot-db-instance
• rds-reset-db-parameter-group
• rds-restore-db-instance-from-db-snapshot
• rds-restore-db-instance-to-point-in-time
• rds-revoke-db-security-group-ingress
• rds-version
コマンドラインから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
RDSの起動
GUIから
コマンドラインから
SDKから
RDSのSDK
RDSの起動やメンテナンス等をSDKから行うことが出来る
Java
.NET
PHP
Python (boto)
など
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); }
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
RDS機能
RDS(MySQL) の全体アーキテクチャ
29
アベイラビリティゾーンA アベイラビリティゾーンB
自動バックアップ
スナップショット
自動バックアップ
スナップショット
データ同期
非同期レプリケーション
自動フェイルオーバー
RDS(MySQL) アーキテクチャ
30
アベイラビリティゾーンA アベイラビリティゾーンB
自動バックアップ
スナップショット
自動バックアップ
スナップショット
データ同期
非同期レプリケーション
自動フェイルオーバー
マルチAZデプロイメント
(マルチAZ)
マルチAZデプロイメントとは(マルチAZ)
ワンクリックで適用可能な耐障害性を高めるソリューション
高い技術力を持つDBAが行っていた設計をそのままサービス化
同期レプリケーション+自動フェイルオーバ
アプリ側での対処は必要なし
フェイルオーバのタイミング
パッチ適用などのメンテナンス計画停止
インスタンスやハードウェア障害
31
RDS(MySQL) アーキテクチャ
32
アベイラビリティゾーンA アベイラビリティゾーンB
自動バックアップ
スナップショット
自動バックアップ
スナップショット
データ同期
非同期レプリケーション
自動フェイルオーバー
リードレプリカ
リードレプリカとは? 特定DBインスタンスの読み込み用のコピー
想定ユースケース
リードのスケーリング、ビジネスレポート
マルチAZの耐障害性の代替の機能ではない
マルチAZとは異なり、MySQL本来の非同期レプリケーションをそのまま使う
最大5台まで設定可能
マルチAZとリードレプリカを併用はもちろん可能
33
RDS(MySQL) アーキテクチャ
34
アベイラビリティゾーンA アベイラビリティゾーンB
自動バックアップ
スナップショット
自動バックアップ
スナップショット
データ同期
非同期レプリケーション
自動フェイルオーバー
自動バックアップ機能
自動バックアップ機能
RDS標準装備
1日1回+トランザクションログ
保存期間は最大35日間
それ以降はスナップショット保存
5分前までの任意の期間に復元可能
35
スケールアップ機能
マネージメントコンソールからスケールアップ可能
一度停止が必要 (Multi-AZを有効にしていれば停止時間を少なくできる)
コマンドラインからも勿論可能
例:rds-modify-db-instance hogedb -c db.m1.large --apply-immediately
CPUは1ECUから26ECUまで
メモリは1.7GBから68GBまで
ディスクは5GBから1TBまで
大量書き込みなどスケールアウトでの対処が難しい場合にスケールアップで対処可能
増量できても削減できないので注意が必要
36
スケールアップ機能
スケールアップ機能
・DBインスタンスのタイプ
・割り当てたストレージ量
・マルチAZ
・パラメータグループ
など自由に変更可能
Oracle RDS
Oracle RDSとは
2011年Q2ロウンチ
Oracle Database 11g
プロビジョニング、バックアップ、パッチ適用、監視、スケーリングはRDSが管理
ライセンス持ち込み(BYOL) か 従量課金(時間単位)
リザーブドDBインスタンスも購入可能
Multi-AZ対応
30種の文字セットをサポート(Shift-JISを含む)
40
RDSのOracleサポート
ライセンス持ち込み(BYOL)
RDS部分についてはAWSプレミアムサポート (インフラ部分含む)
AWSがパッチとアップグレードを管理
Oracleデータベースに関してはOracleサポートIDを使ったOracle社のサポート
従量課金ライセンス
RDS部分およびOracleに関してもAWSプレミアムサポートでカバー
41
RDS価格
Amazon RDSプライシング
MySQLの標準価格 (2012/05/07時点)
43
Amazon RDSプライシング
MySQLのMultiAZ価格 (2012/05/07時点)
44
Amazon RDSプライシング
Oracleの標準価格 (2012/05/07時点)
45
AWSライセンス
BYOL
(ライセンス持込)
RDSプライシング注意点
マルチAZでは価格は2倍になる
ストレージで$0.12/GB/月
IOで$0.12/100万リクエスト
バックアップ用ストレージはセットアップされたストレージの100%まで無料。それ以降は$0.125/GB/月
RDS用リザーブドインスタンスもご提供
1年間、3年間のコミットによる価格を大幅削減
46
Oracle RDSプライシング
複数ライセンスオプションが今後利用可能に
既存のOracleライセンス
OracleまたはOracleパートナーから新規にOracleライセンスを購入
Amazonからの従量課金制での利用
Amazon RDSの2つのプライシングモデル
オンデマンドな時間単位の従量課金モデル
Amazon RDS リザーブドインスタンス
47
RDS事例
RDSのお客様代表事例
大規模事例 – gumi様
ソーシャルゲーム提供
AWS上で開発・運用
•特にRDSを積極的にお使いいただいている
Gumiさんのサーバー構成
ゾーンA
App
サーバ
Cache
サーバ
KVS
サーバ
App
サーバ App
サーバ
KVS
サーバ
c1.xlarge
m1.large m1.large
ゾーンB
ELB
RDS
- マルチAZ
同期
gumi事例: AWS運用モデル
複数のゲームをAWSで運用(全体で数十億PV/月)
ゲーム毎に、ELB+EC2+RDSの同じセットを再利用
人気ゲーム ゲームA ゲームB ゲームC
インフラエンジニアは1名!(~2011/8、今は3名!)
App
サーバ
Cache
サーバ
KVS
サーバ
App
サーバ App
サーバ
KVS
サーバ
ELB
App
サーバ
Cach
e
サーバ
KVS
サーバ
App
サーバ
App
サーバ
KVS
サーバ
ELB
App
サーバ
Cach
e
サーバ
KVS
サーバ
App
サーバ
App
サーバ
KVS
サーバ
ELB
App
サーバ
Cac
he
サーバ
KV
S
サーバ
App
サーバ
App
サーバ
KV
S
サーバ
ELB
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
同期
gumi事例: ピーク時のさばき方
突発的な対応が必要なときは、EC2、RDSのスペックを上げて、時間をかせぐ
App
サーバ
Cache
サーバ
KVS
サーバ
App
サーバ App
サーバ
KVS
サーバ
ELB
m1.large
メモリ 7.5GB
CPU 4ECU
m2.4xlarge
メモリ 68GB
CPU 26ECU
gumi事例: バックアップの仕組み
データベース部分
RDSのポイントインタイムリカバリを利用(8日分)
• 5分前以前の何時の時点にも戻せる
8日前以前の分については、
手動スナップショットを利用する
gumi事例: モニタリング
CloudWatch + SNS
CloudWatch + SNSで負荷やディスク残量を監視
ディスクク容量が少なくなるとメールで通知
Gumiさんの事例からわかる事
非常にスケールが必要なアプリケーションでもRDSは有効
スケールアップ
スケールアウト(リードレプリカ)
DBの管理コストを劇的に削減し、アプリケーションを構築する部分にリソースを集中できる
RDSの柔軟さを活用する事で、ピークにもあわてず対応できる
Tips
RDSのTips DBセキュリティグループ
RDSへのデータの移行
パラメーターチューニング
タイムゾーンに関して
メトリクス
マルチAZに関しての考え方
いつRDSを使うべきか
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
RDSへのデータの移行
MySQLを使った一例
mysqldump
• 少量データの場合直接インポート
mysqlimportでバルクインポート
• フラットなファイルで複数に分割、圧縮
• RDSを一旦停止、スナップショット作成
• スナップショットから新DB作成
• 自動バックアップを一旦停止
• mysqlimportでのデータのロード
• 自動バックアップ復旧
• サービス再開
パラメータチューニング
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"
パラメータチューニング(2)
$ rds-describe-db-parameters group1 --source user
DBPARAMETER long_query_time 1 user integer dynamic true
DBPARAMETER min_examined_row_limit 100 user integer dynamic true
DBPARAMETER slow_query_log 1 user boolean dynamic true
$ rds-describe-db-parameters group1 --source user
DBPARAMETER long_query_time engine-default integer dynamic true
DBPARAMETER min_examined_row_limit engine-default integer dynamic true
DBPARAMETER slow_query_log engine-default boolean dynamic true
パラメータチューニング(3)
注意点
チューニング出来る項目と出来ない項目がある
• タイムゾーンは変更不可・・・
rds-describe-db-parametersを使ってチェック
または、ManagementConsoleでチェック
タイムゾーンに関して
rds-describe-db-parametersで見てみると、タイムゾーンは変更不可能な設定項目
アプリケーション側でJSTなど適切なタイムゾーンを指定する必要あり
init_connectパラメータによる、タイムゾーンの設定は現状保証されない
メトリクスと監視
CloudWatchにてRDSメトリクスを監視 メトリクス名 説明
BinLogDiskUsage マスターのバイナリログサイズ
CPUUtilization CPU利用量
DatabaseConnections DBのコネクション数
FreeableMemory 使えるメモリ量
FreeStorageSpace 使えるディスクスペース
ReadIOPS 読み込みの平均IOPS
ReadLatency 読み込みのレイテンシ
ReadThroughput 読み込みスループット
ReplicaLag リードレプリカのタイムラグ
SwapUsage DBで使用しているスワップ
WriteIOPS 書き込みの平均IOPS
WriteLatency 書き込みのレイテンシ
WriteThroughput 書き込みスループット
メトリクスと監視(2)
Amazon RDS Eventsでも監視可能
ManagementConsoleで監視
rds-describe-events
MultiAZにおけるリードレプリカの更新停止に関して(MySQL)
MultiAZ環境でフェイルオーバしたタイミングでリードレプリカの更新の伝播が停止する可能性がある
常にそうなるわけではない
非同期のMySQLレプリケーション
binlogがディスクにフラッシュされていない状況下で、フェイルオーバした場合に稀に発生
レプリケーションのコストとの兼ね合い
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
問題が発生した場合に、リードレプリカを再度作り直す
マルチAZに対しての考え方
良く聞く声:マルチAZでマスターをWebアプリと同一のAZに割り当てたい
マインドシフトが必要
マルチAZでWebアプリが構築されていれば、RDSのマスターがどちらにあるかは意識しなくてよい
マルチAZでの複数DCが利用できるものを最大限に活かしてWebアプリのコンポーネントを分散して配置するのが重要
いつRDSを使うべきか
RDSの代替案
Amazon SimpleDB
EC2上でMySQLやOracleを展開
vs SimpleDB
シンプルなクエリ、堅牢性・管理不要を追及したい場合はSimpleDB
既存MySQLの知識やツールを使いたい場合はRDS
いつRDSを使うべきか(2)
vs EC2上のMySQLやOracle
完全に自分でコントロールしたい場合、RDSの提供範囲外のものが欲しい場合はEC2
RDSの機能セットや管理機能が必要十分で、運用保守の手間を下げたい場合はRDS
http://aws.amazon.com/running_databases/
最近のアップデート
最近のアップデート
MySQLがVPC内で利用可能に(1月)
利用料金の値下げ(3月)
DBのバックアップ可能期間を8日から35日に(3月)
OracleがMulti-AZに対応(5月)
Oracleで30の推奨文字セットサポート(5月)
強制フェイルオーバーが可能に(5月)
まとめ
Amazon RDS まとめ
わずらわしいDB管理作業から解放し
データを失う心配からの解放し
使うことだけに集中できる
メンテナンスレス、スケーラブル、柔軟な
RDB(MySQL, Oracle)サービス
参考文献
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
77
Q & A
top related