Удаление сервера-шаблона созданного сервера после SRV_ST_STOPPED и удаление из SRV DNS - PullRequest
0 голосов
/ 29 мая 2019

Я настроил haproxy для создания внутренних серверов через server-template, указывая на консул DNS (SRV):

resolvers foo
  nameserver consul 127.0.0.1:8600
  resolve_retries 30
  timeout retry 2s
  hold valid 10s
  accepted_payload_size 8192

backend bar
  mode http
  balance roundrobin
  server-template bar 50 _bar.service.consul.myorg.internal check port 8080 inter 5s rise 2 fall 3 resolvers foo resolve-prefer ipv4

При проверке show servers state я вижу, что в haproxy есть несколько очень старых серверов с srv_op_state = SRV_ST_STOPPED и srv_time_since_last_change = ~ 19 дней секунд. Эти серверы были уничтожены несколько дней назад и больше не возвращаются из запроса dig _bar.service.consul.myorg.internal SRV;, но по какой-то причине они остаются в состоянии haproxy.

Это ведет себя как ожидалось (например, haproxy не перенаправляет трафик на него из-за сбоя проверки работоспособности) до тех пор, пока srv_addr неизбежно не будет повторно использован. Если новый сервер не является приложением «bar», но проходит проверку работоспособности, haproxy будет направлять ему запросы «bar», что вызывает проблемы, поскольку новый сервер не может правильно обслуживать запросы «bar».

Как я могу заставить haproxy удалить эти серверы из своего состояния после того, как они больше не находятся в консольном DNS?

Редактировать: после установки размера шаблона сервера равным 1 и повторного создания службы с новым IP-адресом (для которого в DNS-консуле правильная запись SRV) состояние haproxy продолжает отражать один старый, нездоровый сервер.

Редактировать 2: при проверке работоспособности HTTP уровня 7 (option httpchk GET /health HTTP/1.1\r\nHost:\ haproxy) сервер, сгенерированный по шаблону сервера, обновил свой адрес в соответствии с адресом DNS консула.

Редактировать 3: после увеличения размера шаблона сервера до 50, запуска 10 исправных экземпляров службы, которые правильно регистрируются в DNS, и завершения 5 экземпляров (что приводит к сбою проверок работоспособности), haproxy сохраняет отключенные серверы с SRV_ST_STOPPED казалось бы, на неопределенный срок. Существует ли какой-либо автоматический механизм, заставляющий haproxy выселять эти серверы, чтобы другая служба, которая запускалась по тому же адресу и проходила проверки работоспособности, не принимала трафик неправильно?

...