我正在设置一台运行 Apache 的 Centos 机器,用于在两个应用程序 Web 服务器之间进行负载平衡。通常我会使用 F5(或其他硬件 LB)来完成所有这些工作,但客户不想再花钱了,所以我将它与 VM 放在一起。我已经让它在两台机器之间进行常规循环,但我只需要第二台服务器进行故障转移。请参阅下面的虚拟主机:
<VirtualHost *:80>
Options +FollowSymLinks
Include conf/virtualhosts.conf
RewriteEngine on
RewriteLogLevel 9
RewriteLog /var/log/httpd/rewrite_log
RewriteRule ^/?h/(\.[0-9]+)/(string/.*)$ balancer://mycluster/$2?h=$1 [P,QSA]
Header add Set-Cookie "h=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_WORKER_ROUTE
<Proxy balancer://mycluster/>
Order deny,allow
Allow from all
BalancerMember http://server1:8080 route=0
BalancerMember http://server2:8080 route=1 status=+H
</Proxy>
ProxyPreserveHost on
ProxyPass / balancer://mycluster/ stickysession=h nofailover=On
ProxyPassReverse / balancer://mycluster/
ProxyPass /balancer-manager !
<Location /balancer-manager>
SetHandler balancer-manager
Order Deny,Allow
Allow from all
</Location>
</VirtualHost>
我现在遇到两个问题:
我已经设置了 status=+H 选项,但是当我关闭 server1 上的 Web 服务时,它仍然试图将我发送到该服务器。这是因为我的机器上的 cookie 仍然希望我转到该服务器吗?我需要为 http 返回值设置健康检查吗?我现在有点迷茫了。如果我关闭整个服务器,它应该可以工作,但之后我必须下楼到服务器机房重新启动它 :)。
我无法让 balancer_manager 工作。当我访问时,
http://virtualip/balancer-manager
它会将我发送到其中一个 Web 服务器,然后 server1 上的 Web 服务器会告诉我该链接不存在。
对任何一个问题的任何帮助都将非常有帮助!