对于LVS的持久连接来说常见的分为三种PCC,PPC和基于防火墙标记的持久连接
1.PCC用来实现把某个用户的所有访问在超时时间内定向到同一台REALSERVER
2.PPC用来把某个用户对同一服务的访问在超时时间内定向到同一台sREALSERVER
3.基于防火墙标记的持久连接
拓扑图如下:
一.PCC用来实现把某个用户的所有访问在超时时间内定向到同一台REALSERVER
步骤如下:
1.对real server1和real server2 ip正确配置并
安装httpd服务,测试网页分别为test1 和 test2
2.使用命令sysctl -a |grep arp 查看arp_announce和arp_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.配置realserver1的loopback0:0的ip地址,子网掩码为4个 255
设置lo的ip
4.添加eth --》lo:0
5.在server1上添加路由,当director收到请求时就会转到lo:0 即ip为 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端口来浏览的,当付款的时候则是通过443的ssl加密的方式,当然当用户挑选完商品付款的时候我们当然不希望https的443跳转到另外一台REALSERVER,很显然应该是同一REALSERVER才对,这时候就要用到基于防火墙标记的持久连接,通过定义端口的姻亲关系来实现
注意:清除以前的规则
1.首先两个REALSERVER要配置SSL,证书应该也是一样的
2.定义端口的姻亲关系,给80和443端口打上同样的防火墙标记
3.配置实现基于防火墙标记的LVS
4.Server上设置ssl( http和https在同一个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主机连接就会到另一台服务器。