HAProxy负载均衡TCP流量

14

我正在使用HAProxy,尝试在两个节点上(TCP)负载均衡运行在端口6311上监听TCP套接字以调用R脚本的Rserve服务。

以下是我的配置文件。当我运行HAProxy时,它没有任何问题。但是当我连接到平衡的节点时,会出现以下错误。配置有问题吗?

握手失败:期望32字节头,得到-1

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    tcp
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    #option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000


listen haproxy_rserve
        bind *:81
        mode tcp
        option tcplog
        timeout client  10800s
        timeout server  10800s
        balance leastconn
        server rserve1 rserveHostName1:6311
        server rserve2 rserveHostName2:6311

listen stats proxyHostName:8080
    mode http
    stats enable
    stats realm Haproxy\ Statistics 
    stats uri /haproxy_stats
    stats hide-version
    stats auth admin:password

我尝试了下面这种前端后端负载均衡的方式,结果相同。

frontend haproxy_rserve
    bind *:81
    mode tcp
    option tcplog
    timeout client  10800s
    default_backend rserve

backend rserve
    mode tcp
    option tcplog
    balance leastconn
    timeout server  10800s  
    server rserve1 rserveHostName1:6311
    server rserve2 rserveHostName2:6311 
1个回答

34

在为解决如何平衡负载R而苦苦挣扎了一周后,下面的(完全免费/开源软件堆栈)方案奏效了。

如果有更多人在参考此内容,我将发布一篇详细的博客,介绍从安装到配置的过程。

使用以下配置能够通过HAProxy TCP负载均衡器平衡负载Rserve请求。与问题部分中的配置非常相似,但前端和后端已分离。

#Load balancer stats page access at hostname:8080/haproxy_stats
listen stats <load_balancer_hostname>:8080
    mode http
    log global
    stats enable
    stats realm Haproxy\ Statistics 
    stats uri /haproxy_stats
    stats hide-version
    stats auth admin:admin@rserve

frontend rserve_frontend
    bind *:81
    mode tcp
    option tcplog
    timeout client  1m
    default_backend rserve_backend

backend rserve_backend
    mode tcp
    option tcplog
    option log-health-checks
    option redispatch
    log global
    balance roundrobin
    timeout connect 10s
    timeout server 1m   
    server rserve1 <rserve hostname1>:6311 check
    server rserve2 <rserve hostname2>:6311 check
    server rserve3 <rserve hostname3>:6311 check

如果启用了SELinux,则以下命令将为HAproxy启用远程连接

/usr/sbin/setsebool -P haproxy_connect_any 1

防火墙端口可能也需要开放:

firewall-cmd --permanent --zone=public --add-port=81/tcp
firewall-cmd --permanent --zone=public --add-port=8080/tcp

同时,在 Rserve 配置文件中使用 remote enable 启用远程连接。


1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Sandeep
1
@Sandeep 没有特别的理由不使用nginx。发现haproxy专门用于反向代理,并且在这方面做得很好,几十年来我不需要像nginx一样的其他功能(比如Web服务器)。是的,我们可以只使用它的反向代理部分。但最终选择了haproxy。 - Anand
3
@Sandeep 这是NGINX实现TCP负载均衡的例子。https://www.nginx.com/resources/admin-guide/tcp-load-balancing/ - Anand
3
我们目前使用nginx作为TCP反向代理,但考虑转换到HAProxy,因为nginx只有被动健康检查,除非你升级到nginx+。我们不太愿意支付每年2.5k美元的费用,而HAProxy则免费提供此功能。 - Michael Hobbs
@MichaelHobbs 目前只有研究过,还没有实际经验,但是从负载均衡能力来看,它(HAProxy)确实非常有潜力。内置的统计页面确实非常不错。 - Per Lundberg
@Anand /usr/sbin/setsebool 是配置SELinux的实用程序。这意味着您正在运行CentOS/RHEL并启用了SELinux。您可以通过Google了解SELinux是什么以及为什么大多数系统管理员在设置操作系统的第一分钟禁用它。简而言之,它应该是一个安全层,防止读取文件或打开网络套接字等操作,但经常会破坏应用程序,并且没有任何指示发生了什么。 - user5994461

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接