zoukankan      html  css  js  c++  java
  • lvs dr 模式请求过程

    一、 lvs dr 模式请求过程

    1、整个请求过程如下:

    client在发起请求之前,会发一个arp广播的包,在网络中找“谁是vip”,由于所有的服务器,lvs和rs都有vip,为了让client的请求送到lvs上,所以必须让rs不能响应client发出的arp请求,(这也是为什么要禁止rs上arp的请求和响应)下面就是lvs转发的事情了:

        1)client向目标vip发送请求,lvs接收;此时ip包和数据信息如下:

    src macdst macsrc ipdst ip
    00:0c:29:f3:1f:de 00:0c:29:50:d5:63 192.168.188.111 192.168.188.120

        2)lvs根据负载均衡的算法,选择一台realserver,然后把realserver1的mac地址作为目的mac地址,发送到局域网中

    src macdst macsrc ipdst ip
    00:0c:29:50:d5:63 00:0c:29:e4:4d:1f 192.168.188.111 192.168.188.120

        3)realserver1在局域网中收到这个请求以后,发现目的ip和本地匹配,于是进行处理,处理完成以后,直接把源ip和目的ip直接对调,然后经过网关直接返回给用户;

    src macdst macsrc ipdst ip
    00:0c:29:e4:4d:1f 00:0c:29:f3:1f:de 192.168.188.120 192.168.188.111

    2、 抓包分析验证

    1)lvs 转发到 realeserver

    lvs_dr 负载均衡模式分析

    从抓包中可以看到,客户端发送请求给 lvs,lvs 马上就会将请求转发给后端的 rs2 (mac 地址: 00:0c:29:2c:a5:a0);

    2)realserver 直接会应客户端数据

    lvs_dr 负载均衡模式分析
    从抓到的数据包分析,rs2 处理请求后,直接就把数据发回给客户端了。源ip 是 vip,目标ip 是客户端的ip。

    二、重要的补充,关于arp 抑制

    lvs dr 模式中,lvs 和 rs 处于同一个网络中,而且他们都配置相同的 vip。所以,当客户端要向vip 发送网络请求的时候,它会先在整个网络广播一条 arp 请求,询问 vip 对应的mac 地址是什么。arp 广播有可能被lvs 响应,也有可能被realeserver 响应。如果这条请求 vip 的广播被realeserver 服务器响应了,那么客户端的 arp 缓存表就记录了vip 的mac 地址是realserver 的了。这样会导致客户端直接可以将数据请求发送到realserser ,lvs 的负载均衡作用就完全失效,其他的realserver 服务器也不会被请求。

    由于存在以上的问题,lvs dr 模式的架构中,需要将realserver 的arp 协议响应和宣告功能进行限制。具体来说就是在 rs 里的 lvs_rs.sh 配置脚本的以下几条操作:

    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

    说明:

    1) arp_ignore =1

    作用就是,限制rs 对arp 广播的响应。当 arp 请求的目的 ip 是本机的网络入口设备的ip 时才响应。所以,当arp_ignore设为1后,rs 对网络中询问vip 的 arp 广播包都不再响应。因为rs 的vip 设置在lo:0 虚拟网卡上,不是rs这台机器的网络流入设备。

    2)arp_announce = 2

    作用就是,限制rs 在对外宣告arp 广播时所使用的源ip 地址。因为,rs 要直接返回客户的请求数据。我们从本文的第6节抓包分析里,就知道rs 需要知道客户机的mac地址,数据包才能发送到网络中,且能准确找到客户机的网卡。
    rs 在广播arp 请求时,默认如果arp_announce=0时,发出请求的ip是什么,arp 请求里的源ip就应该是什么。即如果arp_announce=0,那么rs 的arp 广播的源ip 就会是vip。当rs 发出这个源ip是vip ,源mac地址是 eth0 的请求包后,客户机就会更新自己的arp 缓存表里vip 的mac 地址,这样之前记录的lvs 的mac 地址就失效了。

    所以,需要将 arp_announce设置为2。这样,rs 发出arp 广播请求查询客户机的mac地址时,它的arp 报文里使用的源ip 就会选择出口设备,也就是eth0 的mac 地址。当客户机收到rs 的这个arp 请求时,就会回应自己mac 地址。这样,客户机也不会更新自己arp 缓存表里的vip 的mac地址。

    arp 协议有一个特点,它不会记住自己询问过的ip地址和mac主机。所以,当有接收到新的arp广播请求,如果发现有新的mac 地址,他就会更新。而不会验证发送方是不是自己曾经询问过的ip 。这个缺陷也引起了arp ***,就是我们常说的arp 欺骗。有些中间代理机器,不断地发arp 请求,让你的机器arp 缓存表里的mac 地址混乱。

    三、 总结

    在lvs dr 模式中,通过抓包理解请求发送的流转方向,清晰地理解为什么lvs 调度器不会成为网络性能的瓶颈。在理解arp 抑制时,理解arp_ignore 和 arp_announce 两个参数的作用,最为重要。

  • 相关阅读:
    Java 基础知识总结
    AppScan-文件参数Shell命令注入
    AndroidKiller-下载使用
    代码技巧之常用快捷键的整理
    z-index的特点
    定位元素的异同点
    定位之固定定位
    定位之相对定位
    clear的值和特点及伪元素before和after的使用
    如何让元素消失在我们的视野中(面试题)
  • 原文地址:https://www.cnblogs.com/wuhg/p/9640774.html
Copyright © 2011-2022 走看看