LVS持久连接 ppc+pcc+防火墙标记html
若是一个大型的网站使用了LVS进行负载均衡,咱们看到的网站是由几个内部的相同网站群集而来的,因为http是一种无状态的协议,每次请求完毕后就会自动断开,而若是内部群集的网站,是使用轮询等方法时,若是一个用户在第一个server中购买了一个商品以后,在下次请求时可能会轮询到server2,这时候,咱们在第一个server中购买的商品就会消失,这显然不是咱们想要的,也多是在购买端口以后,在付费的时候出现问题,咱们都是使用80端口访问网站而使用443端口进行付费的,而80端口与443端口的转换,也不能经过普通的链接来设置,这里咱们就须要使用LVS持久连接来达到咱们想要的结果。数据库
LVS持久连接有三种类型:vim
pcc (persistent client connections) :持久的客户端链接安全
ppc (persistent port connections) :持久的端口链接服务器
persistent netfilter marked packet persistence :防火墙标记的链接负载均衡
咱们举三个例子对这三种链接都作一下说明。ssh
如今的三个示例都是以DR模型为基础tcp
示例1 基于客户的持久连接 pccide
要求: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
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
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-
[root@localhost Server]# rpm -ivh mod_ssl-
[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链接
测试成功