我希望的 haproxy 行为如下:
- 解析后端地址失败时不要启动失败
- 用于
libc
在启动时解析地址;配置中不应包含 DNS 服务器 - 使用
libc
解析地址运行 - 如果上次尝试失败,则始终重试名称解析
- 不要每隔 10 秒就向我的 DNS 服务器发送垃圾邮件。仅在需要时解析名称
_
- 对于(1),我已添加
none
到init-addr
- 对于(2),我已添加
libc
到init-addr
不确定 (3) 该怎么办。该resolvers
部分似乎仅支持 DNS,这是什么鬼?如果我在那里添加一个名称服务器并添加resolvers
到我的服务器string
,它就会开始工作,但它每 10 秒发送一次 DNS 请求。我不想这样。当我建立客户端连接时,我愿意等待 haproxy 使用解析后端库,同步。
我断开网络连接,确保后端无法解析,然后重新启动 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
答案1
答案2
选项1:您可以修改 HAProxy 中每个 URL 的 hosts 文件。我在 HAProxy 中平衡了 2 个服务器:server1 和 server2。
编辑 hosts 文件:
# vim /etc/hosts
10.0.0.2 www.server1.com
10.0.0.3 www.server2.com
您必须添加与现有服务器相同的服务器,然后只需重新启动服务器,它就会像魔法一样启动 HAproxy,但是,如果您的 IP 发生变化,您将需要手动更改它们。
选项 2:系统重启后使用 crontab 启动 Haproxy。
#crontab -e
@reboot sleep 60 && systemctl start haproxy
选项 3:如果您正在使用 cockpit Centos/RHEL,如果没有,请安装它。
检查是否已安装:
rpm -qa | grep cockpit
启用驾驶舱:
systemctl enable --now cockpit.socket
使用浏览器访问您的服务器:
https://<IP>:9090
然后,转到服务菜单 >计时器>创建计时器
并在菜单中设置以下内容:
Name : Start HAPROXY
Command : systemctl start haproxy
Timer set: On Reboot
60 seconds