20120508 aws meister-rds-public

78
ほぼ週刊AWSマイスターシリーズ Reloaded ~Amazon Relational Database Service~ 201258堀内 康弘( @horiuchiテクニカルエバンジェリスト

Upload: amazon-web-services-japan

Post on 30-Nov-2014

7.126 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: 20120508 aws meister-rds-public

ほぼ週刊AWSマイスターシリーズ Reloaded ~Amazon Relational Database Service~

2012年5月8日

堀内 康弘( @horiuchi) テクニカルエバンジェリスト

Page 2: 20120508 aws meister-rds-public

Agenda

RDSとは

RDSデモ

RDSの機能

RDSの事例

RDSのTips

パラメータチューニング

まとめ

Copyright © 2011 Amazon Web Services

Page 3: 20120508 aws meister-rds-public

Amazon Relational Database Service

(RDS)とは

3

Page 4: 20120508 aws meister-rds-public

お客様のアプリケーション

基盤サービス

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 のビルディングブロック

Page 5: 20120508 aws meister-rds-public

Amazon RDSとは?

わずらわしいDB管理作業から解放し

データを失う心配からの解放し

使うことだけに集中できる

メンテナンスレス、スケーラブル、柔軟な

RDB(MySQL, Oracle)サービス

Page 6: 20120508 aws meister-rds-public

Amazon RDSとは?- 詳細 - 2009年に登場したクラウド上RDBMSサービス

設定と運用が容易な”データベース in クラウド”

EC2同様、管理の容易なDBサーバを数分で起動

自動バックアップ、パッチ更新、レプリケーションおよびリードレプリカはAWSにお任せ

既存MySQL/Oracleアプリケーションとツールが利用可能

時間単位の従量課金 (DBインスタンスのクラスとリージョンで価格は変動)

6

Page 7: 20120508 aws meister-rds-public

自社構築 vs RDS

HWの購入 ラックへ設置 電源とNWを

設定

OS

インストール

基本設定 RDBMS

インストール

RDBMS

レプリケーション設定

RDBMS

稼働確認

Page 8: 20120508 aws meister-rds-public

自社構築 vs RDS

RDSだと

RDSのオプションを選んで起

動!

アプリケーションを

書く!!

Page 9: 20120508 aws meister-rds-public

自社構築 vs. RDS

9

数分で起動可能か?

単一APIコールまたは数クリックでスケールが可能か?

起動時に既に適切な設定がされているか?

同期レプリケーションと自動フェイルオーバー(option)

ポイントインタイムリカバリ

バックアップやクローンの為のDBスナップショット管理

ハードウェアや完全な環境の制御

自動パッチ更新(option)

既存MySQL製品との互換性

コスト0でダッシュボードでCPU/メモリ等メトリクス

Page 10: 20120508 aws meister-rds-public

RDSデモ

Page 11: 20120508 aws meister-rds-public

RDSの起動

GUIから

コマンドラインから

SDKから

Page 12: 20120508 aws meister-rds-public

RDSの起動

GUIから

コマンドラインから

SDKから

Page 13: 20120508 aws meister-rds-public
Page 14: 20120508 aws meister-rds-public

MySQLかOracleを選択

(通常はOracle SEも見えます)

Page 15: 20120508 aws meister-rds-public

ライセンス指定

DBバージョンを指定

DBタイプを指定

マルチAZオプション指定

マイナーバージョン自動更新

DBサイズ

Page 16: 20120508 aws meister-rds-public

データベース名

ポート番号

アベイラビリティゾーン

DBパラメーターグループ

DBセキュリティグループ

Page 17: 20120508 aws meister-rds-public

自動バックアップ期間

日時バックアップ時刻

メンテナンス時刻

Page 18: 20120508 aws meister-rds-public

パラメータの確認

Page 19: 20120508 aws meister-rds-public
Page 20: 20120508 aws meister-rds-public

RDSの起動

GUIから

コマンドラインから

SDKから

Page 21: 20120508 aws meister-rds-public

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の証明書

Page 22: 20120508 aws meister-rds-public

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

Page 23: 20120508 aws meister-rds-public

コマンドラインから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

Page 24: 20120508 aws meister-rds-public

RDSの起動

GUIから

コマンドラインから

SDKから

Page 25: 20120508 aws meister-rds-public

RDSのSDK

RDSの起動やメンテナンス等をSDKから行うことが出来る

Java

.NET

PHP

Python (boto)

など

Page 26: 20120508 aws meister-rds-public

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); }

