我终于以我想要的方式设置并运行了 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