Haproxy
DNS 恢復後 haproxy 不執行健康檢查
我想要的 haproxy 行為如下:
- 解析後端地址失敗時不失敗啟動
- 用於
libc
在開始時解析地址;配置中不應有 DNS 伺服器- 用於
libc
在執行時解析地址- 如果之前的嘗試失敗,總是重試名稱解析
- 不要每 10 秒向我的 DNS 伺服器發送垃圾郵件。僅在需要時解析名稱
_
- 對於 (1) 我已經添加
none
到init-addr
- 對於(2)我已經添加
libc
到init-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 解析的調整選項。