Page 27: 20120508 aws meister-rds-public

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

Page 28: 20120508 aws meister-rds-public

RDS機能

Page 29: 20120508 aws meister-rds-public

RDS(MySQL) の全体アーキテクチャ

29

アベイラビリティゾーンA アベイラビリティゾーンB

自動バックアップ

スナップショット

自動バックアップ

スナップショット

データ同期

非同期レプリケーション

自動フェイルオーバー

Page 30: 20120508 aws meister-rds-public

RDS(MySQL) アーキテクチャ

30

アベイラビリティゾーンA アベイラビリティゾーンB

自動バックアップ

スナップショット

自動バックアップ

スナップショット

データ同期

非同期レプリケーション

自動フェイルオーバー

マルチAZデプロイメント

(マルチAZ)

Page 31: 20120508 aws meister-rds-public

マルチAZデプロイメントとは(マルチAZ)

ワンクリックで適用可能な耐障害性を高めるソリューション

高い技術力を持つDBAが行っていた設計をそのままサービス化

同期レプリケーション+自動フェイルオーバ

アプリ側での対処は必要なし

フェイルオーバのタイミング

パッチ適用などのメンテナンス計画停止

インスタンスやハードウェア障害

31

Page 32: 20120508 aws meister-rds-public

RDS(MySQL) アーキテクチャ

32

アベイラビリティゾーンA アベイラビリティゾーンB

自動バックアップ

スナップショット

自動バックアップ

スナップショット

データ同期

非同期レプリケーション

自動フェイルオーバー

リードレプリカ

Page 33: 20120508 aws meister-rds-public

リードレプリカとは? 特定DBインスタンスの読み込み用のコピー

想定ユースケース

リードのスケーリング、ビジネスレポート

マルチAZの耐障害性の代替の機能ではない

マルチAZとは異なり、MySQL本来の非同期レプリケーションをそのまま使う

最大5台まで設定可能

マルチAZとリードレプリカを併用はもちろん可能

33

Page 34: 20120508 aws meister-rds-public

RDS(MySQL) アーキテクチャ

34

アベイラビリティゾーンA アベイラビリティゾーンB

自動バックアップ

スナップショット

自動バックアップ

スナップショット

データ同期

非同期レプリケーション

自動フェイルオーバー

自動バックアップ機能

Page 35: 20120508 aws meister-rds-public

自動バックアップ機能

RDS標準装備

1日1回+トランザクションログ

保存期間は最大35日間

それ以降はスナップショット保存

5分前までの任意の期間に復元可能

35

Page 36: 20120508 aws meister-rds-public

スケールアップ機能

マネージメントコンソールからスケールアップ可能

一度停止が必要 (Multi-AZを有効にしていれば停止時間を少なくできる)

コマンドラインからも勿論可能

例:rds-modify-db-instance hogedb -c db.m1.large --apply-immediately

CPUは1ECUから26ECUまで

メモリは1.7GBから68GBまで

ディスクは5GBから1TBまで

大量書き込みなどスケールアウトでの対処が難しい場合にスケールアップで対処可能

増量できても削減できないので注意が必要

36

Page 37: 20120508 aws meister-rds-public

スケールアップ機能

Page 38: 20120508 aws meister-rds-public

スケールアップ機能

・DBインスタンスのタイプ

・割り当てたストレージ量

・マルチAZ

・パラメータグループ

など自由に変更可能

Page 39: 20120508 aws meister-rds-public

Oracle RDS

Page 40: 20120508 aws meister-rds-public

Oracle RDSとは

2011年Q2ロウンチ

Oracle Database 11g

プロビジョニング、バックアップ、パッチ適用、監視、スケーリングはRDSが管理

ライセンス持ち込み(BYOL) か 従量課金(時間単位)

リザーブドDBインスタンスも購入可能

Multi-AZ対応

30種の文字セットをサポート(Shift-JISを含む)

40

Page 41: 20120508 aws meister-rds-public

RDSのOracleサポート

ライセンス持ち込み(BYOL)

RDS部分についてはAWSプレミアムサポート (インフラ部分含む)

AWSがパッチとアップグレードを管理

Oracleデータベースに関してはOracleサポートIDを使ったOracle社のサポート

