leonheart 发表于 2019-1-6 08:47:24

lvs DR模式负载均衡实操

  ps:做 dr 模式 之前,先把之前做过的操作清空掉
  1、ipvsadm -ln 查看规则
  2、ipvsadm -C 清空规则
  3、ipvsadm -ln 确认
  4、iptables -t nat -F: 清空iptables的nat规则
  5、master和slave把网卡所对应的网关(GATEWAY)改回来
  vim /etc/sysconfig/network-scripts/ifcfg-ens33
  6、dr用不到ens37这个网卡(192.168.56.128)
  ifdown ens37
  # ipvsadm -ln
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port         Forward Weight ActiveConn InActConn
  TCP192.168.0.133:80 rr
  -> 192.168.0.134:80             Route   1      0          4         
  -> 192.168.0.140:80             Route   1      0          4      
  # ipvsadm -C      //清空规则
  # ipvsadm -ln      //确认是否清空
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port         Forward Weight ActiveConn InActConn
  # iptables -t nat -F    //清空iptables的nat规则
  5、master和slave把网卡所对应的网关(GATEWAY)改回来
  vim /etc/sysconfig/network-scripts/ifcfg-ens33
  # vim /etc/sysconfig/network-scripts/ifcfg-ens33
  # systemctl restart network
  # vim /etc/sysconfig/network-scripts/ifcfg-ens33
  # systemctl restart network
  一、DR模式 VSNAT 模式
  缺点:比较浪费公网ip,每一个rs都必须要有一个独立的公网 ip
  优点:用户的请求直接吐给客户端,不借助于分发器dir
  
  实验环境:
  (1)lvs_dir:192.168.0.139
  (2)master:192.168.0.134
  (3)slave:192.168.0.140
  都看成对外的公网 ip
     另外,
     (a)还需要一个虚拟ip(192.168.0.133)
     (b)测试机器:192.168.0.130
  二、分发器 dir 设置
  1、编辑脚本
  vim/usr/local/sbin/lvs_dr.sh
  #打开端口转发
  echo 1 > /proc/sys/net/ipv4/ip_forward
  ipv=/sbin/ipvsadm
  vip=192.168.0.133
  dengserver1=192.168.0.134
  dengserver2=192.168.0.140
  ifconfig ens33:0 $vip broadcast $vip netmask 255.255.255.255 up
  #增加一条路由
  route add -host $vip dev ens33:0
  $ipv -C
  $ipv -A -t $vip:80 -s rr
  $ipv -a -t $vip:80 -r $dengserver2:80 -g -w 1
  $ipv -a -t $vip:80 -r $dengserver1:80 -g -w 1
  参数说明:
  -g:表示 dr 模式
  -m:表示 nat 模式
  2、执行脚本 sh !$
  3、ipvsadm -ln多出一个vip 192.168.0.133
  # ipvsadm -ln
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port         Forward Weight ActiveConn InActConn
  TCP192.168.0.133:80 rr
  -> 192.168.0.134:80             Route   1      0          0         
  -> 192.168.0.140:80             Route   1      0          0   
  
  三、真实服务器 real server 设置
  1、rs1,rs2都写脚本: vim /usr/local/sbin/lvs_rs.sh
  (1)配置vip,绑定的网卡不是eth0,而是在回环地址 lo 上
  (2)增加路由,调整arp相关的内核参数
  写入:
  #!/bin/bash
  vip=192.168.0.133
  ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
  route add -host $vip lo:0
  #调整内核参数
  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
  调整arp内核参数的意义:
  百度:
  (a)ARP广播会产生的问题
  
  当客户端发起访问VIP 对应的域名的请求(curl 192.168.131.100)时,根据网络通信原理会产生ARP 广播,因为负载均衡器dir和真实的服务器rs在同一网络并且VIP设置在集群中的每个节点上,此时集群内的真实服务器会尝试回答来自客户端计算机的查找VIP的ARP广播,这就会产生问题,大家都说我是"VIP"。
  
  (b)为了达到负载均衡的目的,必须想法办让真实服务器忽略来自客户端计算机的ARP广播请求 ——》 调整arp内核参数
  
  问题:lvs有vip,real server也有vip,但client请求只访问lvs的vip?
   ——》 在所有real server上要关闭所有arp请求,导致不能响应client发出的arp请求(相当于哑巴),只有lvs可以响应,这样请求就会传到lvs的vip中,这就是为什么要禁止real server 的 arp请求和响应
  
  
  ##############################
  
  2、rs1,rs2执行脚本: sh/usr/local/sbin/lvs_rs.sh
  
  四、测试
  1、浏览器访问vip :192.168.0.133 ——》 不精准(刷新无数次都是master,然后等一段时间,刷新无数次也是slave = =,所以才说不精准咯~~)
  2、在另外一台linux服务器上进行测试:
  # curl 192.168.0.133
  this is master server
  # curl 192.168.0.133
  this is slave server
  # curl 192.168.0.133
  this is master server
  # curl 192.168.0.133
  this is slave server
  # curl 192.168.0.133
  this is master server
  # curl 192.168.0.133
  this is slave server
  

  




页: [1]
查看完整版本: lvs DR模式负载均衡实操