使用VS/TUN方法:
VS/TUN的连接调度和管理与VS/NAT中的一样,只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态地选择一台服务器,将请求报文封装在另一个IP报文中,再将封装后的IP报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为VIP的报文,服务器发现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。
使用VS/DR方法:
调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连,如通过交换机或者高速的HUB相连。VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP的网络请求。在VS/DR中,调度器根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改为选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。因为数据帧的MAC地址是选出的服务器,所以服务器肯定可以收到这个数据帧,从中可以获得该IP报文。当服务器发现报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应报文直接返回给客户。
LVS-DR模型:
Director两个地址:VIP, DIP
RS有两个地址:VIP, RIP(RIP可是用来和DIP通信的,由Directory挑选出RealServer时将报文所对的目标MAC改 为RIP所对应的MAC地址)
禁止RS响应对VIP的ARP广播请求:
1、在前端路由上实现静态MAC地址VIP的绑定;
前提:得有路由器的配置权限;
缺点:Directory故障转时,无法更新此绑定;
2、arptables
前提:在各RS在安装arptables程序,并编写arptables规则
缺点:依赖于独特功能的应用程序
3、修改Linux内核参数
前提:RS必须是Linux;
缺点:适用性差;
两个参数:
arp_announce:定义通告模式
arp_ignore:定义收到arp请求的时响应模式
配置专用路由,以使得响应报文首先通过vip所配置的lo上的别名接口
LVS-DR模型的实现过程:
1.首先规划集群和网路环境,需要三台虚拟机,如下图所示:
此时Director可以只有一个网卡Eth0,连接类型为桥接(Birdged),RealServer1和RealServer2 的网卡连接类型也都为桥接(Birdged):
在realserve1服务器上进行配置:
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#ifconfig lo:0 172.16.24.7 broadcast 172.16.24.7 netmask 255.255.255.255 up
#route add -host 172.16.24.7 dev lo:0
在realserve2服务器上进行配置:
# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#ifconfig lo:0 172.16.24.7 broadcast 172.16.24.7 netmask 255.255.255.255 up
#route add -host 172.16.24.7 dev lo:0
在Director服务器上配置:
#ifconfig eth0:0 172.16.24.7 broadcast 172.16.24.7 netmask 255.255.255.255 up
#route add -host 172.16.24.7 dev eth0:0
#echo 1 > /proc/sys/net/ipv4/ip_forward --开启IP转发功能
让两个RealServer的WEB服务启动起来
[root@node1 ~]# rpm -q httpd
httpd-2.2.15-29.el6.centos.x86_64
如果没有安装则使用yum install httpd安装即可
[root@node2 ~]# vim /var/www/html/index.html
<h1>Web1</h1>
[root@node2 ~]# service httpd start
[root@node3 ~]# vim /var/www/html/index.html
<h1>Web2</h1>
[root@node3 ~]# service httpd start
安装ipvsadm(如果已安装可忽略)
[root@node1 ~]#yum install ipvsadm
在Director上配置ipvsadm规则
#ipvsadm -A -t 172.16.24.7:80 -s rr -g
#ipvsadm -a -t 172.16.24.7:80 -r 172.16.24.8
#ipvsadm -a -t 172.16.24.7:80 -r 172.16.24.9
为了保证其时效性,Hash table中“连接追踪”信息被定义了“生存时间”。LVS为记录“连接超时”定义了三个计时器:
1、空闲TCP会话;
2、客户端正常断开连接后的TCP会话;
3、无连接的UDP数据包(记录其两次发送数据包的时间间隔);
上面三个计时器的默认值可以由类似下面的命令修改,其后面的值依次对应于上述的三个计时器:
# ipvsadm --set 28800 30 600
数据包在由Direcotr发往Realserver时,只有目标MAC地址发生了改变(变成了Realserver的MAC地址)。Realserver在接收到数据包后会根据本地路由表将数据包路由至本地回环设备,接着,监听于本地回环设备VIP上的服务则对进来的数据库进行相应的处理,而后将处理结果回应至RIP,但数据包的原地址依然是VIP。
ipvs的持久连接:
无论基于什么样的算法,只要期望源于同一个客户端的请求都由同一台Realserver响应时,就需要用到持久连接。比如,某一用户连续打开了三个telnet连接请求时,根据RR算法,其请求很可能会被分配至不同的Realserver,这通常不符合使用要求。
Persistent Client Connections(PCC),将来自于同一个客户端发往VIP的所有请求统统定向至同一个RS,持久客户端连接:就是不管客户端发起什么样的服务(如80端口的web服务,3306端口的mysql服务)请求,都将经过Director被定位到同一个特定的real server上,只要此real server 提供了这种服务,并且会持续连接,如果客户端连接超时,real server允许一定范围内的
前面的配置步骤都一样,只是在Director上配置ipvsadm规则有些不同
ipvsadm -A -t 172.16.24.7:0 -s rr -p 120
ipvsadm -a -t 172.16.24.7:0 -r 172.16.24.8 -g
ipvsadm -a -t 172.16.24.7:0 -r 172.16.24.9 -g
Persistent Port Connections(PPC),将来自于一个客户端发往某VIP的某端口的所有请求统统定向至同一个RS,持续端口连接:就是不管客户端发起什么样的端口请求(如80端口,是提供web服务的,23端口,是提供telnet服务), 都会经过 Director 将请求转发到同一个 real server 上 , 并持续连接。假如一个客户端请求的是 web 服务,相应的是 realserver1 ,当此用户退出后再次发起请求 web 服务的时候, 依然是 realserver1 提供的 web 服务。
持久连接ppc的效果
前面的配置步骤都一样,只是在Director上配置ipvsadm规则有些不同
ipvsadm -A -t 172.16.24.7:80 -s rr
ipvsadm -a -t 172.16.24.7:80 -r 172.16.24.8 -g
ipvsadm -a -t 172.16.24.7:80 -r 172.16.24.9 -g
ipvsadm -E -t 172.16.24.7:80 -s rr -p 120
PFMC: 端口绑定,port affinity基于防火墙标记,将两个或以上的端口绑定为同一个服务把80端口和443 端口做成一个持久防火墙标记,同时定向到同一个realserver上,即在访问80服务的时候是realserver1,然后改为访问443服务的时候依然定向到realserver1上。
前面的配置步骤都一样,只是在Director上配置ipvsadm规则有些不同
iptables -t mangle -A PREROUTING -d 172.16.24.7 -p tcp --dport 80 -j MASK --set-make 10
iptables -t mangle -A PREROUTING -d 172.16.24.7 -p tcp --dport 443 -j MASK --set-make 10
ipvsadm -A -f 10 -s rr
ipvsadm -a -f 10 -r 172.16.24.8 -g
ipvsadm -a -f 10 -r 172.16.24.9 -g
可以通过浏览器输入自己定义的地址检测一下。看看是什么效果。