従量課金ライセンス

RDS部分およびOracleに関してもAWSプレミアムサポートでカバー

41

Page 42: 20120508 aws meister-rds-public

RDS価格

Page 43: 20120508 aws meister-rds-public

Amazon RDSプライシング

MySQLの標準価格 (2012/05/07時点)

43

Page 44: 20120508 aws meister-rds-public

Amazon RDSプライシング

MySQLのMultiAZ価格 (2012/05/07時点)

44

Page 45: 20120508 aws meister-rds-public

Amazon RDSプライシング

Oracleの標準価格 (2012/05/07時点)

45

AWSライセンス

BYOL

(ライセンス持込)

Page 46: 20120508 aws meister-rds-public

RDSプライシング注意点

マルチAZでは価格は2倍になる

ストレージで$0.12/GB/月

IOで$0.12/100万リクエスト

バックアップ用ストレージはセットアップされたストレージの100%まで無料。それ以降は$0.125/GB/月

RDS用リザーブドインスタンスもご提供

1年間、3年間のコミットによる価格を大幅削減

46

Page 47: 20120508 aws meister-rds-public

Oracle RDSプライシング

複数ライセンスオプションが今後利用可能に

既存のOracleライセンス

OracleまたはOracleパートナーから新規にOracleライセンスを購入

Amazonからの従量課金制での利用

Amazon RDSの2つのプライシングモデル

オンデマンドな時間単位の従量課金モデル

Amazon RDS リザーブドインスタンス

47

Page 48: 20120508 aws meister-rds-public

RDS事例

Page 49: 20120508 aws meister-rds-public

RDSのお客様代表事例

Page 50: 20120508 aws meister-rds-public

大規模事例 – gumi様

ソーシャルゲーム提供

AWS上で開発・運用

•特にRDSを積極的にお使いいただいている

Page 51: 20120508 aws meister-rds-public

Gumiさんのサーバー構成

ゾーンA

App

サーバ

Cache

サーバ

KVS

サーバ

App

サーバ App

サーバ

KVS

サーバ

c1.xlarge

m1.large m1.large

ゾーンB

ELB

RDS

- マルチAZ

同期

Page 52: 20120508 aws meister-rds-public

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

Page 53: 20120508 aws meister-rds-public

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

同期

Page 54: 20120508 aws meister-rds-public

gumi事例: ピーク時のさばき方

突発的な対応が必要なときは、EC2、RDSのスペックを上げて、時間をかせぐ

App

サーバ

Cache

サーバ

KVS

サーバ

App

サーバ App

サーバ

KVS

サーバ

ELB

m1.large

メモリ 7.5GB

CPU 4ECU

m2.4xlarge

メモリ 68GB

CPU 26ECU

Page 55: 20120508 aws meister-rds-public

gumi事例: バックアップの仕組み

データベース部分

RDSのポイントインタイムリカバリを利用(8日分)

• 5分前以前の何時の時点にも戻せる

8日前以前の分については、

手動スナップショットを利用する

Page 56: 20120508 aws meister-rds-public

gumi事例: モニタリング

CloudWatch + SNS

CloudWatch + SNSで負荷やディスク残量を監視

ディスクク容量が少なくなるとメールで通知

Page 57: 20120508 aws meister-rds-public

Gumiさんの事例からわかる事

非常にスケールが必要なアプリケーションでもRDSは有効

スケールアップ

スケールアウト(リードレプリカ)

DBの管理コストを劇的に削減し、アプリケーションを構築する部分にリソースを集中できる

RDSの柔軟さを活用する事で、ピークにもあわてず対応できる

Page 58: 20120508 aws meister-rds-public

Tips

Page 59: 20120508 aws meister-rds-public

RDSのTips DBセキュリティグループ

RDSへのデータの移行

パラメーターチューニング

タイムゾーンに関して

メトリクス

マルチAZに関しての考え方

いつRDSを使うべきか

Page 60: 20120508 aws meister-rds-public

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

Page 61: 20120508 aws meister-rds-public

RDSへのデータの移行

MySQLを使った一例

mysqldump

• 少量データの場合直接インポート

mysqlimportでバルクインポート

• フラットなファイルで複数に分割、圧縮

• RDSを一旦停止、スナップショット作成

• スナップショットから新DB作成

• 自動バックアップを一旦停止

