Linux学习-LVS之DR模型

Posted 丢爸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 = 0
net.ipv4.conf.default.arp_ignore = 0
net.ipv4.conf.lo.arp_ignore = 0
net.ipv4.conf.ens33.arp_ignore = 1
net.ipv4.conf.ens37.arp_ignore = 1

#在另一台主机(172.16.1.2)上测试,
[root@rs1 ~]# arping 172.16.1.3 -c 1
ARPING 172.16.1.3 from 172.16.1.2 ens33
Unicast reply from 172.16.1.3 [00:0C:29:48:D3:D7]  1.484ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)
[root@rs1 ~]# arping 192.168.88.101 -c 1
ARPING 192.168.88.101 from 172.16.1.2 ens33
Sent 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 ~]# ifconfig
ens33: 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 0

ens33: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 = 2
net.ipv4.conf.ens33.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.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 -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.88.110:80 rr
  -> 192.168.88.102:80            Route   1      0          0         
  -> 192.168.88.103:80            Route   1      0          0 

以上是关于Linux学习-LVS之DR模型的主要内容,如果未能解决你的问题,请参考以下文章

linux集群之LVS DR模型简单实现

LVS集群之DR模型

linux集群之DR模型的配置

linux集群系列 --- LVS之负载均衡集群DR实例

负载均衡之LVS-NAT LVS-DR模型详解

LVS简单实现NAT&DR模型