Amazon Aurora を知らなかった人が 2018/12 現在の Aurora の最新状況を分かる範囲でまとめた

主にMySQLについて調査

Amazon Aurora って何?

MySQL/PostgreSQL 互換のリレーショナル・データベース

サポートしているエンジンは?

  • MySQL 5.7
  • MySQL 5.6
  • PostgreSQL 9.6

RDSと何が違うの?

  • 高パフォーマンス
  • スケーラブル
  • 低運用コスト(人もお金も)
  • 耐障害性

高パフォーマンス

標準的なMySQLより5倍、PostgreSQLより3倍早い

  • ストレージノードでのクエリの並列化
  • レプリケーション時にslaveに書き込み負荷がかからない
    • ストレージは個別に更新されて、slaveがやるのはログの位置情報の更新とキャッシュクリアだけ
  • AWSに最適化されたチューニング

スケーラブル

低運用コスト

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の構成に最適化されているので、基本的にはいじる必要は無い

参考

エンドポイント

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とか)の更新はできない?
  • リードレプリカのスケジュールに基づいたスケーリングってできるのかな?
    • 例えば週末だけリードレプリカを予め増やしておきたいとか
  • Auroraへの移行ってどうするの?
  • 全文検索エンジンは入れられる?

参考リンク