Я использую HaProxy для перенаправления трафика на внутренний сервер, у которого есть DNS-имя вместо сетевого адреса:
backend default-backend
server external somedomain.com:80
Проблема в том, что возникает ситуация, когда она может стать неразрешимой. В этом случае HaProxy говорит:
Сервер default-backend / external отключается для обслуживания (статус DNS NX). Осталось 0 активных и 0 резервных серверов. 0 активных сессий, 0 повторно поставлено в очередь, 0 осталось в очереди. backend default-backend не имеет доступного сервера!
Я хотел бы, чтобы HaProxy снова проверил разрешение DNS и начал перенаправлять трафик всякий раз, когда целевое DNS-имя снова разрешается. Проблема в том, что я должен объявить resolvers
раздел и хотя бы один nameserver
который может разрешить такой адрес следующим образом:
resolvers rslvr
nameserver dns0 8.8.8.8:53
Что делать, если я не хочу объявлять резолверы? Я просто хочу, чтобы HaProxy проверил разрешение DNS так же, как при запуске. Является ли это возможным?
Если я не использую резолвер, серверная часть просто перестает работать и не проверяет, доступен ли этот домен снова. То же самое происходит, когда у меня нет nameserver
в resolvers
раздел.
Есть ли способ опустить явное nameserver
объявление или, может быть, использовать какой-нибудь резолвер по умолчанию, используемый HaProxy при запуске?
haproxy версии 1.9 представил новый параметр для раздела резолверов, который устраняет необходимость вручную перечислять серверы имен.
parse-resolv-conf
Видеть их документы для получения дополнительной информации, но по сути это позволяет вам заменить
resolvers mydns
nameserver dns1 10.0.0.1:53
nameserver dns2 10.0.0.2:53
hold valid 10s
с участием
resolvers mydns
parse-resolv-conf
hold valid 10s
предполагая, что в вашем resolv.conf (который читается haproxy, когда у вас нет раздела резолверов) настроены 10.0.0.1:53 и 10.0.0.2:53.