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

设置高可用性负载平衡器(具有故障转移和会话支持)使用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
  • 我们还需要一个浮动在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  |
     +-----+      +-----+      +---------+ +---------+
     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

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

为了演示Pound的会话感知,我假设安装在http1http2上的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 ,但有人必须告诉lb1lb2他们应该监听该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链接

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

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

支付宝扫一扫打赏

微信扫一扫打赏