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 => Отображение записей не так часто меняется.
Иногда на самом деле достаточно простых глупых исправлений, и вам не нужно решать все проблемы мира, чтобы получить нужные вам результаты!