ほぼ週刊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
AWS のビルディングブロック
                             お客様のアプリケーション
運用と管理
Building Block Services
 Web インターフェー           認証 &アクセス                 デプロイ&自動化
                            AWS IAM                                         モニタリング
      ス                 Identity Federation
                                                 AWS Elastic Beanstalk
                                                                          Amazon CloudWatch
  Management Console    Consolidated Billing
                                                 AWS CloudFormation



アプリケーションプラットフォームサービス
                        メッセージング                                           ライブラリ&SDK
 コンテンツ配信Amazon             Amazon SNS                分散処理                  Java, PHP, Python,
      CloudFront           Amazon SQS             Elastic MapReduce
                                                                              Ruby, .NET
                           Amazon SES


基盤サービス

                           ストレージ                   データベース                    ネットワーク
    コンピュート                 Amazon S3                Amazon RDS
                                                                              Amazon VPC
     Amazon EC2                                                           Elastic Load Balancing
                          Amazon EBS              Amazon DynamoDB
      Auto Scale                                                            Amazon Route 53
                       AWS Storage Gateway        Amazon Elasticache
                                                                           AWS Direct Connect



                                          アベイラビリティゾーン
AWSのグローバルなインフラ                                                           エッジロケーション
                                               リージョン
Amazon RDSとは?
 わずらわしいDB管理作業から解放し
 データを失う心配からの解放し
 使うことだけに集中できる
 メンテナンスレス、スケーラブル、柔軟な
 RDB(MySQL, Oracle)サービス
Amazon RDSとは?- 詳細 -
2009年に登場したクラウド上RDBMSサービス
設定と運用が容易な”データベース in クラウド”
EC2同様、管理の容易なDBサーバを数分で起動
自動バックアップ、パッチ更新、レプリケーションおよびリードレプリ
カはAWSにお任せ
既存MySQL/Oracleアプリケーションとツールが利用可能
時間単位の従量課金 (DBインスタンスのクラスとリージョンで価格
は変動)




                                   6
自社構築 vs RDS

                   電源とNWを     OS
  HWの購入   ラックへ設置
                     設定     インストール




                    RDBMS
           RDBMS            RDBMS
  基本設定             レプリケーシ
          インストール            稼働確認
                    ョン設定
自社構築 vs RDS
RDSだと


 RDSのオプショ
              アプリケーションを
  ンを選んで起        書く!!
    動!
自社構築 vs. RDS
数分で起動可能か?
単一APIコールまたは数クリックでスケールが可能か?
起動時に既に適切な設定がされているか?
同期レプリケーションと自動フェイルオーバー(option)
ポイントインタイムリカバリ
バックアップやクローンの為のDBスナップショット管理

ハードウェアや完全な環境の制御
自動パッチ更新(option)
既存MySQL製品との互換性
コスト0でダッシュボードでCPU/メモリ等メトリクス




                                9
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-describe-db-snapshots
rds-create-db-instance                        rds-describe-engine-default-parameters
rds-create-db-instance-read-replica       •   rds-describe-events
rds-create-db-parameter-group             •   rds-describe-orderable-db-instance-options
rds-create-db-security-group              •   rds-describe-reserved-db-instances
rds-create-db-snapshot                    •   rds-describe-reserved-db-instances-offerings
rds-delete-db-instance                    •   rds-modify-db-instance
rds-delete-db-parameter-group             •   rds-modify-db-parameter-group
rds-delete-db-security-group              •   rds-purchase-reserved-db-instances-offering
rds-delete-db-snapshot                    •   rds-reboot-db-instance
rds-describe-db-engine-versions           •   rds-reset-db-parameter-group
rds-describe-db-instances                 •   rds-restore-db-instance-from-db-snapshot
rds-describe-db-parameter-groups          •   rds-restore-db-instance-to-point-in-time
rds-describe-db-parameters                •   rds-revoke-db-security-group-ingress
rds-describe-db-security-groups           •   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) の全体アーキテクチャ
         アベイラビリティゾーンA           アベイラビリティゾーンB


自動バックア
自動バックア                  データ同期
ップ
ップ                  自動フェイルオーバー


                            非同期レプリケーション

スナップショ
スナップショ
ット
ット




                                          29
RDS(MySQL) アーキテクチャ
         アベイラビリティゾーンA           アベイラビリティゾーンB


自動バックア
自動バックア                  データ同期
ップ
ップ                  自動フェイルオーバー


                            非同期レプリケーション
                 マルチAZデプロイメント
