LVS-DR技术讲解:由于LVS-NAT技术的缺点(数据进出都走调度器,调度器很容易成为瓶颈),大佬们提出了一种返回数据时不走调度器的技术,即DR技术。
实验主机配置:(都不需要配置网关)
实验LVS DR模式的核心需求是: 希望web1和web2可以不走调度器返回数据!
但是网络中的基本原则是A访问B,必须是B返回数据给A。
现在4.10访问4.5,最终4.100给4.10返回网页数据,所有数据包都会被丢弃!!!
那怎么办呢? 地址欺骗
实验:
步骤一:配置实验网络环境
1)设置Proxy服务器的VIP和DIP
注意:为了防止冲突,VIP必须要配置在网卡的虚拟接口,网卡名称不能照抄!!!
1. [root@proxy ~]# cd /etc/sysconfig/network-scripts/
2. [root@proxy ~]# cp ifcfg-eth0 ifcfg-eth0:0
3. [root@proxy ~]# vim ifcfg-eth0:0
4. TYPE=Ethernet #网卡类型为:以太网卡
6. BOOTPROTO=none #none手动配置IP,或者dhcp自动配置IP
8. NAME=eth0:0 #网卡名称
10.DEVICE=eth0:0 #设备名称
12. ONBOOT=yes #开机时是否自动激活该网卡
14. IPADDR=192.168.4.15 #IP地址
16. PREFIX=24 #子网掩码
18. [root@proxy ~]# systemctl restart network #重启网络服务
19. [roo t@proxy ~]# ip a s #会看到一个网卡下面有两个IP地址
常见问题:RHEL7和Centos7系统中有两个管理网络的服务,有可能冲突?
解决方法:关闭NetworkManager服务后重启network即可。
2)设置Web1服务器网络参数(不能照抄网卡名称)
1. [root@web1 ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.100/24 connection.autoconnect yes
3. [root@web1 ~]# nmcli connection up eth0
接下来给web1配置VIP地址。
注意:这里的子网掩码必须是32(也就是全255),网络地址与IP地址一样,广播地址与IP地址也一样。
1. [root@web1 ~]# cd /etc/sysconfig/network-scripts/
2. [root@web1 ~]# cp ifcfg-lo ifcfg-lo:0
3. [root@web1 ~]# vim ifcfg-lo:0
4. DEVICE=lo:0 #设备名称
6. IPADDR=192.168.4.15 #IP地址
8. NETMASK=255.255.255.255 #子网掩码
10. NETWORK=192.168.4.15 #网络地址
12. BROADCAST=192.168.4.15 #广播地址
14. ONBOOT=yes #开机是否激活本网卡
16. NAME=lo:0 #网卡名称
防止地址冲突的问题:
这里因为web1也配置与调度器一样的VIP地址,默认肯定会出现地址冲突;
sysctl.conf文件写入这下面四行的主要目的就是访问192.168.4.15的数据包,只有调度器会响应,其他主机都不做任何响应,这样防止地址冲突的问题。
1. [root@web1 ~]# vim /etc/sysctl.conf
2. #文件末尾手动写入如下4行内容,英语词汇:ignore(忽略、忽视),announce(宣告、广播通知)
3. net.ipv4.conf.all.arp_ignore = 1
4. net.ipv4.conf.lo.arp_ignore = 1
5. net.ipv4.conf.lo.arp_announce = 2
6. net.ipv4.conf.all.arp_announce = 2
7. #当有arp广播问谁是192.168.4.15时,本机忽略该ARP广播,不做任何回应(防止进站冲突)
8. #本机不要向外宣告自己的lo回环地址是192.168.4.15(防止出站冲突)
9. [root@web1 ~]# sysctl -p
重启网络服务
root@web1 ~]# systemctl restart network #重启网络服务
[root@web1 ~]# ip a s #会看到一个网卡下面有两个IP地址
常见错误:如果重启网络后未正确配置lo:0,有可能是NetworkManager和network服务有冲突,关闭NetworkManager后重启network即可。(非必须的操作)
1. [root@web1 ~]# systemctl stop NetworkManager
2. [root@web1 ~]# systemctl restart network
3)设置Web2服务器网络参数(不能照抄网卡名称)
步骤二:proxy调度器安装软件并部署LVS-DR模式调度器
1)安装软件(如果已经安装,此步骤可以忽略)
1. [root@proxy ~]# yum -y install ipvsadm
2)清理之前实验的规则,创建新的集群服务器规则
1. [root@proxy ~]# ipvsadm -C #清空所有规则
2. [root@proxy ~]# ipvsadm -A -t 192.168.4.15:80 -s wrr
3. ## -A(add)是创建添加虚拟服务器集群
4. # -t(tcp)后面指定集群VIP的地址和端口,协议是tcp协议
5. # -s后面指定调度算法,如rr(轮询)、wrr(加权轮询)、lc(最少连接)、wlc(加权最少连接)等等
3)添加真实服务器(-g参数设置LVS工作模式为DR模式,-w设置权重)
1. [root@proxy ~]# ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.100 -g -w 1
2. [root@proxy ~]# ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.200 -g -w 1
3. #-a(add)往虚拟服务器集群中添加后端真实服务器IP,指定往-t 192.168.4.15:80这个集群中添加
4. #-r(real)后面跟后端真实服务器的IP和端口,这里不写端口默认是80端口
5. #-w(weight)指定服务器的权重,权重越大被访问的次数越多,英语词汇:weight(重量,分量)
6. #-m指定集群工作模式为NAT模式,如果是-g则代表使用DR模式,-i代表TUN模式
4)查看规则列表(L代表list查看规则,n代表number数字格式显示)
1. [root@proxy ~]# ipvsadm -Ln
2. TCP 192.168.4.15:80 wrr
3. -> 192.168.4.100:80 Route 1 0 0
4. -> 192.168.4.200:80 Route 1 0 0
步骤三:客户端测试
客户端使用curl命令反复连接http://192.168.4.15,查看访问的页面是否会轮询到不同的后端真实服务器。
扩展知识:默认LVS不带健康检查功能,需要自己手动编写动态检测脚本,实现该功能:(参考脚本如下,仅供参考)
1. [root@proxy ~]# vim check.sh
2. #!/bin/bash
3. #LVS健康检查功能
4. VIP=192.168.4.15:80
5. RIP1=192.168.4.100
6. RIP2=192.168.4.200
7. while :
8. do
9. for IP in $RIP1 $RIP2
10. do
11. curl -s http://$IP &>/dev/null
12. if [ $? -eq 0 ];then
13. ipvsadm -Ln |grep -q $IP || ipvsadm -a -t $VIP -r $IP
14. else
15. ipvsadm -Ln |grep -q $IP && ipvsadm -d -t $VIP -r $IP
16. fi
17. done
18. sleep 1
19. done
总结: