设置高可用性负载平衡器(具有故障转移和会话支持)使用HAProxy / Keepalived在Debian Etch

设置高可用性负载平衡器(具有故障切换和会话支持)使用HAProxy / Keepalived在Debian Etch

版本1.0
作者:Falko Timme

本文介绍如何使用HAProxy在主动/被动配置中设置双节点负载平衡器,并保留在Debian Etch中。 负载均衡器位于用户和两个(或多个)后端Apache Web服务器之间,该服务器拥有相同的内容。 负载平衡器不仅将请求分发到两个后端Apache服务器,还检查后端服务器的运行状况。 如果其中一个关闭,所有请求将自动重定向到其余的后端服务器。 除此之外,两个负载平衡器节点使用keepalived进行监控,如果主站故障,从站将成为主站,这意味着用户不会注意到任何服务中断。 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
  • 我们还需要一个浮动在lb1lb2之间的虚拟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)
     keepalived   keepalived

共享(虚拟)IP地址没有问题,只要您在自己的LAN中,您可以根据需要分配IP地址。 但是,如果要将此设置与公共IP地址配合使用,则需要找到一个主机,您可以在同一子网中租用两台服务器(负载均衡器节点); 然后,您可以在此子网中使用可用的IP地址作为虚拟IP地址。 在德国, Hetzner是一个主持人 ,可以让你这样做 - 只要和他们谈谈。 更新:Hetzner的政策已经改变 - 请阅读这里了解更多详情: http : //www.youcl.com/forums/showthread.php?t=19988

http1http2是标准的Debian Etch Apache安装文件,根文件root / var / www (此默认vhost的配置存储在/ etc / apache2 / sites-available / default中 )。 如果您的文档根不同,您可能需要调整本指南。

为了演示HAProxy的会话感知,我假设安装在http1http2上的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

不幸的是,HAProxy可用作Debian Lenny(测试)和Sid(unstable)的Debian软件包,但不适用于Etch。 因此,我们将从Lenny安装HAProxy软件包。 为此,打开/etc/apt/sources.list并添加行deb http://ftp2.de.debian.org/debian/ lenny main ; 您的/etc/apt/sources.list可能看起来像这样:

lb1 / lb2:

vi /etc/apt/sources.list
deb http://ftp2.de.debian.org/debian/ etch main
deb-src http://ftp2.de.debian.org/debian/ etch main

deb http://ftp2.de.debian.org/debian/ lenny main

deb http://security.debian.org/ etch/updates main contrib
deb-src http://security.debian.org/ etch/updates main contrib

当然(为了不弄乱我们的系统),如果Etch没有适当的软件包,我们希望从Lenny安装软件包 - 如果有Etch和Lenny的软件包,我们要安装Etch软件包。 为了做到这一点,我们在Etch中给/ etc / apt / preferences中优先级较高的软件包:

vi /etc/apt/preferences
Package: *
Pin: release a=etch
Pin-Priority: 700

Package: *
Pin: release a=lenny
Pin-Priority: 650

(术语etchlenny参考/etc/apt/sources.list中的适当术语;如果您在那里使用稳定测试 ,则必须在/ etc / apt / preferences中使用稳定测试,而不是使用etchlenny好。)

之后,我们更新我们的包数据库:

apt-get update

...升级已安装的软件包:

apt-get upgrade

...并安装HAProxy:

apt-get install haproxy
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