Usamos Route53 para nosso DNS privado, especificamente a Política de Roteamento de Resposta Multivalor, sem verificações de integridade para balanceamento de dump/lazy load.
Isso funcionou bem para nós, até ontem, quando notamos um comportamento estranho.
Temos um conjunto de registros para ro.mysql.foo.bar.com
, que contém os IPs de nossas réplicas MySQL somente leitura.
Se você executar um DIG, isso refletirá isso;
dig A ro.mysql.foo.bar.com
;; QUESTION SECTION:
;ro.mysql.foo.bar.com. IN A
;; ANSWER SECTION:
ro.mysql.foo.bar.com. 4 IN A 10.2.2.2
ro.mysql.foo.bar.com. 4 IN A 10.2.2.3
ro.mysql.foo.bar.com. 4 IN A 10.2.2.4
O comportamento esperado é quando o mysql atinge, ro.mysql.foo.bar.com
ele se conecta a um dos 3 hosts aleatoriamente, de uma forma com balanceamento de carga idiota/aleatório. Isso funcionou bem até ontem.
Se eu correr
mysql -h ro.mysql.foo.bar.com -e "select @@hostname;"
Eu esperaria que a saída @@hostname
variasse entre 10.2.2.2
, 10.2.2.3
e10.2.2.4
Em vez disso, ele não roteia o tráfego aleatoriamente entre os três IPs; ele pegará um e usará apenas um.
+-----------------------------------+
| @@hostname |
+-----------------------------------+
| 10.2.2.3 |
+-----------------------------------+
Se removermos 10.2.2.3
do DNS, ele deixará de usá-lo. Se o adicionarmos novamente, ele continuará a ser usado 10.2.2.3
novamente.
Executamos nosso próprio resolvedor via PowerDNS (que estamos descontinuando), mas não parece haver nenhuma falha que possamos ver, o PowerDNS também teve seu cache DNS limpo.