15468 发表于 2019-1-3 08:30:49

LVS 之 DR model

回顾:
LVS-type:NAT(-m):
DR(-g):
TUN(-i): internet tunneling
FNAT


DR模型之 可伸缩Cache服务
http://s3.运维网.com/wyfs02/M02/23/02/wKiom1MuSwfg8OYjAAJWkYrcs40844.jpg
DR核心:响应过程不经过Director
DR模型 要点:
A.以下3种办法 都能达到:   仅让Director 会响应Router的 关于VIP 的动态ARP 广播请求,禁止RS上的VIP直接跟前端路由通信
1、修改路由,使用静态ARP;
2、在RS上使用arptables,禁止响应对VIP的ARP广播请求;
3、在RS上修改其内核参数,并向VIP配置在与RIP不同的接口的别名上;
      B. Diretor 转交报文 给 Real Server 时 ,必须 以VIP 为 目标 IP ,并且 Diretor 对报文的做如下动作:修改 报文的目标MAC 为 Real Server MAC,确保报文送到的是 Real Server


      C. 强行定义 路由规则,明确告诉linux: 只要访问目标为 VIP 那么响应的 源IP 就必须是VIP


      D. 响应报文从eth0出来后    交给的下一个 主机 ,那么 下个主机一定是 eth0(RIP)的网关。
  
  
  对调整的内核参数解释:




  
我们一般采用修改 kernel 参数,来屏蔽 Real Server 对VIP 的ARP响应与通告,对此过程做如下解释:
背景:
         HOST上有多个网卡,却在不同一网段,例如 eth0:net0    eth1:net1    eth2:net2 ..... ,这时 如果 net0 网段的主机 发起ARP请求,那么HOST 会把 eth0,eth1,eth2... 这些在HOST的网卡设备的 IP 与MAC 都发给 net0 里的请求端,但是 请求端 拿到了3个 设备的IP与MAC (eth0:IP MAC , eth1:IP MACeth2 : IP MAC)以为这3个 IP 都能通信,而实际上 ,只有net0 内的eth0 网卡给他的IP和MAC 才能通信 , 而 eth1,eth2 给的IP与MAC 对于 请求端来说 是没有意义的,
         如何是 arp请求 能准确的 找到能通信的地址?


       在 kernel 2.4.26和2.6.4 之后,引入了2个网卡设备标识:arp_ignor/arp_announc ,用于实现 调整ARP协议栈 工作模式       arp_ignore      用于定义响应 限制级别
       arp_announce 用于定义通告 限制级别
http://s3.运维网.com/wyfs02/M00/23/02/wKiom1MuS2-wCZqdAAExGBx97As422.jpg
http://s3.运维网.com/wyfs02/M02/23/03/wKioL1MuS1XjzWgqAAKjsjRn2fE642.jpg
例如:
http://s3.运维网.com/wyfs02/M01/23/02/wKiom1MuS5ix9bCvAACgw9k9vW8511.jpg
通告:当主机接入 net 3.0 时
之前内核:通告设备1.1 IP 和MAC与设备3.1 IP 与MAC
之后内核:告诉内核:arp_announce=2   则仅 通告 设备 3.1 IP 与MAC
仅宣告: 接入该网络的网卡的IP与MAC
APR忽略:当ARP广播 来自 net 3.0 时
之前内核: 响应 设备1.1 IP 和MAC与 设备3.1 IP 与MAC
之后内核:告诉内核:arp_ignore=1      则仅响应 设备3.1 IP 与MAC
对 进入该网卡 arp请求,仅回应 进入网卡的 IP与MAC
那个设备向内核 宣布 arp_announce=2 arp_ignore=1这表示 那个设备 自己管理自己的设备,不用别的设备 帮我通告了,这样arp 广播 就能找到 用于 准确 通信的 地址了。








一个公网地址 的LVS DR 模型
缺点: 需要直接 做 路由,使请求到 达 互联网
公网地址的LVS DR 模型(VIP 与RIP 同网段)
当然 这个是 比较 常用的 ,省下路由费 ,也解决了路由引起的 负载瓶颈,当然公网IP 需要自己掏钱的
规划:(192.168.195.0 是我虚拟机 网关所在网段,能够自由上网,这里当公网IP用了)
  http://s3.运维网.com/wyfs02/M02/23/02/wKiom1MuS9qxAfmnAADfD5mBRBQ868.jpg
