HA Proxy 无法对我的 Web 请求进行负载平衡。我做错了什么?

HA Proxy 无法对我的 Web 请求进行负载平衡。我做错了什么?

我终于以我想要的方式设置并运行了 HA Proxy。但是,它并没有对收到的 Web 请求进行负载平衡。所有请求目前都被转发到集群中的第一个服务器。我将在下面粘贴我的配置 - 如果有人能发现我可能出错的地方,我将不胜感激。

这是我第一次尝试在 *nix 环境中配置 Web 服务器。

首先,我在与 Apache 集群中的第一台服务器相同的主机上运行 HA Proxy。我们稍后会将这些服务器移至虚拟主机,它们将拥有不同的虚拟主机,但我现在想让它运行起来。

两个 Web 服务器都在接受健康检查,并正确报告。haproxy?stats 页面正确报告了正常运行和宕机的服务器。我通过更改检查文件的名称对此进行了测试。我尚未对这些服务器施加任何负载。我刚刚在几个选项卡上打开了 URL(私人浏览),并且有几个同事也点击了该 URL。所有流量都流向 WEB1。我的平衡是否不正确?

global
      maxconn 10000
      nbproc 8
      pidfile /var/run/haproxy.pid
      log 127.0.0.1 local0 debug
      daemon

defaults
      log global
      mode http
      retries 3
      option redispatch
      maxconn 5000
      contimeout 5000
      clitimeout 50000
      srvtimeout 50000

listen WEBHAEXT :80,:8443
      mode http
      cookie sessionbalance insert indirect nocache
      balance roundrobin
      option httpclose
      option forwardfor except 127.0.0.1
      option httpchk HEAD /health_check.txt
      stats enable
      stats auth rah:rah
      server WEB1 10.90.2.131:81 cookie WEB_1 check
      server WEB2 10.90.2.130:80 cookie WEB_2 check

编辑:

我使用 ab(apache 基准测试)成功运行了测试,负载在两个节点上均匀分布。我不确定之前我做错了什么,但上述配置有效。

答案1

您如何检查所有请求是否都发送到单个服务器?配置 HAProxy 后,您将使用粘性会话,其中 HAProxy 在每个客户端上设置一个 cookie,将其定向到每个请求的同一后端节点。如果您只是在单个浏览器中不断重新加载,您会看到每个请求都发送到同一个后端。

答案2

我刚刚尝试了您提供的确切配置。首先,健康检查对我来说不起作用,我不得不在“health_check.txt”(haproxy-1.4.10)前面添加一个“/”。

但是负载平衡工作正常。每次我关闭并重新打开浏览器时,都会被 ping 到另一台服务器。

您是否有一个正在测试的实时应用程序(带有自己的 cookie),或者它只是一个测试页面?

答案3

尝试insert从中删除语句cookie

遵循[ insert]的文档:

如果客户端拥有下次连接同一服务器所需的所有信息,则不会插入进一步的 cookie。

因此,所有请求都有可能得到WEB1通过此 cookie 进行分配,然后在每次请求时按照此指示进行操作。

PS:并且必须cookie在服务器中为参数设置相同的名称statement

server WEB1 10.90.2.131:81 cookie WEB_LB check
server WEB2 10.90.2.130:80 cookie WEB_LB check

答案4

您是否尝试过删除与基于 cookie 的持久性相关的所有选项?会发生什么情况?

尝试将WEB_1改为WEB1:

server WEB1 10.90.2.131:81 cookie WEB1 check
server WEB2 10.90.2.130:80 cookie WEB2 check

相关内容