> 文档中心 > Linux学习-LVS之DR模型

Linux学习-LVS之DR模型


以下实例通过Vmware下Centos7系统上部署

环境准备

准备3台centos7虚拟机
Director Server:VIP(ens33:0):192.168.88.101,DIP(ens33):192.168.88.110
Real Server1(web服务器):RIP1(ens33):192.168.88.102 VIP(lo:0):192.168.88.101
Real Server2(web服务器):RIP2(ens33):192.168.88.103 VIP(lo:0):192.168.88.101

#两个内核参数#arp_ignore和arp_announce两个参数用于控制系统返回arp响应和发送arp请求时的动作。#arp_ignore(0-8):控制系统在收到外部的arp请求时,是否要返回arp响应#0:响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。#1:只响应目的IP地址为接收网卡上的本地地址的arp请求。#2:只响应目的IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段。#3:如果ARP请求数据包所请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。#4~7:保留未使用#8:不回应所有的arp请求#arp_announce(0|1|2):控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址。#0:允许使用任意网卡上的IP地址作为arp请求的源IP,通常就是使用数据包a的源IP。#1:尽量避免使用不属于该发送网卡子网的本地地址作为发送arp请求的源IP地址。#2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。
通过arping命令测试arp_ignore和arp_announce参数的配置
#/etc/sysctl.d/arp.conf,永久修改arp_ignore和announce参数,修改完成后通过sysctl -p /etc/sysctl.d/arp.conf使设置生效#主机有两块网卡分别为ens33[192.168.88.101],ens37[172.16.1.3]net.ipv4.conf.all.arp_ignore = 0net.ipv4.conf.default.arp_ignore = 0net.ipv4.conf.lo.arp_ignore = 0net.ipv4.conf.ens33.arp_ignore = 1net.ipv4.conf.ens37.arp_ignore = 1#在另一台主机(172.16.1.2)上测试,[root@rs1 ~]# arping 172.16.1.3 -c 1ARPING 172.16.1.3 from 172.16.1.2 ens33Unicast reply from 172.16.1.3 [00:0C:29:48:D3:D7]  1.484msSent 1 probes (1 broadcast(s))Received 1 response(s)[root@rs1 ~]# arping 192.168.88.101 -c 1ARPING 192.168.88.101 from 172.16.1.2 ens33Sent 1 probes (1 broadcast(s))Received 0 response(s)
添加VIP
#给director添加vip[root@ds ~]# ifconfig ens33:0 192.168.88.110/32 broadcast 192.168.88.110[root@ds ~]# ifconfigens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500 inet 192.168.88.101  netmask 255.255.255.0  broadcast 192.168.88.255 inet6 fe80::a03d:1c5b:d3d8:111c  prefixlen 64  scopeid 0x20<link> ether 00:0c:29:48:d3:cd  txqueuelen 1000  (Ethernet) RX packets 1897  bytes 161442 (157.6 KiB) RX errors 0  dropped 0  overruns 0  frame 0 TX packets 1069  bytes 123747 (120.8 KiB) TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500 inet 192.168.88.110  netmask 0.0.0.0  broadcast 192.168.88.110 ether 00:0c:29:48:d3:cd  txqueuelen 1000  (Ethernet)#添加路由,从哪进从哪出[root@ds ~]# route add -host 192.168.88.110 dev ens33:0#rs1和rs2主机修改内核参数(禁止两台主机将vip广播出去,如不修改,默认配置会将VIP广播出去,当客户机访问VIP时,可能会不经过director直接到达后端Real Server),添加vip#临时修改内核参数[root@rs1 ~]# echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore[root@rs1 ~]# echo 1 >/proc/sys/net/ipv4/conf/ens33/arp_ignore[root@rs1 ~]# echo 2 >/proc/sys/net/ipv4/conf/ens33/arp_announce[root@rs1 ~]# echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce#永久修改(/etc/sysctl.d/arp.conf),配置完成后通过sysctl -p /etc/sysctl.d/arp.conf使其参数生效net.ipv4.conf.all.arp_announce = 2net.ipv4.conf.ens33.arp_announce = 2net.ipv4.conf.all.arp_ignore = 1net.ipv4.conf.ens33.arp_ignore = 1#RS1和RS2配置IP,添加路由[root@rs1 ~]# ifconfig lo:0 192.168.88.110/32 broadcast 192.168.88.110[root@rs1 ~]# route add -host 192.168.88.110 dev lo:0
在director上添加ipvs规则
[root@ds ~]# ipvsadm -A -t 192.168.88.110:80 -s rr[root@ds ~]# ipvsadm -a -t 192.168.88.110:80 -r 192.168.88.102:80 -g[root@ds ~]# ipvsadm -a -t 192.168.88.110:80 -r 192.168.88.103:80 -g[root@ds ~]# ipvsadm -L -nIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port    Forward Weight ActiveConn InActConnTCP  192.168.88.110:80 rr  -> 192.168.88.102:80     Route   1      0   0    -> 192.168.88.103:80     Route   1      0   0