Внезапно обнаружилось, что query cache с бэк-эндом postgresql от PoserDNS работает как-то странно: Без нагрузки оно работает на ура: делает запросы в базу, кэширует ответы от базы, кэширует заготовки пакетов, отвечает, всё прекрасно работает. Но стоит на взод подать некоторую реальную нагрузку как Query Cache начинает давать сбои... самое неприятное, что сбои оседают не только в нём но и в Packet Cache и в результате мы получаем "мерцающую" ошибку. Какие-то зоны начинают то пропадать то появляться.

Небольшое лирическое отступление: на этих серверах лежат зоны хостера, живых зон там немногим больше 1 млн, packet cache со временем жизни в 900 сек в час пик держит до ~800 тыс пакетов, % попадания в Pcache ~ 60%(ttl=2500 сек), в Qcache ~40%(ttl=20sec, default), нагрузка по траффику 0.2-0.5 мбит на сервер. То есть характерной особенностью является "ширина" шаблона запросов, их разнообразие.

Так вот: неприятная особенность проявилась в свежем PowerDNS-3.4.8, а в версии 3.1, той что идёт с Debian Wheezy, таких "особенностей" не было, вместе с тем там не было ACL для AXFR, соответственно, либо мы выдаём AXFR всем, либо мы выдаём его никому (ACL в 3.1 работают только для авторизаванных запросов https://doc.powerdns.com/md/authoritative/tsig/#provisioning-outbound-axfr-access , но его мало кто использует из тех, кто хочет получать AXFR). А AXFR мы хотели реализовать для нашего партнёра-реистратора давно, но нам самим он не сильно нужен.

Порывшись в issue-трекере на гитхабе powerdns, я понял, что у них кипит работа над большим релизом 4.0, все баги отложены в milestone до 4.1.0, а то и до 4.1.5, что опечалило: иными словами придётся билдить и билдить версии с 3.1 до 3.4.7 в надежде, что найдётся некая промежуточная версия, кэш которой не подвержен этом дефекту с одной стороны и есть AXFR в нужном нам виде с другой стороны... А всего-то попросили обновить DNS-сервера компании...

Судя по всему, у этой истории будет продолжение. :)

29 Сентября того же 2016-го года. Долгожданное продолжение истории.

Итак, проблемы с тем, что ACL для рекурсивных запрососв работали некорректно были решены с выходом версии 4.0.0. Теперь ответы рекурсовным клиентам не подмешиваются в ответы нерекурсивным клиентам и наоборот, кроме того, никуда не теряется packet cache-ированные ответы вообще. Во всяком случае на первый взгляд pcache работает хорошо.

Однако, обнаружилась другая неприятность: в postgresql-ном бэкэнде не чистятся sql-запросы, то есть сами строки запросов в базу, в результате powerdns утекает на ~3 гига в сутки при штатной нагрузке.

Отыскал я официальный канальчик в сети OFTC, где сидят разработчики powerdns. Ребята оказались довольно толковыми, быстро нашли место с багом и выдали нужный патч менее чем за сутки, исправление тривиальное. Однако проблема затрагивает один из бэкэндов, утечка легко воспроизводится и реально не способствует стабильной работе сервиса... прошло уже больше 3-х недель, а новая версия с заплаткой так и не зарелизилась, это печалит.

Из неприятностей также стОит отметить, что "условно lts" версия 3.4.x так и осталась без исправления багов pcache, что какбэ вызывает по меньшей мере удивление.

Пока что мы едем на версии 4.0.1 с патчем, но наверно с этого поезда придётся спрыгнуть и пересесть на что-нибудь вроде yadifa, скажем, более адекватное в работе своей.

Next Post