CNDN PowerDNS с несколькими записями A дает неожиданные результаты

Эта проблема, из того, что я могу сказать, изолирована от PowerDNS. На серверах работают два пакета pdns-static-3.0.1-1.i386.rpm а также pdns-recursor-3.3-1.i386.rpm на самой последней версии Amazon Linux.

Балансировщикам нагрузки amazon ec2 назначается CNAME с несколькими хостами. Ниже приведен пример фактического поведения. Обратите внимание, что хосты всегда находятся в одном и том же порядке.

[root@localhost ~]# host cache.domain.com
cache.domain.com is an alias for xxxxx.us-east-1.elb.amazonaws.com.
xxxxx.us-east-1.elb.amazonaws.com has address aaa.aaa.aaa.aaa
xxxxx.us-east-1.elb.amazonaws.com has address bbb.bbb.bbb.bbb
[root@localhost ~]# host cache.domain.com
cache.domain.com is an alias for xxxxx.us-east-1.elb.amazonaws.com.
xxxxx.us-east-1.elb.amazonaws.com has address aaa.aaa.aaa.aaa
xxxxx.us-east-1.elb.amazonaws.com has address bbb.bbb.bbb.bbb
[root@localhost ~]# host cache.domain.com
cache.domain.com is an alias for xxxxx.us-east-1.elb.amazonaws.com.
xxxxx.us-east-1.elb.amazonaws.com has address aaa.aaa.aaa.aaa
xxxxx.us-east-1.elb.amazonaws.com has address bbb.bbb.bbb.bbb

Ожидаемое поведение - круговой прием для хозяев

[root@localhost ~]# host cache.domain.com
cache.domain.com is an alias for xxxxx.us-east-1.elb.amazonaws.com.
xxxxx.us-east-1.elb.amazonaws.com has address aaa.aaa.aaa.aaa
xxxxx.us-east-1.elb.amazonaws.com has address bbb.bbb.bbb.bbb
[root@localhost ~]# host cache.domain.com
cache.domain.com is an alias for xxxxx.us-east-1.elb.amazonaws.com.
xxxxx.us-east-1.elb.amazonaws.com has address bbb.bbb.bbb.bbb
xxxxx.us-east-1.elb.amazonaws.com has address aaa.aaa.aaa.aaa
[root@localhost ~]# host cache.domain.com
cache.domain.com is an alias for xxxxx.us-east-1.elb.amazonaws.com.
xxxxx.us-east-1.elb.amazonaws.com has address aaa.aaa.aaa.aaa
xxxxx.us-east-1.elb.amazonaws.com has address bbb.bbb.bbb.bbb

Адреса в конечном итоге меняются местами, но, похоже, на 30-минутном таймере кеширования изменение TTL записи, похоже, ни на что не влияет. Похоже, что распознаватель имеет кэш ответа. Это отрицательно сказывается на моем приложении, поскольку вся нагрузка отправляется только одному из балансировщиков нагрузки (зон доступности), поэтому, если у меня есть серверы в двух зонах, тогда одновременно загружается только одна зона.

Знаете ли вы, как я могу это исправить, чтобы каждый раз при разрешении хоста чередовался адрес адресов.


DIG OUTPUT

; DiG 9.7.6-P1-RedHat-9.7.6-1.P1.18.amzn1 cache.domain.com;; глобальные параметры: +cmd;; Получил ответ:;; Код операции HEADER: QUERY, статус: NOERROR, id: 54610;; флаги: qr rd ra; ЗАПРОС: 1, ОТВЕТ: 3, ПОЛНОМОЧИЯ: 0, ДОПОЛНИТЕЛЬНО: 0
;; РАЗДЕЛ ВОПРОСА:
cache.domain.com. В
;; ОТВЕТ РАЗДЕЛ:
cache.domain.com.    100     IN      CNAME   xxxxx.us-east-1.elb.amazonaws.com.                                                                                                                 
xxxxx.us-east-1.elb.amazonaws.com. 3 IN A aaa.aaa.aaa.aaa
xxxxx.us-east-1.elb.amazonaws.com. 3 В A bbb.bbb.bbb.bbb
;; Время запроса: 0 мс;; СЕРВЕР: ccc.ccc.ccc.ccC#53(ccc.ccc.ccc.ccc);; КОГДА: Пн, 2 июля 15:09:27 2012;; MSG РАЗМЕР rcvd: 130

Конфигурация рекурсора

позволяют-с =0.0.0.0/0
Dont-запрос =
локальный адрес 127.0.0.1 =
local-port=530                                                                  # Порт должен быть изменен на 530, потому что он не подходит для работы на том же порту, что и DNS-сервер
тихий = да
setgid= PDNS
Setuid= PDNS
отключить-packetcache=
packetcache-ТТЛ =0
forward-zone =domain.local=LOCALIP,domain.cloud=LOCALIP                         # Переадресация двух зон, которые нам нужны, обратно на локальный DNS-сервер
forward-zone-recurse=amazonaws.com=172.16.0.23,compute-1.internal=172.16.0.23  # Пересылать запросы для доменов amazons в распознаватель для amazon

РЕШЕНИЕ

добавьте следующие строки в recursor.conf

disable-packetcache=
packetcache-ttl=0

добавьте следующую строку в pdns.conf

recursive-cache-ttl=0

2 ответа

Решение

Рекурсор PowerDNS кэшируется на двух уровнях.

Он кэширует ответы от авторитетных серверов до TTL, указанного в полученном ответе (ограничен max-cache-ttl, но никогда не превышает TTL, полученный при аутентификации).

Кроме того, когда генерируется и отправляется ответный пакет от рекурсора к клиенту (вашим клиентам, генерирующим нагрузку), этот пакет кэшируется целиком, поэтому на тот же вопрос можно ответить очень быстро (без разбора), если он приходит снова. Это называется кешем пакетов.

Тасование происходит между этими двумя уровнями. Это означает, что ваши результаты фактически перетасовываются, но их порядок перенаправления поддерживается стабильным с помощью кеша пакетов (по умолчанию до часа). Если вы хотите перемешать для каждого ответа, установите "disable-packetcache" или "packetcache-ttl=0".

Не обязательно "исправить" - но нужно ли вам использовать CNAME из вашего приложения, а не напрямую запрашивать основную запись A? Предположительно CNAME => Отображение записей не так часто меняется.

Иногда на самом деле достаточно простых глупых исправлений, и вам не нужно решать все проблемы мира, чтобы получить нужные вам результаты!

Другие вопросы по тегам