• LVS负载均衡-DR模式


    一、简介

    1、理论已经在上一篇博客简述,不了解得可以看看 https://www.cnblogs.com/zhangxingeng/p/10497279.html 

    2、LVS-DR优缺点   #参考博客:https://www.cnblogs.com/zhangxingeng/p/10573695.html

    关于这种模式:

          1)确保前端路由器将目标ip为vip的请求报文发往director
            a、在前端网关做静态绑定;
            b、在RS上使用arptables;
            c、在RS上修改内核参数以限制arp通告即应答级别;
              arp_announce
              arp_ignore
          2)、RS的RIP可以使用私网或公网地址;
          3)、RS跟director在同一物理网络;
          4)、请求报文经由director,响应报文直接发往client;
          5)、此模式不支持端口映射;
          6)、RS支持大多数的OS;
          7)、RIP的网关不能指向DIP,以确保响应报文不经由director;
    LVS_DR模式介绍      

    缺点:LVS调度器及应用服务器在同一个网段中,因此不能实现集群的跨网段应用。
    优点:直接路由转发,通过修改请求报文的目标mac地址进行转发,效率提升明显。

    3、实验拓扑

    LVS相关术语
    1. DS:Director Server。指的是前端负载均衡器节点(eg:lvs调度节点)。
    2. RS:Real Server。后端真实的工作服务器(eg:web01,web02)。
    3. VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址(lvs调度节点 和 web节点都要配置)。
    4. DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
    5. RIP:Real Server IP,后端服务器的IP地址。
    6. CIP:Client IP,访问客户端的IP地址。

     

    实验说明:测试环境为服务器,准备三台即可,这里是4台外加本机物理机

    节点 ip 应用 ip2 备注
    director 10.192.27.100(DIP) director VIP:em1:0,10.192.27.115  
    web01 10.192.27.111(RIP) rs VIP:Lo:0,10.192.27.115  
    web02 10.192.27.112(RIP) rs VIP:Lo:0,10.192.27.115  
    本网段测试 10.192.27.80 client   curl
    本地电脑测试 公网 client   web访问

        

    二、开始部署

    1、网络配置

    修改服务器网卡rip、vip、dip都在同一个网段 

    director一块网卡即可,后续配置添加vip使用别名即可,配置后的结果

    [root@director init.d]# ifconfig 
    em1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 10.192.27.100  netmask 255.255.255.128  broadcast 10.192.27.127   #真实IP
            inet6 fe80::e5e0:cff7:59dd:c73b  prefixlen 64  scopeid 0x20<link>
            ether 18:66:da:fb:2f:54  txqueuelen 1000  (Ethernet)
            RX packets 80016444  bytes 82807230821 (77.1 GiB)
            RX errors 0  dropped 1  overruns 0  frame 0
            TX packets 70362807  bytes 78200418969 (72.8 GiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
            device interrupt 81  
    
    em1:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 10.192.27.115  netmask 255.255.255.0  broadcast 10.192.27.255  #虚拟VIP
            ether 18:66:da:fb:2f:54  txqueuelen 1000  (Ethernet)
            device interrupt 81   

    rs也是一块网卡,后续vip配置在lo:0上即可但是需要先修改arp_ignore,arp_announce才能添加lo:0  ,配置后的结果

    [root@web01 init.d]# ifconfig 
    em1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 10.192.27.111  netmask 255.255.255.128  broadcast 10.192.27.127
            inet6 fe80::8c08:2f2:e6bb:2ab7  prefixlen 64  scopeid 0x20<link>
            ether 18:66:da:fa:e7:b8  txqueuelen 1000  (Ethernet)
            RX packets 15683  bytes 1735880 (1.6 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 1309  bytes 241153 (235.5 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 10.192.27.115  netmask 255.255.255.255
            loop  txqueuelen 1000  (Local Loopback)
    [root@web02 init.d]# ifconfig 
    em1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 10.192.27.112  netmask 255.255.255.128  broadcast 10.192.27.127
            inet6 fe80::57e9:b44b:71ec:7082  prefixlen 64  scopeid 0x20<link>
            ether 18:66:da:fb:07:88  txqueuelen 1000  (Ethernet)
            RX packets 24486138  bytes 2167932635 (2.0 GiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 17143136  bytes 1412413427 (1.3 GiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
            device interrupt 81  
    lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 10.192.27.115  netmask 255.255.255.255
            loop  txqueuelen 1000  (Local Loopback)

    2、三台服务器关闭防火墙   

    systemctl stop firewalld
    systemctl disable firewalld
    sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config 

    3、安装软件

    10.192.27.100上 安装ipvsadm     
    #yum install ipvsadm -y 
    10.192.27.111、112安装httpd
    #yum install httpd -y

    4、配置web01 web02

    注意:arp_ignore 改为1的意义是,响应报文,请求报文从哪个地址进来的,就只能这个接口地址响应
           arp_announce 改为2的意义是,通知,不通告不同网段

     配置RealServer,两台配置一样,新建文件 /etc/init.d/lvs_rs.sh 并赋予执行权限  #可设置开机自启
    [root@web01 init.d]# cat lvs_dr.sh 
    #!/bin/sh
    
    VIP=10.192.27.115
    . /etc/init.d/functions
    case "$1" in
        start)
            echo "Start LVS of RealServer"
            /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
            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)
            /sbin/ifconfig lo:0 down
            echo "Stop LVS of RealServer"
            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}"
            exit 1
        ;;
    esac
    # /etc/init.d/lvs_rs.sh start 

       

    5、配置director

     lvs-dr模式不需要开启地址转发,ip_forward功能,因为director发给rs的数据包是修改过的包,不是原包,不经过ip_forward转发,而是经过修改后的mac根据l路由决策直接路由到rip

    配置DirectServer,创建文件 /etc/init.d/lvs_vsadm.sh, 并赋予执行权限
    [root@director init.d]# cat lvs_vsadm.sh 
    #!/bin/sh
     
    VIP=10.192.27.115
    RIP1=10.192.27.111
    RIP2=10.192.27.112
    . /etc/init.d/functions
    
    case "$1" in
    start)
        echo "start LVS of DirectorServer"
      #set the Virtual IP Address
        ifconfig em1:0 $VIP/24
       #/sbin/route add -host $VIP dev em1:0
       #Clear IPVS table
        /sbin/ipvsadm -C
      #set LVS
        /sbin/ipvsadm -A -t $VIP:80 -s rr
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
      #Run LVS
        /sbin/ipvsadm
      #end
        ;;
    stop)
        echo "close LVS Directorserver"
        /sbin/ipvsadm -C
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
        ;;
    esac
    [root@localhost init.d]#      
    启动lvsadm服务:#可设置开机自启
    [root@director init.d]# ./lvs_vsadm.sh start
    start LVS of DirectorServer
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  localhost.localdomain:http rr
      -> 10.192.27.111:http           Route   1      0          0         
      -> 10.192.27.112:http           Route   1      0          0    

    检查网络信息   

    查看配置规则  
    [root@director init.d]# ipvsadm -Ln
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  10.192.27.115:80 rr
      -> 10.192.27.111:80             Route   1      0          0         
      -> 10.192.27.112:80             Route   1      0          0         
    [root@director init.d]#
    由于LVS(IPVS)是工作在内核空间的,因此要在用户空间对其进行配置和管理就要用到ipvsadm,ipvsadm是LVS在用户空间的管理命令。https://www.cnblogs.com/fansik/p/5830927.html
    
    一般在安装linux(CentOS6.5)时该命令是为安装的所以在使用前要先安装该命令:yum -y install ipvsadm
    
    ipvs和iptables最好不要同时使用,所以在定义ipvs前最好要先清空iptables的规则,至少要清空filter
    
    # iptables -F -t filter
    # /etc/init.d/iptables save
    
    ipvsadm的语法:
    ipvsadm -A|E -t|u|f service-address [-s scheduler]
                   [-p [timeout]] [-M netmask]
    ipvsadm -D -t|u|f service-address
    ipvsadm -C
    ipvsadm -R
    ipvsadm -S [-n]
    ipvsadm -a|e -t|u|f service-address -r server-address
                   [-g|i|m] [-w weight] [-x upper] [-y lower]
    ipvsadm -d -t|u|f service-address -r server-address
    ipvsadm -L|l [options]
    ipvsadm -Z [-t|u|f service-address]
    ipvsadm --set tcp tcpfin udp
    ipvsadm --start-daemon state [--mcast-interface interface]
                   [--syncid syncid]
    ipvsadm --stop-daemon state
    ipvsadm -h
    
    ipvsadm命令的使用方法:
    1、集群服务相关
    -A:添加一个集群服务
       -t:tcp
       -u:udp
       -f:firewall-mark,通常用于将两个或以上的服务绑定为一个服务进行处理是使用,integer类型
       service-address:
          -t:ip:port
          -u:ip:port
          -f:firewall-mark
    
       -s:调度算法,默认为wlc
       -p:timout:persistent connection,持久连接
    -E:修改定义过的集群服务
    -D:-t|-u|-f service-address:删除指定得集群服务
    
    2、RS(Real Server)相关
    -a:向指定得CS(Cluster Service)中添加RS(Real Server)
       -t|-u|-f service-address:指明将RS添加至哪个Cluster Service中
       -r:指定RS(Real Server),可包含{IP[:port]},只有支持端口映射的LVS类型才允许此处使用跟集群服务中不同的端口
       LVS类型:
          -g:Gateway,DR(默认使用的类型)
          -i:ipip,TUN
          -m:masquerade(地址伪装),NAT
       指定RS(Real Server)权重:
          -w 取值范围0-65535
    -e:修改指定的RS属性
    -d:-t|-u|-f service-address -r server-address:从指定得集群服务中删除某RS
    
    3、清空所有的集群服务:
    -C
    
    4、保存规则:(使用输出重定向)
    ipvsadm-save
    ipvsadm -S
    
    5、载入指定的规则:(使用输入重定向)
    ipvsadm-restore
    ipvsadm -R
    
    6、查看ipvsadm规则
    ipvsadm -L [options]
    -n:数字格式显示IP地址
    -c:显示连接数相关信息
    --stats:显示统计数据
    --rate:速率
    --exact:显示统计数据的精确值
    
    7、计数器清零
    -Z
    ipvsadm命令使用方法

    6、测试结果

     

    [root@client ~]# curl 10.192.27.115
    welcom to web1
    [root@client ~]# curl 10.192.27.115
    welcom to web2
    [root@client ~]# curl 10.192.27.115
    welcom to web1
    [root@client ~]# curl 10.192.27.115
    welcom to web2
    #统计信息
    [root@director init.d]#  ipvsadm -ln --stats
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
      -> RemoteAddress:Port
    TCP  10.192.27.115:80                    6      101        0    19177        0
      -> 10.192.27.111:80                    3       55        0     9473        0
      -> 10.192.27.112:80                    3       46        0     9704        0
     
     #连接条目

    [root@director init.d]# ipvsadm -lnc
    IPVS connection entries
    pro expire state source virtual destination
    TCP 01:54 FIN_WAIT 10.192.33.40:56584 10.192.27.115:80 10.192.27.112:80
    TCP 01:54 FIN_WAIT 10.192.33.40:56583 10.192.27.115:80 10.192.27.111:80
    [root@localhost init.d]#

  • 相关阅读:
    nuxtjs项目安装依赖报错
    汇总资源
    nuxt.js
    关于Git每次进入都需要输入用户名和密码的问题解决
    Chrome
    44.树与树算法
    43.搜索
    41.栈
    42.排序
    39.协程
  • 原文地址:https://www.cnblogs.com/linux985/p/11791223.html
Copyright © 2020-2023  润新知