• lvs的dr模式分析(二)


     
    #vim /etc/init.d/lvsdrrip
    #!/bin/bash
    #DR server
    VIP=192.168.46.200
    case "$1" in
    start)
    echo "start LVS of DR"
    /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
    /sbin/route add  -host  $VIP dev 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
    ;;
    stop)
    echo "stop LVS of DR"
    /sbin/ifconfig lo:0 down
    echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
    ;;
    *)
    echo "Usage:$0 {start|stop}"
    esac
    exit 1

    注:DR模式VIP必须跟服务器同一网段

    echo"1";echo"2"是为了抑制arp广播作用

    #chmodo+x/etc/init.d/lvsdr

    #servicelvsdrripstart

    六,关于lvs的dr模式的一些疑问

    1.LVS/DR如何处理请求报文的,会修改IP包内容吗?

    1.1vs/dr本身不会关心IP层以上的信息,即使是端口号也是tcp/ip协议栈去判断是否正确,vs/dr本身主要做这么几个事:

    1)接收client的请求,根据你设定的负载均衡算法选取一台realserver的ip;

    2)以选取的这个ip对应的mac地址作为目标mac,然后重新将IP包封装成帧转发给这台RS;

    3)在hashtable中记录连接信息。

    vs/dr做的事情很少,也很简单,所以它的效率很高,不比硬件负载均衡设备差多少。

    数据包、数据帧的大致流向是这样的:client-->VS-->RS-->client

    1.2前面已作了回答,vs/dr不会修改IP包的内容.

    2.RealServer为什么要在lo接口上配置VIP?在出口网卡上配置VIP可以吗?

    2.1既然要让RS能够处理目标地址为vip的IP包,首先必须要让RS能接收到这个包。

    在lo上配置vip能够完成接收包并将结果返回client。

    2.2答案是不可以将VIP设置在出口网卡上,否则会响应客户端的arprequest,造成client/gatewayarptable紊乱,以至于整个loadbalance都不能正常工作。

    3.RealServer为什么要抑制arp帧?

    什么是arp

    我们知道,当我们在浏览器里面输入网址时,DNS服务器会自动把它解析为IP地址,浏览器实际上查找的是IP地址而不是网址。那么IP地址是如何转换为第二层物理地址(即MAC地址)的呢?在局域网中,这是通过ARP协议来完成的。ARP协议对网络安全具有重要的意义。通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞。所以网管们应深入理解ARP协议。

    一、什么是ARP协议

    ARP协议是“AddressResolutionProtocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。

    二、ARP协议的工作原理
    在每台安装有TCP/IP协议的电脑里都有一个ARP缓存表,表里的IP地址与MAC地址是一一对应的,如附表所示。

    附表

    我们以主机A(192.168.1.5)向主机B(192.168.1.1)发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址,直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播,目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.1.1的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应:“192.168.1.1的MAC地址是00-aa-00-62-c6-09”。这样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了。同时它还更新了自己的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可以了。ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。

    三、如何查看ARP缓存表

    ARP缓存表是可以查看的,也可以添加和修改。在命令提示符下,输入“arp-a”就可以查看ARP缓存表中的内容了,如附图所示。

    用“arp-d”命令可以删除ARP表中某一行的内容;用“arp-s”可以手动在ARP表中指定IP地址与MAC地址的对应。

    这个问题在上一问题中已经作了说明,这里结合实施命令进一步阐述。我们在具体实施部署的时候都会作如下调整:

    echo"1">/proc/sys/net/ipv4/conf/lo/arp_ignoreecho"2">/proc/sys/net/ipv4/conf/lo/arp_announceecho"1">/proc/sys/net/ipv4/conf/all/arp_ignoreecho"2">/proc/sys/net/ipv4/conf/all/arp_announce

    我相信很多人都不会弄懂它们的作用是什么,只知道一定得有。我这里也不打算拿出来详细讨论,只是作几点说明,就当是补充吧。

    3.1

    echo"1">/proc/sys/net/ipv4/conf/lo/arp_ignoreecho"2">/proc/sys/net/ipv4/conf/lo/arp_announce

    这两条是可以不用的,因为arp对逻辑接口没有意义。

    3.2如果你的RS的外部网络接口是eth0,那么

    echo"1">/proc/sys/net/ipv4/conf/all/arp_ignoreecho"2">/proc/sys/net/ipv4/conf/all/arp_announce

    其实真正要执行的是:

    echo"1">/proc/sys/net/ipv4/conf/eth0/arp_ignoreecho"2">/proc/sys/net/ipv4/conf/eth0/arp_announce

    所以我个人建议把上面两条也加到你的脚本里去,因为万一系统里上面两条默认的值不是0,那有可能是会出问题滴。

    arp_ignore:

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

    0-(默认值):回应任何网络接口上对任何本地IP地址的arp查询请求

    1-只回答目标IP地址是来访网络接口本地地址的ARP查询请求

    2-只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内

    3-不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应

    4-7-保留未使用

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

    确定了向外发送ARP请求的发出地址也即使VIP地址

    arp_announce-INTEGER

    对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制:

    确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口

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

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

    2-对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址.如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.

    限制了使用本地的vip地址作为优先的网络接口

    4.LVS/DRloadbalancer(director)与RS为什么要在同一网段中?

    从第一个问题中大家应该明白vs/dr是如何将请求转发给RS的了吧?它是在数据链路层来实现的,所以director必须和RS在同一网段里面。

    5.为什么director上eth0接口除了VIP另外还要配一个ip(即DIP)?

    5.1如果是用了keepalived等工具做HA或者LoadBalance,则在健康检查时需要用到DIP。

    5.2没有健康检查机制的HA或者LoadBalance则没有存在的实际意义。

    6.LVS/DRip_forward需要开启吗?

    不需要。因为director跟realserver是同一个网段,无需开启转发。

    7.director的vip的netmask一定要是255.255.255.255吗?

    lvs/dr里,director的vip的netmask没必要设置为255.255.255.255,也不需要再去

    routeadd-host$VIPdeveth0:0

     

    director的vip本来就是要像正常的ip地址一样对外通告的,不要搞得这么特殊.

  • 相关阅读:
    spring(1)
    mybatis(7)自定义结果集(一对多/多对一)
    延迟加载
    《构建之法》阅读笔记03
    http socket
    转换
    .net后台通过xmlhttp 和远程服务通讯
    XMLHttpRequest介绍
    js 贪吃蛇
    触发器
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/6185567.html
Copyright © 2020-2023  润新知