Haproxy

DNS 恢復後 haproxy 不執行健康檢查

  • June 25, 2020

我想要的 haproxy 行為如下:

  1. 解析後端地址失敗時不失敗啟動
  2. 用於libc在開始時解析地址;配置中不應有 DNS 伺服器
  3. 用於libc執行時解析地址
  4. 如果之前的嘗試失敗,總是重試名稱解析
  5. 不要每 10 秒向我的 DNS 伺服器發送垃圾郵件。僅在需要時解析名稱

_

  • 對於 (1) 我已經添加noneinit-addr
  • 對於(2)我已經添加libcinit-addr

不知道該怎麼做(3)。該resolvers部分似乎只支持DNS,到底是什麼?如果我在那里和resolvers我的伺服器添加一個名稱伺服器string,它開始工作,但它每 10 秒發送一次 DNS 請求。我不想要那個。當我建立客戶端連接時,我願意等待 haproxy 同步使用libc解析**後端

我斷開網路連接,確保後端無法解析並重新啟動 haproxy。然後我連接到網路,確保後端現在可以解析並嘗試使用客戶端。Haproxy 仍然拒絕重試連接到後端,直到我重新啟動或重新載入它:

Apr 25 11:34:28 il systemd[1]: Starting HAProxy Load Balancer...
Apr 25 11:34:28 il haproxy[3411]: [WARNING] 114/113428 (3411) : parsing [/etc/haproxy/haproxy.cfg:49] : 'server app1' : could not resolve address 'basinasrv', disabling server.
Apr 25 11:34:28 il haproxy[3411]: Proxy main started.
Apr 25 11:34:28 il haproxy[3411]: Proxy app started.
Apr 25 11:34:28 il haproxy[3411]: [NOTICE] 114/113428 (3411) : New worker #1 (3412) forked
Apr 25 11:34:28 il systemd[1]: Started HAProxy Load Balancer.
...
Apr 25 11:46:21 il haproxy[3412]: 127.0.0.1:45302 [25/Apr/2019:11:46:21.946] main app/<NOSRV> 0/-1/-1/-1/0 503 212 - - SC-- 1/1/0/0/0 0/0 "CONNECT serverfault.com:443 HTTP/1.1"

_

defaults
   # never fail on address resolution
   default-server init-addr libc,none
   #default-server init-addr last,libc,none
   option log-health-checks
   option httplog

global
   ca-base /etc/ssl/certs
   maxconn     20000
   log         /dev-log local0 debug
   user        haproxy
   chroot      /usr/share/haproxy
   pidfile     /run/haproxy.pid
   daemon

frontend  main
   bind :3129
   mode                 http
   log                  global
   maxconn              8000
   timeout              client  30s
   default_backend             app

backend app
   log                  global
   mode        http
   reqadd      Proxy-Authorization:\ Basic\ xxxxxx
   timeout     connect 5s
   timeout     server  30s
   timeout     queue   30s
   server  app1 basinsrv:443 check ssl verify required ca-file ca-certificates.crt

*在執行時使用 libc 解析地址;沒有 DNS 伺服器應該在配置中

總是重試名稱解析*

據我所知,這根本不可能。

要在 HAproxy 配置中使用主機名而不是 IP 地址,您可以允許 HAproxy 在啟動時進行解析(包含您已經暗示的所有問題),或者您需要定義一個或多個resolvers您指示 HAproxy 如何解析這些主機名的位置,同時跑步。

有關範例,請參閱我的答案here ,其中包含大多數用於 DNS 解析的調整選項。

引用自:https://serverfault.com/questions/964532