1 LVS的DR模式
工作过程:
- 1 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。此时报文的源IP为CIP,目标IP为VIP;
- 2 PREROUTING检查发现数据包的目标IP是本机,将数据包发送至INPUT链;
- 3 IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改为RIP的MAC地址,然后将数据包发至POSTROUTING链。此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址;
- 4 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发送至Real Server;
- 5 RS发现请求报文的MAC地址是自己的MAC地址,就接受此报文。处理完成后,将响应报文通过lo接口传送给eth0网卡然后向外发出。此时的源IP地址为VIP,目标IP为CIP;
- 6 响应报文最终送达至客户端。
2 LVS-DR模型的特性
特性:
- 1 保证前端路由将目标地址为VIP报文统统发给Director Server ,而不是RS;
- 2 RS跟Director Server必须在同一个物理网络中;
- 3 所有的请求报文经由Director Server,但响应报文必须不能经过Director Server;
- 4 不支持地址转换,也不支持端口映射;
- 5 RS可以是大多数常见的操作系统;
- 6 RS的网管决不允许指向DIP(因为我们不允许它经过director)RS上的lo接口配置VIP的IP地址;
缺陷:
- RS和DS必须在同一个机房
3 搭建实验环境
(1)实验准备
在这个实验中我们需要准备3台虚拟机分别为:sever1 sever2 sever3
server1作为lvs调度器,而server2和server3作为后端服务器
- 在server2和server3中安装apache,并且写好测试页:
yum install httpd -y
cd /var/www/html/
vim index.html
systemctl start httpd
(2)配置ipvsadm
在server1中进行ipvsadm的相关配置
yum install ipvsadm -y
ipvsadm -l #查看策略(解析ip与域名的对应关系,查看速度较慢)
ipvsadm -ln #-n不解析(速度快)
ipvsadm -A -t 172.25.0.100:80 -s rr #添加策略:tcp,通过80端口访问172.25.0.100,以轮询的调度算法
ipvsadm -a -t 172.25.0.100:80 -r 172.25.0.2:80 -g #添加策略:tcp,通过80端口访问172.25.0.100,以轮询的调度算法,使用DR(直接路由)模式,转发到172.25.0.2的80端口
ipvsadm -a -t 172.25.0.100:80 -r 172.25.0.3:80 -g ##添加策略:tcp,通过80端口访问172.25.0.100,以轮询的调度算法,使用DR(直接路由)模式,转发到172.25.0.3的80端口
ipvsadm -ln
(3)添加VIP
然后在server1 server2 server3上分别添加VIP地址
ip addr add 172.25.0.100/32 dev eth0 #添加VIP地址到eth0上,这里掩码为32,表示对外不可见
ip addr show
(4)测试
在真机上来进行测试:
注意:这里出现了一个问题,我们刚刚设置的是轮询模式,但是这里在访问172.25.0.100时,出现的是server2的测试界面。
原因是:我们在上面配置LVS时,在server1 server2 server3上都配置了172.25.0.100的信息,而我们的实验是在一个局域网的环境中进行的,在同一个局域网中通信,数据的传输是依赖MAC地址而非IP地址,故当我们用classroom来对172.25.0.100进行访问时,server1 server2 server3就会来进行“抢答”,谁能够抢到,我们访问到的就是那个的测试页。
1)当server1抢到时,显示的就是轮询
2)当server2抢到时,自然就是绑定了server2的MAC地址
3)当server3抢到时,自然就是绑定了server3的MAC地址
(5)解决上述问题的方法——让MAC地址固定为server1的,然后进行轮询
配置server2和server3的arp路由策略:为arptables网络的用户控制过滤的守护进程
- server2上:
yum whatprovides arptables/*
yum install arptables-0.0.4-8.el7.x86_64 -y #安装arptables命令,arptables是一个同户空间程序,它可以管理内核中的arp规则表,
arptables -A INPUT -d 172.25.0.100 -j DROP #当局域网内广播172.25.0.100这个IP时,它丢弃所有局域网内的请求,不予以理睬
arptables -A OUTPUT -s 172.25.0.100 -j mangle --mangle-ip-s 172.25.0.2 #当它自身需要在局域网内发包时,伪装为自己原本的IP 172.25.0.2
- server3上:
yum install arptables-0.0.4-8.el7.x86_64 -y
arptables -A INPUT -d 172.25.0.100 -j DROP
arptables -A OUTPUT -s 172.25.0.100 -j mangle --mangle-ip-s 172.25.0.3