设置高可用性负载平衡器(具有故障切换和会话支持)使用HAProxy / Heartbeat在Debian Lenny
本文介绍如何在Debian Lenny上使用HAProxy和心跳设置主动/被动配置中的双节点负载均衡器。 负载均衡器位于用户和两个(或多个)后端Apache Web服务器之间,该服务器拥有相同的内容。 负载平衡器不仅将请求分发到两个后端Apache服务器,还检查后端服务器的运行状况。 如果其中一个关闭,所有请求将自动重定向到其余的后端服务器。 除此之外,两个负载平衡器节点使用心跳监视彼此,并且如果主器件失败,则从器件成为主器件,这意味着用户不会注意到任何服务中断。 HAProxy是会话感知的,这意味着您可以使用任何使用会话(如论坛,购物车等)的Web应用程序。
从HAProxy网站: “HAProxy是一个免费的,非常快速和可靠的解决方案,为基于TCP和HTTP的应用程序提供高可用性,负载平衡和代理,特别适用于在非常高的负载下爬行的网站,同时需要持久性或第7层处理,支持数以万计的连接对于今天的硬件来说显然是现实的,其操作模式使其与现有架构的集成非常容易和无风险,同时仍然提供不将脆弱的Web服务器暴露给网络的可能性。
我不会保证这将为您工作!
1初步说明
在本教程中,我将使用以下主机:
- 负载均衡器1:
lb1.example.com
,IP地址:192.168.0.100
- 负载平衡器2:
lb2.example.com
,IP地址:192.168.0.101
- Web服务器1:
http1.example.com
,IP地址:192.168.0.102
- Web Server 2:
http2.example.com
,IP地址:192.168.0.103
- 我们还需要一个浮动在
lb1
和lb2
之间的虚拟IP地址:192.168.0.99
这是一个小图,显示我们的设置:
shared IP=192.168.0.99
192.168.0.100 192.168.0.101 192.168.0.102 192.168.0.103
-------+------------+--------------+-----------+----------
| | | |
+--+--+ +--+--+ +----+----+ +----+----+
| lb1 | | lb2 | | http1 | | http2 |
+-----+ +-----+ +---------+ +---------+
haproxy haproxy 2 web servers (Apache)
heartbeat heartbeat
共享(虚拟)IP地址没有问题,只要您在自己的LAN中,您可以根据需要分配IP地址。 但是,如果要将此设置与公共IP地址配合使用,则需要找到一个主机,您可以在同一子网中租用两台服务器(负载均衡器节点); 然后,您可以在此子网中使用可用的IP地址作为虚拟IP地址。
http1
和http2
是标准的Debian Lenny Apache设置文件root / var / www
(此默认vhost的配置存储在/ etc / apache2 / sites-available / default中
)。 如果您的文档根不同,您可能需要调整本指南。
为了演示HAProxy的会话感知,我假设安装在http1
和http2
上的Web应用程序
使用会话标识JSESSIONID
。
2准备后端Web服务器
我们将配置HAProxy作为一个透明的代理,即它会将一个称为X-Forwarded-For
的字段中的原始用户的IP地址传递给后端Web服务器。 当然,后端Web服务器应该将原始用户的IP地址记录在其访问日志中,而不是我们的负载平衡器的IP地址。 因此,我们必须修改/etc/apache2/apache2.conf
中的LogFormat
行,并用%{X-Forwarded-For} i
替换%h
:
http1 / http2:
vi /etc/apache2/apache2.conf
[...] #LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined [...] |
另外,我们将配置HAProxy通过持续请求文件check.txt
来检查后端服务器的运行状况(如果/ var / www
是您的文档根,转换为/var/www/check.txt
)。 当然,这些请求会使访问日志完全膨胀,并弄乱您的页面视图统计信息(如果您使用Webalizer或AWstats等工具来生成基于访问日志的统计信息)。
因此,我们打开我们的vhost配置(在本例中,它在/ etc / apache2 / sites-available / default中
),并将这两行放入其中(注释掉您的vhost配置中的所有其他CustomLog
指令):
vi /etc/apache2/sites-available/default
[...] SetEnvIf Request_URI "^/check\.txt$" dontlog CustomLog /var/log/apache2/access.log combined env=!dontlog [...] |
此配置阻止对check.txt的
请求记录在Apache的访问日志中。
之后我们重新启动Apache:
/etc/init.d/apache2 restart
...并创建文件check.txt
(这可以是一个空文件):
touch /var/www/check.txt
我们已经完成了后台服务器; 其余的配置发生在两个负载平衡器节点上。
3安装HAProxy
lb1 / lb2:
我们可以安装HAProxy,如下所示:
aptitude install haproxy
4配置负载平衡器
HAProxy配置存储在/etc/haproxy/haproxy.cfg中
,非常简单。 我不会在这里解释所有的指示; 要了解有关所有选项的更多信息,请参阅http://haproxy.1wt.eu/download/1.3/doc/haproxy-en.txt和http://haproxy.1wt.eu/download/1.2/doc/architecture.txt 。
我们备份原始的/etc/haproxy/haproxy.cfg
并创建一个新的:
lb1 / lb2:
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg_orig
cat /dev/null > /etc/haproxy/haproxy.cfg
vi /etc/haproxy/haproxy.cfg
global log 127.0.0.1 local0 log 127.0.0.1 local1 notice #log loghost local0 info maxconn 4096 #debug #quiet user haproxy group haproxy defaults log global mode http option httplog option dontlognull retries 3 redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000 listen webfarm 192.168.0.99:80 mode http stats enable stats auth someuser:somepassword balance roundrobin cookie JSESSIONID prefix option httpclose option forwardfor option httpchk HEAD /check.txt HTTP/1.0 server webA 192.168.0.102:80 cookie A check server webB 192.168.0.103:80 cookie B check |
之后,我们在/ etc / default / haproxy
中将ENABLED
设置为1
:
vi /etc/default/haproxy
# Set ENABLED to 1 if you want the init script to start haproxy. ENABLED=1 # Add extra flags here. #EXTRAOPTS="-de -m 16" |