对于LVS的持久连接来说常见的分为三种PCC,PPC和基于防火墙标记的持久连接

1.PCC用来实现把某个用户的所有访问在超时时间内定向到同一台REALSERVER

2.PPC用来把某个用户对同一服务的访问在超时时间内定向到同一台sREALSERVER

3.基于防火墙标记的持久连接

拓扑图如下

 

一.PCC用来实现把某个用户的所有访问在超时时间内定向到同一台REALSERVER

步骤如下:

1.real server1real server2 ip正确配置并

安装httpd服务,测试网页分别为test1 和 test2

2.使用命令sysctl -a |grep arp 查看arp_announcearp_ignore的值

[root@localhost ~]# sysctl -a |grep arp 

net.ipv4.conf.eth0.arp_ignore = 0

net.ipv4.conf.eth0.arp_announce = 0

arp_announce的值改为2,将arp_ignore的值改为1/etc/sysctl.conf

[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_announce = 2" >> /etc/sysctl.conf

[root@localhost ~]# echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf

[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_ignore = 1" >> /etc/sysctl.conf

[root@localhost ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf

[root@localhost ~]# sysctl -p      #使服务生效

5.net.ipv4.conf.eth0.arp_announce = 2

6.net.ipv4.conf.all.arp_announce = 2

7.net.ipv4.conf.eth0.arp_ignore = 1

8.net.ipv4.conf.all.arp_ignore = 1

3.配置realserver1loopback0:0ip地址,子网掩码为4个 255

设置loip

 

4.添加eth --lo0

 

5.server1上添加路由,当director收到请求时就会转到loip为 10.101的网卡上

[root@localhost ~]# route add  -host 192.168.10.101 dev lo:0

同理server2上是同样的配置。

6.Director的配置

director上安装ipvsadm服务

[root@localhost ~]# mount /dev/cdrom /mnt/cdrom

[root@localhost ~]# cd /mnt/cdrom/Cluster

[root@localhost Cluster]# rpm -ivh ipvsadm-1.24-10.i386.rpm 

7.声明服务,添加服务器

[root@localhost ~]# ipvsadm -A -t 192.168.10.101:0 -s rr -p 300  (单位是秒)

#默认时间是6分钟,这里设置为5分钟。0代表任何协议

[root@localhost ~]# ipvsadm -a -t 192.168.10.101:0 -r 192.168.10.200 -g

[root@localhost ~]# ipvsadm -a -t 192.168.10.101:0 -r 192.168.10.201 -g

[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.10.101:0 rr persistent 300

  -> 192.168.10.201:0             Route   1      0          0         

  -> 192.168.10.200:0             Route   1      0          0  

8.保存配置,启动ipvsadm服务

[root@localhost Cluster]# service ipvsadm save

Saving IPVS table to /etc/sysconfig/ipvsadm:               [确定]

[root@localhost Cluster]# service ipvsadm start

9.在外网访问如下:刷新网页,只有出现server2能够访问到。

 

 

此时测试一下会发现通过HTTP访问VIP和通过SSH登录VIP的时候都被定向到了同一台REALSERVER上面了

Directory上查看如下:

[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.10.101:0 rr persistent 300

  -> 192.168.10.201:0            Route   1      0          7         

  -> 192.168.10.200:0            Masq    1      0          0    

可以发现只有数据与server2进行匹配。

二.PPC用来把某个用户对同一服务的访问在超时时间内定向到同一台REALSERVER

director上设置如下

1.先把以前的规则清除   定义类型

[root@localhost ~]# ipvsadm -C

[root@localhost ~]# ipvsadm -A -t 192.168.10.101:80 -s wrr -p 300

[root@localhost ~]# ipvsadm -a -t 192.168.10.101:80 -r 192.168.10.201 -w 8 -g

[root@localhost ~]# ipvsadm -a -t 192.168.10.101:80 -r 192.168.10.200 -w 10 -g

2.等待5分钟,因为上次设置的影响,测试并刷新如下:

 

3.Director上查看如下:

[root@localhost ~]# ipvsadm 

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.10.101:http wrr persistent 300

  -> 192.168.10.200:http          Route   10     0          11        

  -> 192.168.10.201:http          Route   8      0          0    

只有server1上有匹配。

三..基于防火墙标记的持久连接

 对于电子商务网站来说,用户在挑选商品的时候使用的是80端口来浏览的,当付款的时候则是通过443ssl加密的方式,当然当用户挑选完商品付款的时候我们当然不希望https443跳转到另外一台REALSERVER,很显然应该是同一REALSERVER才对,这时候就要用到基于防火墙标记的持久连接,通过定义端口的姻亲关系来实现

注意:清除以前的规则

1.首先两个REALSERVER要配置SSL,证书应该也是一样的

2.定义端口的姻亲关系,给80443端口打上同样的防火墙标记

3.配置实现基于防火墙标记的LVS

4.Server上设置ssl( httphttps在同一个server

yum install mod_ssl 两个服务器上面都安装 (先要进行配置yum本地源)

[root@localhost ~]# yum install mod_ssl -y

[root@localhost tls]# pwd

/etc/pki/tls

5.[root@localhost tls]# vim openssl.cnf  :88 ,90 s/match/optional 末行模式下进行输入替换令。 45 dir             = /etc/pki/CA     

88 countryName             = optional

89 stateOrProvinceName     = optional

90 organizationName        = optional

134 [ req_distinguished_name ]

135 countryName                     = Country Name (2 letter code)

136 countryName_default             = CN

140 stateOrProvinceName             = State or Province Name (full name)

141 stateOrProvinceName_default     = HN

143 localityName                    = Locality Name (eg, city)

144 localityName_default            = ZZ

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

[root@localhost CA]# mkdir crl certs newcerts

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

6.产生自己的私钥

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

[root@localhost CA]# chmod 600 private/*

7.创建自己的证书文件

[root@localhost CA]# openssl req -new -key private/cakey.pem -x509 -out cacert.pem

[root@localhost CA]# ll

总计 32

-rw-r--r-- 1 root root  973 12-29 02:29 cacert.pem

8.安装mod_ssl

[root@localhost CA]# yum install mod_ssl -y

3.产生web的私钥,并放在/etc/httpd/certs/目录里

[root@localhost CA]# mkdir -pv /etc/httpd/certs

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

9.创建请求文件

[root@localhost certs]# openssl req -new -key httpd.key -out httpd.csr

10.CA中心发布该证书

[root@localhost certs]# openssl req -new -key httpd.key -out httpd.csr

11.编辑ssl.conf文件使证书和web关联

[root@localhost conf.d]# pwd

/etc/httpd/conf.d

[root@localhost conf.d]# vim ssl.conf 

119 SSLCertificateKeyFile /etc/httpd/certs/httpd.key

129 SSLCertificateChainFile /etc/pki/CA/cacert.pem

12.重启服务:

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

对于server2也是如此设置的。不过可以通过scp 拷贝过来

[root@localhost certs]# scp 192.168.10.201:/etc/pki/tls/openssl.cnf /etc/pki/tls

[root@localhost certs]# scp 192.168.10.201:/etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d

14.Directory配置如下

iptables规则中mangle表格的配置

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

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

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

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

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

在浏览器中访问:

 

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

FWM  10 rr persistent 300

  -> 192.168.10.201:0             Route   1      0          3         

  -> 192.168.10.200:0             Route   1      0          0     

[root@localhost ~]# watch -n 1 "ipvsadm" #每隔1秒钟刷新一次

过了五分钟就会定向到server1

[root@localhost ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

FWM  10 rr persistent 300

  -> 192.168.10.201:0             Route   1      0          0         

  -> 192.168.10.200:0             Route   1      0          9    

实现的效果是,在300s的时间内,连接都是一台server,要是再有另一台ip主机连接就会到另一台服务器。