在一台主机上搭建lvs服务器,设置lvs的工作模式是DR模式,lvs仅仅是一个调度器,它会把客户端的请求转发给后备服务器
DR模式直接由后备服务器把数据返回给客户端,不需要逆向发送数据包,此时lvs专注做调度就可,效率很高。
DR模式高效的原因是RS服务器会直接响应客户端的请求,发送的请求一直往前发送数据包,不会再返回数据包给调度器
实验背景:
三台虚拟机做服务
一台真机做测试
server1 172.25.70.1 调度器
server2 172.25.70.2 真实服务器1
server3 172.25.70.3 真实服务器2
真机 172.25.70.250 客户端
前提:
对四台主机分别关闭火墙,关闭selinux
1.安装ipvsadm
yum install ipvsadm -y
ipvsadm -l #查看策略(解析ip与域名的对应关系,查看速度较慢)
ipvsadm -ln #-n不解析(速度快)
ipvsadm -- ##--help查看帮助
ipvsadm -A -t 172.25.70.254:80 -s rr #添加策略:-t tcp,通过80端口访问VIP:172.25.70.254,以轮询的调度算法
(2)策略写入两台后端服务器的信息
ipvsadm -a -t 172.25.70.254:80 -r 172.25.70.2:80 -g #添加策略:tcp,通过80端口访问172.25.70.254,以轮询的调度算法,-g:使用DR(直接路由)模式,转发到172.25.70.2的80端口
ipvsadm -a -t 172.25.70.254:80 -r 172.25.70.3:80 -g ##添加策略:tcp,通过80端口访问172.25.70.254,以轮询的调度算法,-g:使用DR(直接路由)模式,转发到172.25.70.3的80端口
ipvsadm -ln
ip addr add 172.25.70.254/32 dev eth0 #添加VIP地址到eth0上
ip addr show
1.为rs添加vip,它对外提供服务
ip addr add 172.25.70.254/32 dev eth0 #添加VIP地址到eth0上
yum install httpd
systemctl start httpd
vim /var/www/html/index.html
客户端测试:
curl 172.25.70.254 #访问VIP
这个时候,你可能会发现并没有轮询.
在解决这个问题时,需要了解arp协议。
当你在客户端测试172.25.70.254时,arp协议会在局域网广播,寻找ip的mac地址,导致有这个ip地址(3个server)的都来抢着回答,谁抢到了就是
谁。
arp -an |grep 254 #查看VIP:254绑定的MAC地址
ip addr show ##查看回答的server的mac地址
当RS:server2或server抢到之后,arp就会把对应的mac地址保存,不会再改了。
可以选择手动清除
arp -d 172.25.70.254 #清除绑定的mac地址
要避免这种情况:要求只能绑定server1(调度器)的MAC地址
配置server2和server3的arp路由策略:为arptables网络的用户控制过滤的守护进程
1.安装软件
yum whatprovides arptables/*
yum install arptables-0.0.4-8.el7.x86_64 -y
arptables是一段程序,用于管理内核空间的arp规则表,规定arp什么时候响应,什么时候不响应。
2.添加策略
arptables -A INPUT -d 172.25.70.254 -j DROP #来的ARP,如果目的IP是VIP的,丢弃。不会回答RS自己的mac地址。
arptables -A OUTPUT -s 172.25.70.254 -j mangle --mangle-ip-s 172.25.70.2 #发出去的ARP包,如果源IP是VIP,就改成RS的IP。
#因为VIP和RIP都配置在相同网卡上,这样修改,发出去的ARP包,则只会认为自己是RIP。
yum whatprovides arptables/*
yum install arptables-0.0.4-8.el7.x86_64 -y
arptables -A INPUT -d 172.25.70.254 -j DROP #来的ARP,如果目的IP是VIP的,丢弃。不会回答RS自己的mac地址。
arptables -A OUTPUT -s 172.25.70.254 -j mangle --mangle-ip-s 172.25.70.3 #发出去的ARP包,如果源IP是VIP,就改成RIP。
arp -d 172.25.70.254 #先删除现有绑定MAC地址
curl 172.25.70.254
也可以通过更改内核参数的方法来解决多台IP相同主机抢答的问题。
sysctl -a | grep arp_ignore查看参数