話題の記事

[レポート]Amazon RDS for Aurora Deep Dive #AWSSummit

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS Summit Tokyo 2015TA-02: Tech Deep Dive by Amazon:「Amazon RDS for Aurora Deep Dive」のレポートです。

スピーカーはAmazon Data Services Japanの星野豊氏です。

IMG_1884

レポート

Auroraは現在Preview中

→頻繁に更新が行われている

→今回の内容は2015/6/2現在の内容のため注意。

→今後も続々と機能追加がされる予定。

Auroraの概要

RDS→データベースを簡単に

データベースを数分で作成可能

S3へのバックアップがあり、リカバリも簡単

Amazon Aurora

re:Invent 2014で発表された、RDSの新しいエンジン

AmazonがRDBを一から作ったらどうなるか?がコンセプト

新しい技術的チャレンジを多く盛り込んでいる

エンタープライズレベルの可用性とOSSレベルのコストを両立

Amazon AuroraはRDSが提供する5番目のDBエンジン

現在Preview中

2015/5/20よりPreviewがプロダクション環境へ移行

Beta環境がクローズ

Beta環境のスナップショットからプロダクション環境で起動可能

GAリリースに向けて頻繁に開発更新中

Amazon AuroraのPricing

r3シリーズのみの提供を予定

今後はc3シリーズもあるかも知れないが、最初はr3限定

ライセンス料金不要

MySQLコンパチなのでロックインも無い

Auroraの特徴

MySQL 5.6と互換性がある

既存のアプリケーションを簡単に移行可能

5.6のマイナーバージョンの発表はしない予定

もし動かない機能があればフィードバックが欲しい

ストレージが自動スケール

プロビジョニング不要

自動的に10GBから64TBまでシームレスに拡張

パフォーマンスインパクトもない

3つのAZに2つずつ、合計6つのデータのコピーを保持

その裏でS3にストリームデータバックアップが取られる

VPCの中で起動、NACLやSecurityGroupにてアクセス制御可能

なぜAmazonがデータベースを作ろうと思ったのか?再考したのか?

現在のDB→モノリシック

複数の機能レイヤーが1つのアプリケーションになっている

スケールアウトする場合にも、全ての機能をセットで増やしていく必要がある

コスト・可用性・柔軟性の面で問題がある

RDBをもう一度考える

Amazonのエンジニアが、このクラウド自体に、一からRDBを設計したらどうなるか?

AWSのサービスが活かせて、スケールアウトが簡単で、セルフヒーリングが出来るようなデータベースが作りたい

ハイエンドDBのような可用性

オープンソースDBのコスト効果

MySQLとの互換性

AWSの各サービスと簡単に連携

そしてフルマネージド

Auroraの仕組み

Service Oriented Architecture

機能レイヤーを疎結合してAPI経由で接続

AWSの既存サービスを管理コンポーネントに採用

バックアップ先にS3を採用し高い可用性を実現

ログとストレージのレイヤーをDBから分離

キャッシュレイヤを分離

キャッシュをデータベースのプロセス外に

→データベースのプロセスに含まれていると、

データベースをリスタートするとキャッシュまで飛んでしまっていた

キャッシュをデータベースから追い出すことで、DBがリスタートしてもキャッシュが消えない

万が一DBプロセスのリスタートが発生しても、キャッシュが残っておりすぐDBを戻すことが出来る

Auroraのストレージ

ストレージも再発明

SSDを利用した、シームレスにスケールするストレージ

プロビジョニング不要なので、実際に使っているデータ分だけが課金される

標準でHighly Availableを実現

3つのAZに6つのデータをコピー

2つが壊れても読み書き可能、3つが壊れても読み込み可能

Log Structured Storageを採用

ディスク書き込み

ホットスポットの影響を取り除く仕組み

負荷が高いディスクがあると除外する

6本全てのディスクへの書き込みをするのではなく

4本のディスクに書き込みが完了すると次の処理を実行

→書き込みが遅くなることはない

ストレージはSSDに10GBずつのブロック内に分散して書き込まれる

リードレプリカもマスタと同じストレージを参照

論理レプリケーションをしていない

S3へのバックアップは増分バックアップ

パフォーマンスの影響が無いようにストリームでバックアップ

再ストライピング、ミラー修復、ホットスポット管理、暗号化など全て自動化

Log Structured Storage

追記型ストレージシステム

ログのようにストレージの末尾にデータを追加するだけ

データの上書きも内部的に全て追記

シーケンシャルに読み出すことが出来る

常に最新のデータが末尾にある

末尾に書き込まれたものをS3に書き込むことでバックアップ取得

