我已经设置了一个 haproxy 来将流量重定向到两台机器。目标是实现这样一种场景:从另一台机器向代理发送查询时,该查询将 100% 重定向到其中一台机器。但出于某种原因,我有时会遇到查询在 haproxy 上停止的情况。
我知道它到达了 haproxy,因为我对其进行了 tcpdump。特定端口处理程序启用了日志记录,工作时它会将数据发送到计算机并将其记录在 /var/log/haproxy.log 中。当问题发生时,我看不到任何通过 tcpdump 发出的包或记录在我提到的日志中。
我正在使用的 haproxy 配置:
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL). This list is from:
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
# An alternative list with additional directives can be obtained from
# https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 10m
timeout server 10m
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
frontend nova-in
bind 0.0.0.0:8774
mode http
option httplog
log global
default_backend nova-server
backend nova-server
log global
mode http
option httplog
option http-tunnel
balance uri
server db-server-01 10.3.80.248:8774 check weight 1
# server db-server-02 10.3.93.87:8774 check weight 1
frontend nova-in-2
bind 0.0.0.0:8774
mode tcp
option tcplog
log global
default_backend nova-server-2
backend nova-server-2
log global
mode tcp
option tcplog
option http-tunnel
balance uri
server db-server-01 10.3.80.248:8774 check weight 1
# server db-server-02 10.3.93.87:8774 check weight 1
我决定注释掉其中一个服务器,以检查选择需要重定向到的服务器是否有问题,但我收到了同样的错误。
当我测试这个问题时,大约有 40% 的时间包能够正确传输。
有谁知道为什么有些查询在 haproxy 处停止而其他查询却毫无问题地通过?
编辑:我忘了说了,防火墙已禁用,iptables 已清除。如果有人问直接与服务器对话是否总能得到响应,因此我确信问题出在 haproxy 上。