• Linux 负载均衡介绍之LVS工作模式-DR直接路由模式


    Linux 负载均衡介绍之LVS工作模式-DR直接路由模式

    图示:
    在这里插入图片描述
    工作原理:
    ①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

    ②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己DIP的MAC地址,目标MAC改为了RIP的MAC地址,并将此包发送给RS。

    ③.RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。

    特点:
    1,集群节点和director必须在一个物理网络内
    2,RIP可以使用公网地址或私有地址
    3,director仅处理入站请求,director服务器的压力比较小
    4,集群节点网关不指向director,故出站不经过director
    5,不支持端口映射
    6,大多数操作系统可以作为realserver,要支持隔离arp广播

    ARP问题:
    通常,DR模式需要在Real-server上配置VIP,配置的方式为:
    /sbin/ifconfig lo:0 inet VIP netmask 255.255.255.255

    i) 原因在于,当LVS把client的包转发给Real-server时,因为包的目的IP地址是VIP,那么如果Real-server收到这个包后,发现包的目的IP不是自己的系统IP,那么就会认为这个包不是发给自己的,就会丢弃这个包,所以需要将这个IP地址绑到网卡上;当发送应答包给client时,Real-server就会把包的源和目的地址调换,直接回复给client。

    ii) 关于ARP广播:

    • 上面绑定VIP的掩码是”255.255.255.255″,说明广播地址是其本身,那么他就不会将ARP发送到实际的自己该属于的广播域了,这样防止与LVS上VIP冲突,而导致IP冲突。
    • 另外在Linux的Real-server上,需要设置ARP的sysctl选项:

    LVS-DR案例:
    环境:

    192.168.0.106  client   windown7
    192.168.0.124  dr1    负载均衡器      虚拟IP地址:192.168.0.123
    192.168.0.120  rs1     web1			虚拟IP地址:192.168.0.123
    192.168.0.121  rs2     web2			虚拟IP地址:192.168.0.123
    
    • 1
    • 2
    • 3
    • 4

    步骤:
    1.LVS准备VIP和路由
    添加VIP

    ifconfig ens32:0 192.168.0.123 broadcast 192.168.0.255 netmask 255.255.255.0 up
    route add -host 192.168.0.123 dev ens32:0
    
    • 1
    • 2

    注意:VIP与RIP要配到同一个网卡上

    设置路由转发
    服务器不是一台路由器,那么它不会发送重定向,所以可以关闭该功能

    # vi /etc/sysctl.conf
    net.ipv4.ip_forward = 1								开启路由功能
    net.ipv4.conf.all.send_redirects = 0				禁止转发重定向报文
    net.ipv4.conf.ens32.send_redirects = 0				禁止ens32转发重定向报文
    net.ipv4.conf.default.send_redirects = 0			禁止转发默认重定向报文
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.LVS设置负载均衡条目
    设置IPVSADM

    yum install ipvsadm  -y
    ipvsadm -C (-C   Clear the virtual server table.清除配置)
    ipvsadm -A -t 192.168.0.123:80 -s rr
    ipvsadm -a -t 192.168.0.123:80 -r 192.168.0.120:80 -g
    ipvsadm -a -t 192.168.0.123:80 -r 192.168.0.121:80 -g
    
    • 1
    • 2
    • 3
    • 4
    • 5

    参数说明

    -A 添加virtual server
    -t 指定使用tcp协议
    -s 指定调度策略为rr
    -a 添加realserver
    -r 指定realserver是谁
    -g    LVS类型DR
    	   LVS类型:
    	      -g:Gateway,DR(默认使用的类型)
    	      -i:ipip,TUN
    	      -m:masquerade(地址伪装),NAT
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3.LVS让配置永久生效:

    # ipvsadm-save > /etc/sysconfig/ipvsadm
    # systemctl enable ipvsadm
    
    • 1
    • 2

    4.两个web上部署web服务

    安装web服务
    	#yum install nginx  -y
    修改主页内容
    	# vim /usr/share/nginx/html/index.html
    启动服务:
    	    #systemctl start nginx
    	    #systemctl enable nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 给两个web服务器的lo网卡设置子网掩码为32位vip
    rs1:
        # ifconfig lo:0 192.168.0.123/32  
    rs2:
        # ifconfig lo:0 192.168.0.123/32 
    
    • 1
    • 2
    • 3
    • 4

    6.给两个web服务器设置内核参数

    忽略arp响应 ,不允许收
    # echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    为了让vip发包出去,但允许发
    # echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce  
    
    • 1
    • 2
    • 3
    • 4

    7.客户端测试
    ipvsadm状态测试

    [root@localhost ~]# ipvsadm -Lnc
    IPVS connection entries
    pro expire state       source             virtual            destination
    TCP 00:16  SYN_RECV    192.168.0.106:63429 192.168.0.123:80   192.168.0.121:80
    
    • 1
    • 2
    • 3
    • 4

    8.命令解释大全(略)
    1. 管理虚拟服务

    添加一个虚拟服务192.168.1.100:80,使用轮询算法
      ipvsadm -A -t 192.168.1.100:80 -s rr
    修改虚拟服务的算法为加权轮询
      ipvsadm -E -t 192.168.1.100:80 -s wrr
    删除虚拟服务
      ipvsadm -D -t 192.168.1.100:80
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    2. 管理真实服务
    
    • 1
    添加一个真实服务器192.168.1.123,使用DR模式,权重2
      ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.123 -g -w 2
    增加真实服务器的权重
      ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.123 -g -w 5
    修改真实服务器的权重
      ipvsadm -e -t 192.168.1.100:80 -r 192.168.1.123 -g -w 5
    删除真实服务器
      ipvsadm -d -t 192.168.1.100:80 -r 192.168.1.123
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    3. 查看统计
    
    • 1
    查看当前配置的虚拟服务和各个RS的权重
      ipvsadm -Ln
    查看当前ipvs模块中记录的连接(可用于观察转发情况)
      ipvsadm -lnc
    查看ipvs模块的转发情况统计
      ipvsadm -Ln --stats  --rate
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    9.脚本配置方法
    VS调度器配置

    #!/bin/bash
    vip='172.18.0.100'
    iface='eth0:1'
    mask='255.255.255.255'
    port='80'
    rs1='10.10.0.72'
    rs2='10.10.0.73'
    scheduler='wrr'
    type='-g'
    case $1 in
    start)
        ifconfig $iface $vip netmask $mask broadcast $vip up
        iptables -F
        ipvsadm -A -t ${vip}:${port} -s $scheduler
        ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1
        ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 1
        echo "The VS Server is Ready!"
        ;;
    stop)
        ipvsadm -C
        ifconfig $iface down
        echo "The VS Server is Canceled!"
        ;;
    *)
        echo "Usage: $(basename $0) start|stop"
        exit 1
        ;;
    esac
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    RS服务器配置

    #!/bin/bash
    vip=172.18.68.100
    mask='255.255.255.255'
    dev=lo:1
    case $1 in
    start)
        echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
        echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
        ifconfig $dev $vip netmask $mask broadcast $vip up
        route add -host $vip dev $dev
        echo "The RS Server is Ready!"
        ;;
    stop)
        ifconfig $dev down
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore3
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo "The RS Server is Canceled!"
        ;;
    *) 
        echo "Usage: $(basename $0) start|stop"
        exit 1
        ;;
    esac
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
  • 相关阅读:
    lvgl 页面管理器
    基于Python的大区域SPI标准降水指数自动批量化处理
    PyTorch Conv2d 前向传递中发生了什么?
    Apache安装教程
    使用MySQL Workbench进行数据库创建
    Apollo Planning规划算法仿真调试(11):速度规划ComputeSTBoundary
    Git 命令行查看仓库信息
    Application of the Radical Method in Solving Indeterminate Equations(Groups)
    Julia两天极速入门学习笔记
    Linux系统(Centos 7.4)配置与管理DNS服务器复习题
  • 原文地址:https://blog.csdn.net/yyf0430/article/details/128208172