Ecco alcuni suggerimenti:Aurora ha molte istanze. Uno è "scrittore" (Maestro), altri sono "Lettore" (Slave).
Quando un writer è inattivo, uno slave verrà promosso a nuovo master, gli altri slave verranno ora replicati da questo nuovo master (riavvio automatico). Se il vecchio padrone risalirà, diventerà uno schiavo.
Aurora ha un endpoint DNS per cluster come "xx.cluster-yy.zz.rds.amazonaws.com" che punta al master corrente. Quando si verifica un failover, il DNS viene aggiornato... ma non immediatamente.
Una "connessione" ad aurora significa 2 connessioni sottostanti alle istanze:una al master, una allo slave. Il driver utilizzerà la connessione sottostante per master o slave in base a Connection.setReadonly().
Ogni volta che il driver si connette a un'istanza, garantirà il controllo dello stato corrente della variabile globale "innodb_read_only" (OFF =master).
È possibile aggiungere istanze Aurora, quindi alla connessione iniziale, utilizzando l'endpoint del cluster utente, l'elenco corrente di istanze verrà recuperato utilizzando information_schema.replica_host_status.
Per stabilire le 2 connessioni sottostanti, il driver si connetterà a un host casuale, se questo è il master corrente, allora tutti gli altri host sono slave, in caso contrario, il driver chiederà allo slave il suo master attuale, quindi la connessione successiva si collegherà all'host usando information_schema. replica_host_status dove session_id ='MASTER_SESSION_ID' (più affidabile rispetto all'utilizzo di DNS). Se la connessione a un'istanza non riesce, il nome dell'istanza verrà inserito in una lista nera per un certo periodo di tempo (questa lista nera è condivisa per jvm) per evitare di riutilizzarla. Il driver tenta di ricollegare un host disponibile casuale fino a quando non ce n'è uno non nella lista nera, quindi può riprovare con uno nella lista nera per un po' di tempo (a seconda dei parametri). Se la connessione ha esito positivo, l'istanza è "non inserita nella lista nera".
Per il failover della connessione slave sottostante, viene quindi utilizzata la connessione master e alcuni pool di thread sottostanti tenteranno quindi di ricollegare un'istanza slave in background.