一,数据包流向:
1,cilent向目标vip发出请求,dir接收,此时ip报头数据帧头信息。
2,dir根据负载均衡算法给rs(rip),将rip所在网卡的mac地址作为目标的mac地址,发送到局域网里,此时ip报头数据帧信息。
3,rip在局域网中收到这个帧,拆开后发现目标(vip)与本机匹配,就会处理这个报文,随后重新封装报文并发送到局域网,此时ip报头及数据帧信息。
二,arp问题解决
因为web服务器与负载均衡器用一个vip,因为数据转发要进行arp广播,广播的时候会因为vip会使得网络瘫痪。
1,ari_ignore-1
防止网关路由器发送ARP广播时调度器和节点都会进行响应,这里会导致ARP缓存表混乱,不对非本地物理网卡的arp请求进行响应,因为VIP承载lo:0.
2,arp_announce-2
系统不使用响应数据的源IP地址(VIP)来作为本机进行的arp请求报文的源P地址,而是用发送报文的物理网卡的IP地址做为ARP请求报文的源P地址,这样可以防止网关路由器接收到的源P地址为VIP的arp请求报文后的有去更新ARP缓存表,会导致外网再去发送请求时,数据包到时候到达不了调度器。
三,特性
优点:负载均衡器只负责将请求的包分给物理服务器,而物理服务器将应答包直接发送给用户。所以负载均衡器能处理很巨大的请求量,这种方式,可以让一台负载均衡器为超过一百台物理服务器服务,负载均衡器不再是系统的瓶颈,使用lvs-dr模式,如果你的负载均衡器拥有100M全双工的话,就可以让vs达到到1G甚至更高的吞吐量。
缺点:所有的调度器和节点服务器在同一个广播域,还不支持异地容灾。
四,服务部署:
DR服务器:192.168.10.18
Web 服务器1:192.168.10.16
Web 服务器2:192.168.10.17
vip:192.168.10.180
1,dr服务器
systemctl stop firewalld.service
setenforce 0
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install ipvsadm配置vip
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255启动网卡
ifup ens33:0
ifconfig ens33:0调整proc参数
vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p匹配值负载均衡策略
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadmipvsadm -C
ipvsadm -A -t 192.168.10.180:80 -s rr
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.16:80 -g
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.17:80 -g
ipvsadm查看节点状态
ipvsadm -ln
2,web服务器(两个都是如下操作)
配置vip
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255 启动io接口
ifup lo:0
ifconfig lo:0
route add -host 192.168.10.180 dev lo:0添加路由
vim /etc/rc.local
/sbin/route add -host 192.168.10.180 dev lo:0调整内核的arp响应参数
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p
3,测试:访问vip地址即可