Aqui estão algumas dicas:Aurora tem muitas instâncias. Um é "escritor" (Mestre), outros são "Leitor" (Escravos).
Quando um gravador está inativo, um escravo será promovido a novo mestre, outros escravos agora serão replicados a partir deste novo mestre (reinicialização automática). Se o velho mestre ressurgir, ele se tornará um escravo.
O Aurora tem um endpoint DNS para cluster como "xx.cluster-yy.zz.rds.amazonaws.com" que aponta para o mestre atual. Quando ocorre um failover, o DNS é atualizado... mas não imediatamente.
Uma "conexão" com aurora significa 2 conexões subjacentes a instâncias:uma para mestre, outra para escrava. O driver usará a conexão subjacente ao mestre ou escravo de acordo com Connection.setReadonly().
Toda vez que o driver se conectar a uma instância, ele garantirá a variável global de verificação do estado atual "innodb_read_only" (OFF =master).
As instâncias do Aurora podem ser adicionadas, portanto, na conexão inicial, usando o endpoint do cluster de usuário, a lista atual de instâncias será recuperada usando information_schema.replica_host_status.
Para estabelecer as 2 conexões subjacentes, o driver se conectará a um host aleatório, se este for o mestre atual, bom, então todos os outros hosts são escravos, se não, o driver perguntará ao escravo seu mestre atual, então a próxima conexão conectará o host usando information_schema. replica_host_status onde session_id ='MASTER_SESSION_ID' (mais confiável do que usar DNS). Se a conexão com uma instância falhar, esse nome de instância será colocado em uma lista negra por um determinado período de tempo (essa lista negra é compartilhada por jvm) para evitar reutilizá-la. O driver tenta reconectar um host aleatório disponível até que não haja nenhum que não esteja na lista negra, então pode tentar novamente com um na lista negra por algum tempo (dependendo dos parâmetros). Se a conexão for bem-sucedida, a instância será "não incluída na lista negra".
Para failover da conexão escrava subjacente, a conexão mestre é usada e algum pool de thread subjacente tentará reconectar uma instância escrava em segundo plano.