Real Server 配置
解决arp问题

配置所以接口的
      echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
      echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

特地配置lo (告诉kernel 我的设备 我自己管,其他人 就别插手了)
      echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
      echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce


不是用来通信的,只是用在响应客户端的时候,把 VIP 作为源地址而已(屏蔽掉自己响应 VIP 请求)

/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up




定义 目标地址是VIP 的报文   出去报文的 设备是lo:0
/sbin/route add -host $VIP dev lo:0   
  Real Server 1:
  
# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
# echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
# echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
# ifconfig lo:0 192.168.195.150 broadcast 192.168.195.171 netmask 255.255.255.255 up
# route add -host 192.168.195.150 dev lo:0
# route -n
Kernel IP routing table
Destination   Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.195.150 0.0.0.0         255.255.255.255 UH    0      0      0 lo
192.168.195.0   0.0.0.0         255.255.255.0   U   0      0      0 eth0
169.254.0.0   0.0.0.0         255.255.0.0   U   1002   0      0 eth0
0.0.0.0         192.168.195.2   0.0.0.0         UG    0      0      0 eth0
# ifconfig
eth0      Link encap:EthernetHWaddr 00:0C:29:6F:42:49
inet addr:192.168.195.171Bcast:192.168.195.255Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe6f:4249/64 Scope:Link
UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1
RX packets:746 errors:0 dropped:0 overruns:0 frame:0
TX packets:471 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:68969 (67.3 KiB)TX bytes:53295 (52.0 KiB)
lo      Link encap:Local Loopback
inet addr:127.0.0.1Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNINGMTU:16436Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b)TX bytes:0 (0.0 b)
lo:0      Link encap:Local Loopback
inet addr:192.168.195.150Mask:255.255.255.255
UP LOOPBACK RUNNINGMTU:16436Metric:1  
  Real Server 2
  
# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
# echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
# echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
# ifconfig lo:0 192.168.195.150 broadcast 192.168.195.170 netmask 255.255.255.255 up
# route add -host 192.168.195.150 dev lo:0  
Director 配置

ipvs报文需要 的出口 需要 打开ipforward
echo 1 > /proc/sys/net/ipv4/ip_forward


因为Director的VIP 是用来 提供服务的,必须配置 在出口网卡上,而且 Direcotor 有DIP 所以必须定义路由
/sbin/ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:1
清空iptables 避免冲突,清空 ipvsadm ,重新设置 rules   
# iptables -F
# iptables -Z
# ipvsadm -Z

提供集群服务
/sbin/ipvsadm -A -t $VIP:80 -s wlc
提供RealServer
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -g -w $RSWEIGHT1
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -g -w $RSWEIGHT2


  Director 配置
  
# echo 1 > /proc/sys/net/ipv4/ip_forward
# ifconfig eth0:1 192.168.195.150 broadcast 192.168.195.150 netmask 255.255.255.255 up
# route add -host 192.168.195.150 dev eth0:1
# iptables -F
# iptables -Z
# ipvsadm -Z
# ipvsadm -A -t 192.168.195.150:80 -s wlc
# ipvsadm -a -t 192.168.195.150:80 -r 192.168.195.170 -g -w 1
# ipvsadm -a -t 192.168.195.150:80 -r 192.168.195.171 -g -w 2  http://s3.运维网.com/wyfs02/M00/23/02/wKiom1MuTMqhR-EGAABo2pf1Sps419.jpg
http://s3.运维网.com/wyfs02/M02/23/03/wKioL1MuTK2RpOzeAABqkjrsG6w480.jpg
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPktsOutPktsInBytes OutBytes
-> RemoteAddress:Port
TCP192.168.195.150:80               5091    25495      01824257      0
-> 192.168.195.170:80               1703   8534      0   612007      0
-> 192.168.195.171:80               3388    16961      01212250      0  


  




页: [1]
查看完整版本: LVS 之 DR model