zhltom 发表于 2019-1-3 10:08:04

LVS的DR模型

  LVS的DR模型
  

  本次实例拓扑:
http://s3.运维网.com/wyfs02/M00/22/9F/wKiom1Mhij3itNLKAACNvCHdMhY831.jpg
  

  

  在DR模型的实现中,director和服务器必须在同一个物理网段或子网中,且不能在中间有其他的转发设备,并且因为要实现直接回应请求,所以通常real server的ip也是合法的ip,director将转发所有的请求到群集的节点去,有两个需要解决的关键问题,第一,处于平行地位的客户端和服务器vip都是相同的(客户端请求后回应的数据包必须源ip是一致的),那么在客户端请求到来时,该最终把数据包发给谁 第二,就算数据到达directe,而directe又是如何分配给后台的real server的
  

  对于问题一的解决我们可以在后方的real server上设置ARP屏蔽(ARPiptables),当然还有另外两种的解决方案,启用内核模块中处理tcp/ip数据包中的ARP-ignore ARP-announce 其中ARP-announce状态1是默认的,表示使用任意的本地地址,配置在任意接口上的 状态2表示试图避免本地地址
  

  arp_announce相当于定义对于本地网络接口(指多个地址的情况下)ARP请求的回应优先级,0表示只要有就回应(不管是不是针对该接口地址),1表示尽量避免回应非本网段的,2表示最合适的本地地址用于回应
  

  

  

  在direct设备上,我们将eth2的192.168.2.1作为物理地址,eth2:0逻辑接口的192.168.2.2作为VIP地址
  

  direct设备上的eth0网卡配置
http://s3.运维网.com/wyfs02/M02/22/A0/wKioL1MhikKAQLyMAABgiTGLeKk697.jpg
  lo:0接口的配置,在此要注意它的掩码长度,必须为32长
http://s3.运维网.com/wyfs02/M01/22/9E/wKiom1MhgdvSJKZRAABm82VmAIE257.jpg
  

  direct设备上的具体配置:
  # mount /dev/cdrom /media/cdrom
  mount: block device /dev/sr0 is write-protected, mounting read-only
  # yum --disablerepo=\* --enablerepo=c6-media install ipvsadm
  # ipvsadm -l
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port         Forward Weight ActiveConn InActConn
  # ipvsadm -A -t 192.168.2.1:80 -s rr
  # ipvsadm -a -t 192.168.2.1:80 -r 192.168.2.7:80 -g
  # ipvsadm -a -t 192.168.2.1:80 -r 192.168.2.8:80 -g
  # ipvsadm -l
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port         Forward Weight ActiveConn InActConn
  TCP192.168.2.1:http rr
  -> 192.168.2.7:http             Route   1      0          0
  -> 192.168.2.8:http             Route   1      0          0
  # service ipvsadm save
  ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      
  

  

  使用DR时后方的real server是不能做端口重定向的
  # vim /etc/sysctl.conf
http://s3.运维网.com/wyfs02/M00/22/9E/wKiom1MhgdWRtjFTAAAlHaoDX1o507.jpg
  

  # sysctl -p
  net.ipv4.ip_forward = 1
  net.ipv4.conf.default.rp_filter = 1
  net.ipv4.conf.default.accept_source_route = 0
  kernel.sysrq = 0
  kernel.core_uses_pid = 1
  net.ipv4.tcp_syncookies = 1
  error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
  error: "net.bridge.bridge-nf-call-iptables" is an unknown key
  error: "net.bridge.bridge-nf-call-arptables" is an unknown key
  kernel.msgmnb = 65536
  kernel.msgmax = 65536
  kernel.shmmax = 4294967295
  kernel.shmall = 268435456
  net.ipv4.conf.all.arp_announce = 2
  net.ipv4.conf.all.arp_ignore = 1
  

http://s3.运维网.com/wyfs02/M02/22/9E/wKiom1MhgdjBbjM4AABvkxvM4RQ726.jpg
http://s3.运维网.com/wyfs02/M00/22/9E/wKiom1MhgdqjuQAMAAAOx7vMVkc350.jpg
  web1的网卡配置
  

http://s3.运维网.com/wyfs02/M02/22/9F/wKioL1MhgbSiKjfrAABYupQMJgM858.jpg
  web服务器的lo:0虚拟接口,用于接收direct传来的信息
http://s3.运维网.com/wyfs02/M01/22/9E/wKiom1MhgdvSJKZRAABm82VmAIE257.jpg
  direct上的网卡eth0网卡配置
  

