为了避免使用TCP时需要SNI的运行状况检查,我可以进行以下哪种工作
listen website
bind :10003
mode tcp
server website_proxy_aws localhost:14001 check fall 3 rise 2
server website_proxy_dc localhost:14002 check fall 3 rise 2
listen website_proxy_aws
bind :14001
mode tcp
option httpchk HEAD / HTTP/1.1\r\nHost:\ website-lb.domain.com
server website_proxy_svc_aws internal-alb.eu-west-1.elb.amazonaws.com:80 check sni req.hdr(Host) verify none fall 3 rise 2 weight 2
listen website_proxy_do
bind :14002
mode tcp
option httpchk HEAD / HTTP/1.1\r\nHost:\ website-lb.domain.com
server ivendiwebsite_proxy_svc_dc do-website-lb.domain.com:443 check ssl sni req.hdr(Host) verify none fall 3 rise 2 weight 2
现在,如果website_proxy_do
处于关闭状态,则它在统计页面中对于website_proxy_do
侦听器将显示为红色。但是website
侦听器对于这两个都显示为绿色。
我想我在这里做错了一个简单的解释。
(我知道在此示例中,我可以使用一个侦听,因为两者之间的主机是相同的,我只是想知道为什么网站侦听器应该执行tcp检查,但无法确认故障站点是下)
我了解您在看什么。在回答之前,我想补充一下我重复问题的方式,这样很容易说出我们在同一页面上。
这些是我的HAProxy侦听器,与您所做的类似。
listen port_33306
bind :33306
mode tcp
server local-tunnel localhost:23306 check
listen port_23306
bind :23306
mode tcp
server mysql-tunnel localhost:13306 check
[我使用端口13306上的socat
隧道化了在Aurora上运行的MySQL,这将很容易理解问题所在。
所以这是它的外观
localhost:33306 => localhost:23306 => localhost:13306 => myaurora.aws-aurora-blah-blah.com:3306
现在,这是我的netstat
外观
robot@proxy:~$ netstat -tulpn
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:13306 0.0.0.0:* LISTEN 3465/socat
tcp 0 0 0.0.0.0:23306 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:33306 0.0.0.0:* LISTEN -
这就是我的haproxy?stats
页面的外观。
现在,我正在断开tcp端口socat
到Aurora的13306
隧道,因此就像您说的那样,它将破坏流量,并在我的port_23306
页面上将侦听器haproxy?stats
显示为红色,因为端口13306
不再存在。
所以,直到这里我们有相似的输出,现在的问题是,为什么在port_33306
未通过检查的情况下,侦听器port_23306
仍为绿色。]
现在是我的netstat
外观。
robot@proxy:~$ netstat -tulpn (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:23306 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:33306 0.0.0.0:* LISTEN -
如您所见,由于我杀死了进程,所以端口
socat
的隧道13306
不存在,并且侦听器正在检查localhost:13306
。即使连接不存在,HAProxy仍保持打开端口绑定的状态,如果我启动隧道,则将端口23306
用于通讯,显然,无需重新启动HAProxy,它将恢复为绿色。
由于此,23306
打开,并且port_33306
中将端口33306
绑定到localhost:23306
的侦听器仅检查23306
,并且如果23306
不对树进行更深入的检查是否连接到某个进程。
因此,我们可以看到侦听器port_33306
仍为绿色,因为它检查端口23306
,而侦听器port_23306
为红色,这是因为绑定23306
已打开并准备连接到某物,但检查是在未打开的端口13306
上完成,因此正在通过端口23306
的健康检查,但未通过13306
的健康检查。
很难用确切的术语和所有内容进行解释,但我尝试过。
希望这会有所帮助。