您的位置:首页 > 其它

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

2012-12-28 17:44 176 查看
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,但是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上对其进行测试
测试网页:





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





可以看到通过访问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
生成证书





现在来为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 ]
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连接





使用https连接





测试成功
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息