LVS持久链接 ppc+pcc+防火墙标记

LVS持久链接 ppc+pcc+防火墙标记

如果一个大型的网站使用了LVS进行负载均衡,我们看到的网站是由几个内部的相同网站群集而来的,由于http是一种无状态的协议,每次请求完毕后就会自动断开,而如果内部群集的网站,是使用轮询等方法时,如果一个用户在第一个server中购买了一个商品之后,在下次请求时可能会轮询到server2,这时候,我们在第一个server中购买的商品就会消失,这显然不是我们想要的,也可能是在购买端口之后,在付费的时候出现问题,我们都是使用80端口访问网站而使用443端口进行付费的,而80端口与443端口的转换,也不能通过普通的连接来设置,这里我们就需要使用LVS持久链接来达到我们想要的结果。

LVS持久链接有三种类型:

pcc (persistent client connections) :持久的客户端连接

ppc (persistent port connections)  :持久的端口连接

persistent netfilter marked packet persistence :防火墙标记的连接

我们举三个例子对这三种连接都做一下说明。

现在的三个示例都是以DR模型为基础

示例1    基于客户的持久链接 pcc

要求:uer1访问server1

user2访问server2

Director配置

[root@localhost ~]# ipvsadm –C

[root@localhost ~]# ipvsadm -A -t 192.168.2.11:0 -s rr -p

[root@localhost ~]# ipvsadm -a -t 192.168.2.11:0 -r 192.168.2.20 -g

[root@localhost ~]# ipvsadm -a -t 192.168.2.11:0 -r 192.168.2.30 –g

在DR的基础上我们只需要修改这一处那可,下面就可以测试

在user1上测试

LVS持久链接 ppc+pcc+防火墙标记

你可以对其进行刷新,但是总是出现server2的网页

我们可以在director上查看一下匹配效果

[root@localhost ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.2.11:0 rr persistent 360

-> 192.168.2.30:0               Route   1      0          7

-> 192.168.2.20:0               Route   1      0          0

[root@localhost ~]#

从上面的匹配可以看出,网页总是访问的192.168.2.30的网页,也就是server2,没有对server1进行访问,上面的360指的是持久连接的时间是360秒。

我们再在user2上访问一下

LVS持久链接 ppc+pcc+防火墙标记

刷新也是一样的server1的内容

看一下director中的匹配情况

[root@localhost ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.2.11:0 rr persistent 360

-> 192.168.2.30:0               Route   1      0          7

-> 192.168.2.20:0               Route   1      0          6

Server1访问的没有改变,仍为7,但是server2由0增加到了6,也就是只有usre2的访问量,这样就做到了在一定的时间内,每个用户只与一台server相连接。

示例2 基于端口的持久连接 ppc

如果群集的内部分别有http服务和ssh服务,我们想要使用VIP地址来访问http服务器时,系统可以定位到http服务器,访问ssh时,系统定位到ssh服务器,那么我们就要使用基于端口的持久连接。如下例

要求:让client访问网页时转到server1的主页,使用ssh时转到server2上的ssh服务上。

在director上进行配置

[root@localhost ~]# ipvsadm –C

[root@localhost ~]# ipvsadm -A -t 192.168.2.11:80 -s rr -p

[root@localhost ~]# ipvsadm -A -t 192.168.2.11:22 -s rr -p

[root@localhost ~]# ipvsadm -a -t 192.168.2.11:80 -r 192.168.2.20 -m

[root@localhost ~]# ipvsadm -a -t 192.168.2.11:22 -r 192.168.2.30 –m

在client上对其进行测试

测试网页:

LVS持久链接 ppc+pcc+防火墙标记

结果可以看到是server1中的网页

测试ssh

LVS持久链接 ppc+pcc+防火墙标记

可以看到通过访问192.168.2.11进入了系统192.168.2.30

示例3 基于防火墙标记持久连接

在平常的购物时我们都是直接使用http来进行连接的,也就是使用80端口,为了安全性,在付费的时候都会使用https也就是443端口,来进行安全付费,而如果你在server1上进行了物品的购买,而在付费的时候,要建立新的连接,那么服务器在可能被连接到server2的https服务上,这显然是不行的,我们要在和赃物一个相同数据库中进行付费的操作,才能找到自己所购得的商品,而显然我们要让连接再次进行时,一定要连接到购物的那个server1,这就需要基于防火墙标记来实现了,它可以依据标记将赃物和付费的两位连接都连接到同一个服务器中,这就达到了我们的要求。

要求:在相同的服务器上进行购物与付费

我们要先给server1与server2设置https连接

Server1与server2各做如下配置

注:两个服务器都要做https

[root@localhost ~]# cd /etc/pki

[root@localhost pki]# vim tls/openssl.cnf

修改如下部分

保存退出

创建需要的文件

[root@localhost pki]# cd CA/

[root@localhost CA]# mkdir certs crl newcerts

[root@localhost CA]# touch index.txt serial

[root@localhost CA]# echo "01" > serial

为CA认证中心创建密钥

[root@localhost CA]# openssl genrsa 1024 > private/cakey.pem

生成证书

LVS持久链接 ppc+pcc+防火墙标记

现在来为http服务应用ssl加密

[root@localhost ~]# mkdir /etc/httpd/certs

[root@localhost ~]# cd /etc/httpd/certs

为http创建私钥

[root@localhost certs]# openssl genrsa 1024 > httpd.key

生成请求文件

LVS持久链接 ppc+pcc+防火墙标记

请求证书

[root@localhost certs]# openssl ca -in httpd.csr -out httpd.pem

安装mod_ssl

[root@localhost certs]# cd /mnt/cdrom/Server/

[root@localhost Server]# rpm -ivh distcache-1.4.5-14.1.i386.rpm

[root@localhost Server]# rpm -ivh mod_ssl-2.2.3-31.el5.i386.rpm

[root@localhost pki]# cd /etc/httpd/conf.d/

[root@localhost conf.d]# vim ssl.conf    修改如下

SSLCertificateFile /etc/httpd/certs/httpd.pem

SSLCertificateKeyFile /etc/httpd/certs/httpd.key

SSLCACertificateFile /etc/pki/CA/cacert.pem

重启服务器

[root@localhost conf.d]# service httpd restart

Stopping httpd:                                            [  OK  ]

Starting httpd:                                            [  OK  ]

Server1与server2都做了如下配置之后,开始在director上开始做基于防火墙标记持久连接

[root@localhost ~]# ipvsadm –C

[root@localhost ~]# iptables -F -t mangle

[root@localhost ~]# iptables -t mangle -A PREROUTING -d 192.168.2.11 -p tcp --dport 80 -j MARK --set-mark 10

[root@localhost ~]# iptables -t mangle -A PREROUTING -d 192.168.2.11 -p tcp --dport 443 -j MARK --set-mark 10

[root@localhost ~]# ipvsadm -A -f 10 -s rr -p 1800

[root@localhost ~]# ipvsadm -a -f 10 -r 192.168.2.20 -g

[root@localhost ~]# ipvsadm -a -f 10 -r 192.168.2.30 –g

测试:

使用http连接

LVS持久链接 ppc+pcc+防火墙标记

使用https连接

LVS持久链接 ppc+pcc+防火墙标记

测试成功

本文转自 guodong810 51CTO博客,原文链接:http://blog.51cto.com/guodong810/1103312,如需转载请自行联系原作者

上一篇:ISA2006实战系列之三:防火墙策略部署深度分析(附图)
下一篇:华为防火墙安全策略配置