zoukankan      html  css  js  c++  java
  • LVS单机测试不负载

    LVS单机测试不负载

    1、困惑

    当我们在个人PC上搭建虚拟机(Vmware)做LVS负载实验的时候,我们不论是在个人浏览器或者其他虚拟机上访问LVSVIP都会出现上时间刷新都出现同一个页面的情况。

    那么这种情况是我们的配置错误还是虚拟机的原因呢。

    2、环境

    下面简单交待下虚拟的环境:

    服务器名称

    IP以及内容

    LB02

    10.0.0.6 VIP:10.0.0.3

    WEB01

    10.0.0.8 VIP:10.0.0.3

    页面内容 yangliheng

    WEB01

    10.0.0.9 VIP:10.0.0.3

    页面内容 yyyy

     

    LVS的配置以及WEB的配置的常规配置我们就省略了。

    重点说下抑制ARP的配置;

    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

    这些配置的作用就是在与确保上端路由设备去访问VIP的时候能得到唯一的MAC地址。

    arp_ignore = 1即不回应不是目标IP是物理网络IPARP请求。确保了客户端请求VIP的时候只会得到LBMAC地址。

    arp_announce = 2RS在回复客户端的时候,发送的ARP请求不以自己的VIP的为源IP,确保了不会更新上端路由的ARP缓存,从而保证以后客户端请求VIP的时候读取路由器ARP缓存会得到LBMAC地址。

    3、初步测试

    当我们在另一台虚拟机上测试LVS的负载均衡的时候

    [root@lb01 ~]# curl 10.0.0.3

    yangliheng

    [root@lb01 ~]# curl 10.0.0.3

    yangliheng

    [root@lb01 ~]# curl 10.0.0.3

    yangliheng

    [root@lb01 ~]# curl 10.0.0.3

    yangliheng

    [root@lb01 ~]# curl 10.0.0.3

    yangliheng

    [root@lb01 ~]# curl 10.0.0.3

    yangliheng

    可以看到不论刷新多少次都是这个内容(WEB01的)

    我们在这个虚拟机上

    [root@lb01 ~]# arp -n

    Address                  HWtype  HWaddress           Flags Mask            Iface

    10.0.0.3                 ether   00:0c:29:f4:80:e8   C                     eth0

    这是查看10.0.0.3对应的MAC地址,正常来说10.0.0.3应该对应LB02上的MAC地址但是我们分别查看LB02WEB01MAC地址

     

    [root@lb02 ~]# ifconfig

    eth0Link encap:Ethernet  HWaddr 00:0C:29:3E:C2:E0 

    inet addr:10.0.0.6Bcast:10.0.0.255Mask:255.255.255.0

              inet6 addr: fe80::20c:29ff:fe3e:c2e0/64 Scope:Link

    UP BROADCAST RUNNING MULTICASTMTU:1500  Metric:1

    RX packets:46221 errors:0 dropped:0 overruns:0 frame:0

    TX packets:16725 errors:0 dropped:0 overruns:0 carrier:0

              collisions:0 txqueuelen:1000

    RX bytes:9061863 (8.6 MiB)  TX bytes:1574822 (1.5 MiB)

     

    eth0:0Link encap:Ethernet  HWaddr 00:0C:29:3E:C2:E0 

    inet addr:10.0.0.3Bcast:0.0.0.0  Mask:255.255.255.0

     

    [root@web01 ~]# ifconfig

    eth0Link encap:Ethernet  HWaddr 00:0C:29:F4:80:E8 

    inet addr:10.0.0.8Bcast:10.0.0.255Mask:255.255.255.0

    inet6 addr: fe80::20c:29ff:fef4:80e8/64 Scope:Link

    UP BROADCAST RUNNING MULTICASTMTU:1500  Metric:1

              RX packets:12579 errors:0 dropped:0 overruns:0 frame:0

    TX packets:9604 errors:0 dropped:0 overruns:0 carrier:0

    collisions:0 txqueuelen:1000

    RX bytes:1727749 (1.6 MiB)  TX bytes:1840750 (1.7 MiB)

     

    eth0:0Link encap:Ethernet  HWaddr 00:0C:29:F4:80:E8 

    inet addr:10.0.0.3Bcast:0.0.0.0Mask:255.255.255.255

    UP BROADCAST RUNNING MULTICASTMTU:1500  Metric:1

    发现10.0.0.3对应的是WEB01上的MAC地址,即下次访问10.0.0.3的时候不会经过负载而是直接去访问WEB01,所以就不会有负载均衡的效果了。

    上述是在LINUX客户端的测试,那么我们在我们的PC浏览器上测试的时候也会出现这个问题

    多次访问都是同一个内容。

    那么我们怀疑也有可能是ARP缓存的问题,我们来验证一下。

    首先清空电脑的ARP缓存 arp –d

    然后在浏览器访问10.0.0.3

    得到的是

    然后在CMD查看ARP缓存

    发现了10.0.0.3对应的MAC地址,我们在虚拟机上查看发现这个MAC地址是WEB02MAC地址,所以他以后访问VIP的时候都是直接访问WEB02

    4、正确测试

    那么如何正确测试

    1、LINUX客户端上

    测试前先情况ARP缓存。

    [root@lb01 ~]# arp -d 10.0.0.3 ; curl 10.0.0.3

    yyyy

    [root@lb01 ~]# arp -d 10.0.0.3 ; curl 10.0.0.3

    yangliheng

    [root@lb01 ~]# arp -d 10.0.0.3 ; curl 10.0.0.3

    yangliheng

    [root@lb01 ~]# arp -d 10.0.0.3 ; curl 10.0.0.3

    yyyy

    [root@lb01 ~]# arp -d 10.0.0.3 ; curl 10.0.0.3

    yyyy

    [root@lb01 ~]# arp -d 10.0.0.3 ; curl 10.0.0.3

    yangliheng

    2、在浏览器上

    同理,刷新浏览器页面前现在CMD中清空ARP缓存。

    5、为什么

    那么为什么会出现这种情况,会影响到我们的生产环境吗?

    答案是不会,在生产环境中。

    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正常

    包括2个方面:不响应ARP请求,RSARP请求不会让上端路由器更新)

    那么由于我们是在个人的电脑上去模拟这个LVS的环境,所以有些参数不会生效,比如arp_announce,所以还是会更新ARP缓存,从而得不到负载的效果。

    这个原因可能是因为不论是LINUX客户端还是PC 上虚拟出来的路由,并不是真实的路由器,所以不支持这个参数吧。





  • 相关阅读:
    (多行)省略号隐藏超出范围的文本
    JSON.parse()和JSON.stringify()
    如何获取每个input的值
    禁止文字被选中
    javasctipt数据类型转换
    jq实现伸缩二级菜单
    table-layout 表格宽度不随文字改变
    VNC安装和配置
    HTML超连接的使用
    HTML图像标记
  • 原文地址:https://www.cnblogs.com/yangliheng/p/5692081.html
Copyright © 2011-2022 走看看