更新日: 2019/7/27
DBクラスター
- DBクラスターは1つ以上のDBインスタンスとそのデータを管理する1つのクラスターボリュームから構成される。計算(DBエンジン?)とストレージを分割している。
- クラスターボリュームは複数のAZにまたがった仮想的なDBストレージボリュームであり、個々のAZそれぞれがDBクラスターのデータのコピーを1つずつ持っている。
- DBインスタンスの種類にはプライマリDBインスタンスとレプリカの2つがある
- DBクラスターは最低2つのAZにそれぞれ1つのサブネットがあるVPC内に作成可能。これは、(プライマリDBインスタンスの居る)1つのAZに障害が発生した場合でも少なくとも別のAZにいるDBインスタンス(レプリカ)をフェイルオーバー先にできるようにするため
プライマリDBインスタンス
- プライマリDBインスタンスはDBクラスターに1つだけある
- 読み書き処理とクラスターボリュームへのデータ操作すべてを担当する
- プライマリインスタンスを再起動すると、そのDBクラスターのレプリカもすべて自動的に再起動される。これはDBクラスター全体の読み取り書き込みの一貫性を保証するエントリポイントを再作成するためである
Aurora レプリカ
- レプリカは読み取り処理のみサポート。読み取り処理の負荷分散に使用できる(レプリカラグに注意)
- 最大15個まで追加できる
- プライマリDBインスタンスが使用不能になった場合に、Auroraは自動的にレプリカにフェイルオーバーする。フェイルオーバー先のレプリカはプライマリDBインスタンスに昇格する
- レプリカをプライマリDBインスタンスと別のAZに配置しておくことでプライマリDBインスタンスのいるAZの障害時にも対応できる。
- レプリカにフェイルオーバーの優先順位を設定できる
- プライマリDBインスタンスが更新を書き込んですべてのレプリカがそのデータを参照できるようになるのは100ミリ秒以内(レプリカラグ)。ただし書き込みの状況によって変わる
- フェイルオーバーでは短時間であるが、プライマリDBインスタンス(新?)への読み取り書き込みが失敗する時間がある。それから他のレプリカは再起動される
- レプリカのないクラスターはプライマリDBインスタンスを障害からリカバリするまで使用不能になる
- プライマリインスタンスと同じインスタンスクラスにすることを推奨
- すべてのレプリカは同一データ(ストレージ)を扱う。プライマリインスタンスが扱うのとも同じである
- Auroraは読み取り専用接続を自動的に複数のDBインスタンスに分散する
- 削除されるレプリカには実行中のSQLのために3分間の猶予時間がある
- Auroraのレプリカはトランザクション分離レベルに常にREPEATABLE READを使用する(変更不可)プライマリインスタンスは変更可能。この制約は、レプリカ上でのユーザーレベルのロックを扱わないようし、多数のユーザー接続をサポートするためにレプリカがスケールできるように、またレプリカラグを最小限にするために設けられている
- プライマリインスタンスでDDLを実行したときに、レプリカでの接続がそのDDLに関係するDBオブジェクト、テーブルを使用していると、レプリカの接続は切断される
- Auto Scalingを使用してレプリカを増減させることができる。クラスター作成時にレプリカは少なくとも1つは必要(その後は0にもなりうる?)
クラスターボリューム
- SSDを使用
- 1つのリージョン内の複数AZにデータを自動的に複製する。データの堅牢性、DBの可用性が高まる
- 複製の数はクラスタのDBインスタンスの数とは関係しない
- DBインスタンスが1つであっても(その数とは関係なく)、DBインスタンスが複数のAZに配置されているかに関係なく、基盤となるストレージボリュームは複数のAZにまたがって配置されている複数のストレージノードから構成される
- AuroraはDBボリュームを10GBのセグメントに分割して複数のディスクに分散して格納する。個々の10GBのかたまりは3つのAZに6つ複製される。
- 上記により、Auroraはデータの書き込みについては2つの複製の喪失まで耐えることができ、データの読み込みについては3つの複製の喪失まで耐えることができる。(ディスク障害への耐性)
- Auroraは自己修復を行う。データブロックやディスクは定期的にエラーがないか検査され、あれば自動的に修復される
- クラスターボリュームにはユーザーのすべてのデータ、スキーマオブジェクト、システムテーブルやバイナリログといった内部的なメタデータが格納される。Auroraでは例えば、テーブル、インデクス、BLOB、ストアドプロシージャなどを格納している
- 実際のデータ量の増加に応じて自動的に拡張される
- 最大64TBまで可能。テーブルの最大サイズも同じ。
- 課金は実際に確保している領域に応じてだが、high water mark式のため、データを削除しても確保している領域は減らないので注意