为什么 HAProxy 没有重定向它收到的所有数据?

为什么 HAProxy 没有重定向它收到的所有数据?

我已经设置了一个 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 上。

相关内容