スナップショ
スナップショ
ット
ット
                    (マルチAZ)




                                          30
マルチAZデプロイメントとは(マルチAZ)
ワンクリックで適用可能な耐障害性を高めるソリューション
  高い技術力を持つDBAが行っていた設計をそのままサービス
   化
同期レプリケーション+自動フェイルオーバ
  アプリ側での対処は必要なし
フェイルオーバのタイミング
  パッチ適用などのメンテナンス計画停止
  インスタンスやハードウェア障害




                                  31
RDS(MySQL) アーキテクチャ
         アベイラビリティゾーンA           アベイラビリティゾーンB


自動バックア
自動バックア                  データ同期
ップ
ップ                  自動フェイルオーバー


                        非同期レプリケーション
                   リードレプリカ
スナップショ
スナップショ
ット
ット




                                          32
リードレプリカとは?
特定DBインスタンスの読み込み用のコピー
想定ユースケース
  リードのスケーリング、ビジネスレポート
  マルチAZの耐障害性の代替の機能ではない
マルチAZとは異なり、MySQL本来の非同期レプリケーションをそのまま使う
最大5台まで設定可能
マルチAZとリードレプリカを併用はもちろん可能




                                        33
RDS(MySQL) アーキテクチャ
          アベイラビリティゾーンA      アベイラビリティゾーンB
         自動バックアップ機能
自動バックア
自動バックア              データ同期
ップ
ップ                自動フェイルオーバー


                         非同期レプリケーション

スナップショ
スナップショ
ット
ット




                                       34
自動バックアップ機能

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時点)
                                     BYOL
                         AWSライセンス (ライセンス持込)




                                       45
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さんのサーバー構成

 ELB


   App
    App
   サーバ
     App       c1.xlarge
    サーバ
     サーバ




 Cache      KVS
             KVS
 サーバ        サーバ                      同期
             サーバ
 m1.large   m1.large          RDS
                           - マルチAZ
            ゾーンA                          ゾーンB
gumi事例: AWS運用モデル
 複数のゲームをAWSで運用(全体で数十億PV/月)
 ゲーム毎に、ELB+EC2+RDSの同じセットを再利用


  人気ゲーム                 ゲームA             ゲームB            ゲームC
                       ELB              ELB              ELB
   ELB
                                                           App
                                                            App
                         App
                          App             App                App
                           App             App             ササ
                         サー
                          サー              サーApp              サ
                                           サー              ー
      App                バサー
                          バ               バサー               ーー
       App
      サーバ                  バ               バ               ババ
         App                                バ            Cacバ      KV
       サーバ                                                          KV
         サーバ                                             he        S
                       Cach      KVS    Cach      KVS               S
                                  KVS              KVS   サ         サ
                       e         サー     e         サー                サ
                                  サー               サー    ー         ー
                       サー        バ      サー        バ                 ー
                                  バ                バ     バ         バ
                       バ                バ                           バ

   Cache       KVS
   サーバ          KVS
               サーバ
                サーバ




                      インフラエンジニアは1名!
                      (~2011/8、今は3名!)
gumi事例: AWS運用モデル
ゲームのライフサイクルにあわせて、
サーバー台数、サーバースペックを調整

  開発時            申請時                 公開時
                       ELB
           ELB

   App
   サーバ
             App             App
                              App
             サーバ             サーバ
                               App
                              サーバ
                               サーバ
                                          c1.xlarge
                                            - 60台




 1台にまとめて               Cache         KVS
                                      KVS                       同期
                       サーバ           サーバ
                                      サーバ
  個人毎に                 m1.large
                        - 4台         m1.large            RDS
                                     - 8台 x 2         - マルチAZ

                                      ゾーンA                           ゾーンB



           最小構成に
                       Appサーバーを8台
                       DBをマルチAZに(m1.large)
gumi事例: ピーク時のさばき方
突発的な対応が必要なときは、EC2、RDSのスペッ
クを上げて、時間をかせぐ

   ELB


     App
      App
     サーバ
                     m1.large   m2.4xlarge
       App
      サーバ
       サーバ
                    メモリ 7.5GB   メモリ 68GB
                     CPU 4ECU   CPU 26ECU
   Cache     KVS
              KVS
   サーバ       サーバ
              サーバ
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            engine-default integer dynamic true
DBPARAMETER min_examined_row_limit engine-default integer dynamic true
DBPARAMETER slow_query_log             engine-default boolean dynamic true




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

20120508 aws meister-rds-public