• mysqlimportでのデータのロード

• 自動バックアップ復旧

• サービス再開

Page 62: 20120508 aws meister-rds-public

パラメータチューニング

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"

Page 63: 20120508 aws meister-rds-public

パラメータチューニング(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

Page 64: 20120508 aws meister-rds-public

パラメータチューニング(3)

注意点

チューニング出来る項目と出来ない項目がある

• タイムゾーンは変更不可・・・

rds-describe-db-parametersを使ってチェック

または、ManagementConsoleでチェック

Page 65: 20120508 aws meister-rds-public

タイムゾーンに関して

rds-describe-db-parametersで見てみると、タイムゾーンは変更不可能な設定項目

アプリケーション側でJSTなど適切なタイムゾーンを指定する必要あり

init_connectパラメータによる、タイムゾーンの設定は現状保証されない

Page 66: 20120508 aws meister-rds-public

メトリクスと監視

CloudWatchにてRDSメトリクスを監視 メトリクス名 説明

BinLogDiskUsage マスターのバイナリログサイズ

CPUUtilization CPU利用量

DatabaseConnections DBのコネクション数

FreeableMemory 使えるメモリ量

FreeStorageSpace 使えるディスクスペース

ReadIOPS 読み込みの平均IOPS

ReadLatency 読み込みのレイテンシ

ReadThroughput 読み込みスループット

ReplicaLag リードレプリカのタイムラグ

SwapUsage DBで使用しているスワップ

WriteIOPS 書き込みの平均IOPS

WriteLatency 書き込みのレイテンシ

WriteThroughput 書き込みスループット

Page 67: 20120508 aws meister-rds-public

メトリクスと監視(2)

Amazon RDS Eventsでも監視可能

ManagementConsoleで監視

rds-describe-events

Page 68: 20120508 aws meister-rds-public

MultiAZにおけるリードレプリカの更新停止に関して(MySQL)

MultiAZ環境でフェイルオーバしたタイミングでリードレプリカの更新の伝播が停止する可能性がある

常にそうなるわけではない

非同期のMySQLレプリケーション

binlogがディスクにフラッシュされていない状況下で、フェイルオーバした場合に稀に発生

レプリケーションのコストとの兼ね合い

Page 69: 20120508 aws meister-rds-public

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

問題が発生した場合に、リードレプリカを再度作り直す

Page 70: 20120508 aws meister-rds-public

マルチAZに対しての考え方

良く聞く声:マルチAZでマスターをWebアプリと同一のAZに割り当てたい

マインドシフトが必要

マルチAZでWebアプリが構築されていれば、RDSのマスターがどちらにあるかは意識しなくてよい

マルチAZでの複数DCが利用できるものを最大限に活かしてWebアプリのコンポーネントを分散して配置するのが重要

Page 71: 20120508 aws meister-rds-public

いつRDSを使うべきか

RDSの代替案

Amazon SimpleDB

EC2上でMySQLやOracleを展開

vs SimpleDB

シンプルなクエリ、堅牢性・管理不要を追及したい場合はSimpleDB

既存MySQLの知識やツールを使いたい場合はRDS

Page 72: 20120508 aws meister-rds-public

いつRDSを使うべきか(2)

vs EC2上のMySQLやOracle

完全に自分でコントロールしたい場合、RDSの提供範囲外のものが欲しい場合はEC2

RDSの機能セットや管理機能が必要十分で、運用保守の手間を下げたい場合はRDS

http://aws.amazon.com/running_databases/

Page 73: 20120508 aws meister-rds-public

最近のアップデート

Page 74: 20120508 aws meister-rds-public

最近のアップデート

MySQLがVPC内で利用可能に(1月)

利用料金の値下げ(3月)

DBのバックアップ可能期間を8日から35日に(3月)

OracleがMulti-AZに対応(5月)

Oracleで30の推奨文字セットサポート(5月)

強制フェイルオーバーが可能に(5月)

Page 75: 20120508 aws meister-rds-public

まとめ

Page 76: 20120508 aws meister-rds-public

Amazon RDS まとめ

わずらわしいDB管理作業から解放し

データを失う心配からの解放し

使うことだけに集中できる

メンテナンスレス、スケーラブル、柔軟な

RDB(MySQL, Oracle)サービス

Page 78: 20120508 aws meister-rds-public

Q & A