ここにいくつかのヒントがあります:Auroraには多くのインスタンスがあります。 1つは「ライター」(マスター)、もう1つは「リーダー」(スレーブ)です。
ライターがダウンすると、1つのスレーブが新しいマスターに昇格し、他のスレーブがこの新しいマスターから複製されます(自動再起動)。古いマスターが再び現れると、それはスレーブになります。
Auroraには、現在のマスターを指す「xx.cluster-yy.zz.rds.amazonaws.com」のようなクラスター用のDNSエンドポイントがあります。フェイルオーバーが発生すると、DNSが更新されます...ただし、すぐには更新されません。
オーロラへの「接続」とは、インスタンスへの2つの基本的な接続を意味します。1つはマスターへ、もう1つはスレーブへの接続です。ドライバーは、Connection.setReadonly()に従って、マスターまたはスレーブへの基盤となる接続を使用します。
ドライバがインスタンスに接続するたびに、現在の状態がグローバル変数「innodb_read_only」(OFF =マスター)をチェックしていることを確認します。
Auroraインスタンスを追加できるため、初期接続時に、ユーザークラスターエンドポイントを使用して、現在のインスタンスのリストがinformation_schema.replica_host_statusを使用して取得されます。
2つの基盤となる接続を確立するために、ドライバーはランダムホストに接続します。これが現在のマスターである場合、他のすべてのホストはスレーブです。そうでない場合、ドライバーはスレーブに現在のマスターを要求するため、次の接続はinformation_schemaを使用してホストに接続します。 Replica_host_status where session_id ='MASTER_SESSION_ID'(DNSを使用するよりも信頼性が高い)インスタンスへの接続が失敗した場合、このインスタンス名は再利用を避けるために一定期間ブラックリストに入れられます(このブラックリストはjvmごとに共有されます)。ドライバーは、ブラックリストに登録されていないホストがなくなるまで、ランダムに使用可能なホストを再接続しようとします。その後、しばらくの間、ブラックリストに登録されたホストで再試行できます(パラメーターによって異なります)。接続が成功すると、インスタンスは「ブラックリストに登録されていません」。
基盤となるスレーブ接続のフェイルオーバーには、マスター接続が使用され、基盤となるスレッドのプールがバックグラウンドでスレーブインスタンスの再接続を試みます。