http://s3.运维网.com/wyfs02/M01/22/A5/wKioL1MiiaeRhB6mAABgiTGLeKk745.jpg
  同样的要配置lo:0接口
http://s3.运维网.com/wyfs02/M01/22/9E/wKiom1MhgdvSJKZRAABm82VmAIE257.jpg
  web2的网卡配置信息,也需要同样的lo:0配置
  

http://s3.运维网.com/wyfs02/M02/22/A5/wKioL1MiiaeyGXr8AABhmvmEsOA019.jpg
  在虚拟机的实验环境下注意可以将他们都设为仅主机模式,但必须要保证他们之间的通信,如图
http://s3.运维网.com/wyfs02/M00/22/9F/wKioL1MhgbbQo8xjAAEXvgDfeME634.jpg
  direct上的ipvsadm配置步骤
  

http://s3.运维网.com/wyfs02/M02/22/9E/wKiom1Mhgd3TtIW7AACCWP9O3eQ147.jpg
  

http://s3.运维网.com/wyfs02/M01/22/9F/wKioL1MhgbfgIAjYAAArgF86F_0027.jpg
http://s3.运维网.com/wyfs02/M00/22/9E/wKiom1Mhgd6AvhIjAABXMpdv4_g014.jpg
  

  打开浏览器进行测试,注意关闭web及direct的selinux和防火墙设置
http://s3.运维网.com/wyfs02/M02/22/9F/wKioL1MhgbfQwithAAAsA73VdzE408.jpg
  

http://s3.运维网.com/wyfs02/M01/22/9E/wKiom1Mhgd7zpWIyAAAnHUcwItg423.jpg
  配置后参数
  # sysctl -p
  net.ipv4.ip_forward = 1
  net.ipv4.conf.default.rp_filter = 1
  net.ipv4.conf.default.accept_source_route = 0
  kernel.sysrq = 0
  kernel.core_uses_pid = 1
  net.ipv4.tcp_syncookies = 1
  error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
  error: "net.bridge.bridge-nf-call-iptables" is an unknown key
  error: "net.bridge.bridge-nf-call-arptables" is an unknown key
  kernel.msgmnb = 65536
  kernel.msgmax = 65536
  kernel.shmmax = 4294967295
  kernel.shmall = 268435456
  net.ipv4.conf.all.arp_announce = 2
  net.ipv4.conf.all.arp_ignore = 1
  

  

  在使用DR时后方的real server的VIP配置,不能在eth0网卡上,因为一旦屏蔽,不仅VIP被屏蔽,rip也会被屏蔽掉,所以我们可以把VIP的地址配置在lo接口的别名接口(lo:0)上
  

  arp_announce : INTEGER
  默认为0
  对网络接口上本地IP地址发出的ARP回应作出相应级别的限制:
  确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口

  0 - (默认) 在任意网络接口上的任何本地地址

  1 -尽量避免不在该网络接口子网段的本地地址. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.

  2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址.

  如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送

  all/ 和{interface}/ 下两者同时比较,取较大一个值生效.

  提高约束级别有益于从指定的目标接受应答,而降低级别可以给予更多的arp查询者以反馈信息(关于arp代理这一段我普遍翻译地不好,去啃一下tcp/ip bible的卷一,然后再翻译吧)

  arp_ignore : INTEGER

  默认为0

  定义对目标地址为本地IP的ARP询问不同的应答模式

  0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求(比如eth0=192.168.0.1/24,eth1=10.1.1.1/24,那么即使eth0收到来自10.1.1.2这样地址发起的对10.1.1.1 的arp查询也会回应--而原本这个请求该是出现在eth1上,也该有eth1回应的)
  

  1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求(比如
  eth0=192.168.0.1/24,eth1=10.1.1.1/24,那么即使eth0收到来自10.1.1.2这样地址发起的对

  192.168.0.1的查询会回答,而对10.1.1.1 的arp查询不会回应)

  

  2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内(比如eth0=192.168.0.1/24,eth1=10.1.1.1/24,eth1收到来自10.1.1.2这样地址发起的对192.168.0.1的
  

  查询不会回答,而对192.168.0.2发起的对192.168.0.1的arp查询会回应)
  

  3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应(do not reply for local
  addresses configured with scope host,only resolutions for global and link addresses are

  replied 翻译地似乎不好,这个我的去问问人)

  

  4-7 - 保留未使用
  

  8 -不回应所有(本地地址)的arp查询
  

  all/ 和{interface}/ 下两者同时比较,取较大一个值生效.
  




页: [1]
查看完整版本: LVS的DR模型