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模型的主要内容,如果未能解决你的问题,请参考以下文章