Мы используем Route53 для нашего частного DNS, в частности политику маршрутизации с несколькими значениями ответа, без проверок работоспособности для дамповой/ленивой балансировки нагрузки.
Это работало у нас хорошо, пока вчера мы не заметили странное поведение.
У нас есть набор записей для ro.mysql.foo.bar.com
, который содержит IP-адреса наших реплик MySQL, доступных только для чтения.
Если вы запустите DIG, он это отразит;
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
Ожидаемое поведение — когда mysql попадает, ro.mysql.foo.bar.com
он подключается к одному из 3 хостов наугад, в стиле dumb/random load balancer. Это работало нормально до вчерашнего дня.
Если я побегу
mysql -h ro.mysql.foo.bar.com -e "select @@hostname;"
Я ожидаю, что вывод @@hostname
будет варьироваться между 10.2.2.2
, 10.2.2.3
, и10.2.2.4
Вместо этого он не маршрутизирует трафик случайным образом по трем IP-адресам, а берет и использует только один.
+-----------------------------------+
| @@hostname |
+-----------------------------------+
| 10.2.2.3 |
+-----------------------------------+
Если мы удалим 10.2.2.3
из DNS, он перестанет его использовать. Если мы добавим его обратно, он продолжит использовать только 10.2.2.3
снова.
Мы используем собственный резолвер через PowerDNS (от которого мы постепенно отказываемся), но, судя по всему, никаких неполадок в этом нет. Кэш DNS PowerDNS также был очищен.