设置高可用性负载平衡器(具有故障转移和会话支持)使用Pound / Keepalived在Debian Etch上
版本1.0
作者:Falko Timme
本文介绍如何在主动/被动配置中使用Pound设置双节点负载平衡器,并保留在Debian Etch中。 负载均衡器位于用户和两个(或多个)后端Apache Web服务器之间,该服务器拥有相同的内容。 负载平衡器不仅将请求分发到两个后端Apache服务器,还检查后端服务器的运行状况。 如果其中一个关闭,所有请求将自动重定向到其余的后端服务器。 除此之外,两个负载平衡器节点使用keepalived进行监控,如果主站故障,从站将成为主站,这意味着用户不会注意到任何服务中断。 磅是会话感知的,这意味着您可以将其与使用会话(如论坛,购物车等)的任何Web应用程序一起使用。
从庞特网站: “庞德程序是Web服务器的反向代理,负载平衡器和HTTPS前端.Pound被开发用于在多个Web服务器之间分配负载,并允许方便的SSL包装对于那些不提供本机的网络服务器,英镑根据GPL分发 - 不保证,可以免费使用,复制和放弃。
我不会保证这将为您工作!
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 |
+-----+ +-----+ +---------+ +---------+
pound pound 2 web servers (Apache)
keepalived keepalived
共享(虚拟)IP地址没有问题,只要您在自己的LAN中,您可以根据需要分配IP地址。 但是,如果要将此设置与公共IP地址配合使用,则需要找到一个主机,您可以在同一子网中租用两台服务器(负载均衡器节点); 然后,您可以在此子网中使用可用的IP地址作为虚拟IP地址。 在德国, Hetzner是一个主持人 ,可以让你这样做 - 只要和他们谈谈。 更新:Hetzner的政策已经改变 - 请阅读这里了解更多详情: http : //www.youcl.com/forums/showthread.php?t=19988
http1
和http2
是标准的Debian Etch Apache安装文件,根文件root / var / www
(此默认vhost的配置存储在/ etc / apache2 / sites-available / default中
)。 如果您的文档根不同,您可能需要调整本指南。
为了演示Pound的会话感知,我假设安装在http1
和http2
上的Web应用程序
使用会话标识JSESSIONID
。
2准备后端Web服务器
Pound作为一个透明代理,即它会将一个称为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 [...] |
之后我们重新启动Apache:
/etc/init.d/apache2 restart
我们已经完成了后台服务器; 其余的配置发生在两个负载平衡器节点上。
3安装磅
我们可以在这两个负载均衡器上安装Pound:
lb1 / lb2:
apt-get install pound
4配置负载平衡器
磅配置存储在/etc/pound/pound.cfg中
,非常简单。
我们备份原来的/etc/pound/pound.cfg
并创建一个新的:
lb1 / lb2:
cp /etc/pound/pound.cfg /etc/pound/pound.cfg_orig
cat /dev/null > /etc/pound/pound.cfg
vi /etc/pound/pound.cfg
## Minimal sample pound.cfg ## ## see pound(8) for details ###################################################################### ## global options: User "www-data" Group "www-data" #RootJail "/chroot/pound" ## Logging: (goes to syslog by default) ## 0 no logging ## 1 normal ## 2 extended ## 3 Apache-style (common log format) LogLevel 1 ## check backend every X secs: Alive 2 ## use hardware-accelleration card supported by openssl(1): #SSLEngine "<hw>" ###################################################################### ## listen, redirect and ... to: ## redirect all requests on port 80 ("ListenHTTP") to the virtual IP address: ListenHTTP Address 192.168.0.99 Port 80 End Service BackEnd Address http1.example.com Port 80 End BackEnd Address http2.example.com Port 80 End Session Type Cookie ID "JSESSIONID" TTL 300 END End |
之后,我们将启动
设置为1
/ etc / default / pound
:
vi /etc/default/pound
# Defaults for pound initscript # sourced by /etc/init.d/pound # installed at /etc/default/pound by the maintainer scripts # prevent startup with default configuration # set the below varible to 1 in order to allow pound to start startup=1 |
5设置keepalived
我们刚刚配置了Pound来监听虚拟IP地址192.168.0.99
,但有人必须告诉lb1
和lb2
他们应该监听该IP地址。 这是通过keepalived完成的,我们这样安装:
lb1 / lb2:
apt-get install keepalived
要允许Pound绑定到共享IP地址,我们将以下行添加到/etc/sysctl.conf中
:
vi /etc/sysctl.conf
[...] net.ipv4.ip_nonlocal_bind=1 |
...并运行:
sysctl -p
接下来我们必须配置keepalived(这是通过配置文件/etc/keepalived/keepalived.conf完成的
)。 我想要lb1
是主动(或主)负载平衡器,所以我们在lb1上使用这个配置
:
lb1:
vi /etc/keepalived/keepalived.conf
vrrp_script chk_pound { # Requires keepalived-1.1.13 script "killall -0 pound" # cheaper than pidof interval 2 # check every 2 seconds weight 2 # add 2 points of prio if OK } vrrp_instance VI_1 { interface eth0 state MASTER virtual_router_id 51 priority 101 # 101 on master, 100 on backup virtual_ipaddress { 192.168.0.99 } track_script { chk_pound } } |
(重要的是您在上述文件中使用优先级101,这使得lb1成为主人!)
然后我们开始保持在lb1上
:
lb1:
/etc/init.d/keepalived start
然后运行:
lb1:
ip addr sh eth0
...你应该会发现lb1
现在也在共享IP地址上:
lb1:/etc/keepalived# ip addr sh eth0
2: eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:a5:5b:93 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.100/24 brd 192.168.0.255 scope global eth0
inet 192.168.0.99/32 scope global eth0
inet6 fe80::20c:29ff:fea5:5b93/64 scope link
valid_lft forever preferred_lft forever
lb1:/etc/keepalived#
现在我们在lb2
上几乎相同。 有一个很小但重要的差别 - 我们在/etc/keepalived/keepalived.conf
中使用优先级100
而不是优先级101
,这使得lb2
是被动(从属或热备用)负载平衡器:
lb2:
vi /etc/keepalived/keepalived.conf
vrrp_script chk_pound { # Requires keepalived-1.1.13 script "killall -0 pound" # cheaper than pidof interval 2 # check every 2 seconds weight 2 # add 2 points of prio if OK } vrrp_instance VI_1 { interface eth0 state MASTER virtual_router_id 51 priority 100 # 101 on master, 100 on backup virtual_ipaddress { 192.168.0.99 } track_script { chk_pound } } |
然后我们开始保持联络:
lb2:
/etc/init.d/keepalived start
由于lb2
是被动负载平衡器,只要lb1
为up,它不应该在虚拟IP地址上监听
。 我们可以检查:
lb2:
ip addr sh eth0
输出应如下所示:
lb2:~# ip addr sh eth0
2: eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:e0:78:92 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.101/24 brd 192.168.0.255 scope global eth0
inet6 fe80::20c:29ff:fee0:7892/64 scope link
valid_lft forever preferred_lft forever
lb2:~#
6起始磅
现在我们可以开始庞德:
lb1 / lb2:
/etc/init.d/pound start
7测试
我们的高可用性负载平衡器现在正在运行。
您现在可以向虚拟IP地址192.168.0.99
(或指向虚拟IP地址的任何域/主机名)发出HTTP请求,您应该从后端Web服务器获取内容。
您可以通过关闭一个后端Web服务器来测试其高可用性/故障转移功能 - 然后负载平衡器将所有请求重定向到其余的后端Web服务器。 之后,关闭主动负载平衡器( lb1
) - lb2
应立即接管。 您可以通过运行以下方式来检查:
lb2:
ip addr sh eth0
您现在应该在lb2
的输出中看到虚拟IP地址:
lb2:~# ip addr sh eth0
2: eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:e0:78:92 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.101/24 brd 192.168.0.255 scope global eth0
inet 192.168.0.99/32 scope global eth0
inet6 fe80::20c:29ff:fee0:7892/64 scope link
valid_lft forever preferred_lft forever
lb2:~#
当lb1
再次出现时,它将再次接管主角色。
8链接
- 磅: http : //www.apsis.ch/pound
- Keepalived: http : //www.keepalived.org
- Debian: http : //www.debian.org