ディスク障害の件値と修復

2つのコピーに障害が起こっても、読み書きに影響がない

AZが丸ごと落ちた場合など

3つのコピーに障害が発生しても読み込みは可能

障害検知と修復は自動

レプリケーション

MySQLの場合→binlogをレプリケーションする→レプリカ遅延が起きやすい

Aurora→メタデータの転送だけが行われる

Master/Slave共に同じディスクを見るのでレプリカ遅延は少ない

AuroraではSlaveでもRead Queryが可能

MySQLだと、スレーブが増えるとマスターの負荷がどんどん高くなる

→Auroraだとマスターへの負荷が最小限

最大15台までリードレプリカを作成可能

100ms以内のレプリケーション遅延(高速)

マスターとリードレプリカで同じディスクを見ているので、フェイルオーバーしてもデータロスが発生しない

マスターがしっかり書き込んでいればどのリードレプリカが昇格しても同じデータが見れる

セキュリティ

データの暗号化

SSLを利用したデータ通信の保護

ノードへの直接アクセスは不可能

DBクラスタ

Auroraの概念。マスタ(Writer)とリードレプリカ(Reader)をひとまとめにしたもの。

マスタを指す単一のエンドポイントが提供される。

DB Parameter Groupとは別にDB Cluster Parameter Groupがある。

Auroraが共通で持っていなくてはならない設定を定義、全ノードに適用。

新しいメトリクス画面

selectやcommitのスループット、レイテンシが見られる

全画面ビューが追加されている

最新値とグラフ値が表示

フェイルオーバーとリプレース

リードレプリカが存在する場合→1分程度でフェイルオーバー可能

MySQLよりも高速

リードレプリカが無い場合は10分ほど

Previewで1分程度だが、現在改善中。GAリリース時にはもっと早くなるかも。

優先的にフェイルオーバーさせるノードを1つ指定出来る。

通常はスレーブの一つ。MultiAZに指定することでAZ障害に対応出来る。

障害が発生しAuroraが万が一上がってこなかった場合、どのAZで起動するかを指定可能

クラスタエンドポイント

通常のエンドポイントとは別に、必ずマスタを指す単一のエンドポイント。

通常のエンドポイントで個別にアクセスすることも可能。

クラスタエンドポイントはその時アクティブなAurora WriteのCNAME。

高速なデータ修復

MySQL→シングルスレッドなため適用完了まで時間がかかる

Aurora→並列、分散、非同期で行われる。リカバリにかかる時間が軽減される。

Streaming Snapshot

S3に継続的に増分バックアップを取得

Backup retention periodでバックアップを残す期間を指定可能

PITRから5分前からBackup retention periodまでの任意の位置で、秒単位で、リカバリ可能

SQLによるフェイルオーバーのテスト

alter system crash(データベースノードのクラッシュをエミュレート)

alter system simulate(システムをシミュレート)

Auroraのパフォーマンスを引き出すために

クエリ並列度が高く、データサイズが大きいケースで効果を発揮

ロック機構やクエリキャッシュに手を入れて性能向上を図っている

write heavyでパフォーマンスが出ない場合にはoffにしてみると良い

CPUを効率的に使うため、MySQLと比較すると高くなるが、スループット性能が落ちにくくなっている

CPUが高くなってもスループットと一緒に確認すると良い

パフォーマンステスト

同一ノードから、複数のインスタンスから実施すると、解りやすい

性能が5倍になるケースとは?

sysbenchを4インスタンスからr3.8xlargeのAuroraインスタンスに実行した場合の結果

TPC−Cの場合は2.5倍の結果

MySQLからワンクリックでAuroraにマイグレート可能

一部パラメータ値にないものがあるので注意

MyISAM形式のテーブルの有無で必要なディスク量が変わる

MySQL 5.6からAuroraへレプリケーションを行うことが可能(逆は現時点では出来ない)

EC2上のMySQLやオンプレミスのMySQLからAuroraに簡単に移行出来る

MySQLからAuroraに移行するメリット

クエリパフォーマンスの高さ、ディスク効率、複数の小さなDBの統合など

まとめ

クラウド時代にAmazonが再設計したRDBMS

高いクエリ実行並列度、データサイズが大きい環境で性能を発揮

高可用性、高速フェイルオーバー、PITRを実現するための多くのチャレンジをしている

移行時にはクエリやフェイルオーバーの性能などの検証をしっかりやってほしい プレビューを利用してフィードバックを!

さいごに

Amazon Auroraの仕組みとポイントについて知ることが出来ました。もっとPreviewを使い込みたいと思います。