主にMySQLについて調査
Amazon Aurora って何?
MySQL/PostgreSQL 互換のリレーショナル・データベース
サポートしているエンジンは?
- MySQL 5.7
- MySQL 5.6
- PostgreSQL 9.6
RDSと何が違うの?
- 高パフォーマンス
- スケーラブル
- 低運用コスト(人もお金も)
- 耐障害性
高パフォーマンス
標準的なMySQLより5倍、PostgreSQLより3倍早い
- ストレージノードでのクエリの並列化
- レプリケーション時にslaveに書き込み負荷がかからない
- ストレージは個別に更新されて、slaveがやるのはログの位置情報の更新とキャッシュクリアだけ
- AWSに最適化されたチューニング
スケーラブル
- インスタンスタイプのスケールアップ/ダウンが容易
- 自動的にスケールするストレージ(10GB〜64TB)
- リードレプリカのスケーリング(最大15台)
- Aurora Multi-Master
- マスタノードも並列化できる
- re:Invent2017発表だけど、まだプレビュー段階
低運用コスト
DBの専門家でなくても運用しやすい
- 各種パラメータはすでに最適化済
- Performance Insights で、ボトルネックや問題を専門家でなくても発見可能に
- 自動フェイルオーバー
- zero-downtime-patching(ZDP)
- データベースエンジンの更新時にダウンタイムが発生しない(すごい!)
耐障害性
- インスタンスの自動修復
- 3つのAZにそれぞれ2つのリードレプリカが作られる
その他便利な機能
- backtrack : DBのデータを巻き戻すことが可能
- database clone: データの複製が一瞬で行われる(参照元はwriteされるまで同じ
- IAM権限でログイン可能(高負荷アプリケーションの接続には向かないらしい
- lambdaを実行可能(!)
mysql.lambda_async
というストアドプロシージャからlambdaを呼べる
- S3への自動バックアップ
- Performance Insights
- 専門家でなくてもクエリパフォーマンスの評価やDBの状態を把握可能に
- Parallel Query
- 1つのSQLを複数のストレージノードとCPUで並列実行して高速化する
- いろいろ制限もある
- Aurora Serverless
- インスタンスタイプの指定が不要 & オートスケール
- アクセスが一定時間発生しないと休眠する
- 開発環境や、低頻度アクセスのDB、社内システムなど向け?
- 機能に制限がある 👉 see: Amazon Aurora サーバーレスの使用 - Amazon Aurora
知っておくべき用語
- パラメータグループ
- エンドポイント
パラメータグループ
Auroraでは、エンジン(MySQLとか)のパラメータを パラメータグループ という単位で設定する
パラメータグループは、 DB クラスターパラメータ と DB インスタンスパラメータ に分かれる
- DB クラスターパラメータ : クラスタ全体に適用されるパラメータ
- DB インスタンスパラメータ : インスタンス毎に設定されるパラメータ
Auroraの構成に最適化されているので、基本的にはいじる必要は無い
参考
- Amazon Auroraを始めるためのパラメータ資料 | 外道父の匠
- 2016年の資料だけれど、変更すべきパラメータが書かれている
エンドポイント
4つのエンドポイントがある
- クラスタエンドポイント : masterノードのエンドポイント read/writeが可能
- 読み取りエンドポイント : リードレプリカへのエンドポイント readのみ。適当に負荷分散してくれる
- インスタンスエンドポイント : 個別の各DBサーバへのエンドポイント
- カスタムエンドポイント : インスタンスをユーザが組み合わせてエンドポイントを作成できる
- たとえば、バッチ処理など重たい処理専用のリードレプリカを決めて、webサービスではそれ以外のリードレプリカを使うとか
参考
Auroraに最適化するためにやること
- 1つのトランザクションで大量のread/writeをする場合、SQLを分けると高速化されやすいとのこと
- 並列実行に特化したチューニングをしているらしい
- Parallel Queryを使う場合はあんまり考える必要がなくなるのかな?
- マシン性能に比例してパフォーマンスが上がるようにチューニングされているので、遅いときはマシンの性能を上げるのが手っ取り早いとのこと
制約事項
- ストレージの最大容量が64TB
- リードレプリカは最大15台
- MySQLでは、InnoDB/ROW_FORMAT=Dynamicのみサポート
ROW_FORMAT= COMPRESSED
が使えない(データを圧縮することで、IOのコストを下げるオプション)
- Performance Insightsは、T2インスタンスで走らせるとメモリが不足する
あんまりわかっていないこと
- zero-downtime-patchingでは、Auroraのバージョンアップはできるけど、エンジン(MySQLとか)の更新はできない?
- Amazon Aurora の更新 - Amazon Aurora 👈 ここだけ見るとダウンタイムが発生するように見える
- リードレプリカのスケジュールに基づいたスケーリングってできるのかな?
- 例えば週末だけリードレプリカを予め増やしておきたいとか
- Auroraへの移行ってどうするの?
- 全文検索エンジンは入れられる?