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上测试

你可以对其进行刷新,但是总是出现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上访问一下

刷新也是一样的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,但是server20增加到了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上对其进行测试

         测试网页:

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

测试ssh

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

 

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

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

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

      我们要先给server1server2设置https连接

         Server1server2各做如下配置

注:两个服务器都要做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

生成证书

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

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

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

http创建私钥

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

  生成请求文件

请求证书

[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  ]

Server1server2都做了如下配置之后,开始在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连接

  使用https连接

 

 

测试成功

你可能感兴趣的:(pcc,ppc,防火墙标记,LVS持久链接)