美文网首页
负载均衡集群介绍、LVS介绍、LVS调度算法、LVS NAT模式

负载均衡集群介绍、LVS介绍、LVS调度算法、LVS NAT模式

作者: XiaoMing丶 | 来源:发表于2018-12-21 20:55 被阅读0次

    目录

    一、负载均衡集群介绍
    二、LVS介绍
    三、LVS调度算法
    四、LVS NAT模式搭建

    一、负载均衡集群介绍

    • 负载均衡集群不难理解,简单说就是让多台服务器均衡地去承载压力。

    • 实现负载均衡集群的开源软件有LVS、keepalived、haproxy、Nginx等。

    • 其中LVS属于4层(网络OSI 7层模型传输层),nginx属于7层(应用层),haproxy既可以认为是4层,也可以当做7层使用。

    • keepalived的负载均衡功能其实就是lvs。

    • lvs这种4层的负载均衡是可以分发除80外的其他端口通信的,比如MySQL的,而nginx仅仅支持http,https,mail,haproxy也支持MySQL这种。

    • 相比较来说,LVS这种4层的更稳定,能承受更多的请求,而nginx这种7层的更加灵活,能实现更多的个性化需求。

    二、LVS介绍

    • LVS(Linux Virtual Server)是由国内大牛章文嵩开发的,这款软件的流行度不亚于Apache的httpd,它是一款四层的负载均衡软件,是针对TCP/IP做的转发和路由,所以稳定性和效率相当高。

    • LVS架构中有一个核心角色叫做分发器(Load balance),它用来分发用户的请求,还有诸多处理用户请求的服务器(Real Server,简称rs)。

    • LVS根据实现方式的不同,主要分为三种类型:NAT模式、IP Tunnel(IP隧道)模式、DR模式。

    • LVS三种模式介绍:
    1. NAT模式
    • 这种模式借助iptables的nat表来实现
    • 用户的请求到分发器后,通过预设的iptables规则,把请求的数据包转发到后端的rs上去
    • rs需要设定网关为分发器的内网ip
    • 用户请求的数据包和返回给用户的数据包全部经过分发器,分发器的性能和网络的带宽、质量会成为整个集群的瓶颈
    • NAT模式下处理请求的机器数量不能太多,相对其他模式能处理的请求数较少
    • 在nat模式中,只需要分发器有公网ip即可,所以比较节省公网ip资源
    LVS NAT模式
    1. IP Tunnel模式
    • 这种模式,需要有一个公共的IP配置在分发器和所有rs上,我们把它叫做vip
    • 客户端请求的目标IP为vip,分发器接收到请求数据包后,会对数据包做一个加工,会把目标IP改为rs的IP,这样数据包就到了rs上
    • rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己
    • rs处理完请求后根据路由表将响应报文直接返回给客户端,不再经过分发器,此时分发器不再是集群性能的瓶颈
    • 这种模式下,需要给分发器和所有的rs全部分配公网IP,所以比较浪费公网IP
    LVS IP Tunnel模式
    1. DR模式
    • 这种模式,也需要有一个公共的IP配置在分发器和所有rs上,也就是vip
    • 和IP Tunnel不同的是,这种模式下不会封装IP,而是将数据帧的MAC地址改为rs的MAC地址
    • rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己
    LVS DR模式

    三、LVS调度算法

    • 轮询 Round-Robin rr //均衡的将用户请求分发到每一个rs上
    • 加权轮询 Weight Round-Robin wrr //带权重的轮询,依照指定的权重比来分发请求
    • 最小连接 Least-Connection lc //将请求分发到连接数比较少的rs上
    • 加权最小连接 Weight Least-Connection wlc //带权重的最小连接
    • 基于局部性的最小连接 Locality-Based Least Connections lblc
    • 带复制的基于局部性最小连接 Locality-Based Least Connections with
      Replication lblcr
    • 目标地址散列调度 Destination Hashing dh
    • 源地址散列调度 Source Hashing sh
    • 常用的是前4种

    四、LVS NAT模式搭建

    • 实验环境

     需要3台虚拟机,1台作调度器dir,2台作真实服务器rs。
     NAT模式下,调度器需要有两个IP,一个公网IP一个内网IP,真实服务器只需要内网IP。
     三台机器都关闭firewalld服务,并安装启动iptables-serives,清空iptables规则。
     三台机器都关闭SElinux。

    分发器dir
    主机名:minglinux-03
    内网IP 192.168.162.128
    公网IP 192.168.150.123 vmware仅主机网络模式
    VMware设置内网的网卡设为NAT模式,连接外网的网卡设为仅主机模式
    真实服务器rs1
    主机名:minglinux-01
    内网IP 192.168.162.130
    真实服务器rs2
    主机名:minglinux-02
    内网IP 192.168.162.132

    • 分发器虚拟机网络设置
    [root@minglinux-03 ~] vim /etc/sysconfig/network-scripts/ifcfg-ens33 //ifcfg-ens33网卡连接内网
    [root@minglinux-03 ~] vim /etc/sysconfig/network-scripts/ifcfg-ens37  
    //ifcfg-ens37网卡连接公网,网段为VMware仅主机网络模式子网网段
    [root@minglinux-03 ~] ifup ens37
    [root@minglinux-03 ~] ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:7a:0f:05 brd ff:ff:ff:ff:ff:ff
        inet 192.168.162.128/24 brd 192.168.162.255 scope global ens33
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe7a:f05/64 scope link 
           valid_lft forever preferred_lft forever
    3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:7a:0f:0f brd ff:ff:ff:ff:ff:ff
        inet 192.168.150.123/24 brd 192.168.150.255 scope global ens37
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe7a:f0f/64 scope link 
           valid_lft forever preferred_lft forever
    
    
    • rs虚拟机网络设置
       两台rs均设置内网网关为dir的内网IP(192.168.162.128)
    //rs1网关设置
    [root@minglinux-01 ~] vim /etc/sysconfig/network-scripts/ifcfg-ens33
    [root@minglinux-01 ~] ifdown ens33 && ifup ens33
    [root@minglinux-01 ~] route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         192.168.162.128 0.0.0.0         UG    0      0        0 ens33
    169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 ens33
    192.168.162.0   0.0.0.0         255.255.255.0   U     0      0        0 ens33
    
    //rs2网关设置
    [root@minglinux-02 ~] vim /etc/sysconfig/network-scripts/ifcfg-ens33
    [root@minglinux-02 ~] ifdown ens33 && ifup ens33
    [root@minglinux-02 ~] route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         192.168.162.128 0.0.0.0         UG    0      0        0 ens33
    169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 ens33
    192.168.162.0   0.0.0.0         255.255.255.0   U     0      0        0 ens33
    
    • 3台机器防火墙设置
       3台机器都执行如下命令:

    systemctl stop firewalld
    systemctl disable firewalld
    yum install -y iptables-services //安装iptables服务
    systemctl start iptables //启动服务
    systemctl enable iptables //开机启动
    iptables -F
    service iptables save
    setenforce 0 //临时关闭SElinux,修改selinux配置文件/etc/selinux/config可永久生效
    //此时两台rs机器由于网关修改无法上网,安装iptables-services操作需先将网关改回

     epel源下载安装速度慢的话可以临时将epel源取消,方法如下:

    [root@minglinux-01 ~] cd /etc/yum.repos.d
    [root@minglinux-01 /etc/yum.repos.d] ls
    CentOS7-Base-163.repo  CentOS-fasttrack.repo  CentOS-Vault.repo
    CentOS-CR.repo         CentOS-Media.repo      epel.repo
    CentOS-Debuginfo.repo  CentOS-Sources.repo    epel-testing.repo
    [root@minglinux-01 /etc/yum.repos.d] mv epel.repo epel.repo.1
    [root@minglinux-01 /etc/yum.repos.d] yum list |grep iptables-service
    iptables-services.x86_64                    1.4.21-24.1.el7_5          @updates 
    iptables-services.x86_64                    1.4.21-28.el7              base     
    [root@minglinux-01 /etc/yum.repos.d] yum install -y iptables-services
    
    • 在dir上安装ipvsadm和配置脚本
       ipvsadm是实现LVS的核心工具
    [root@minglinux-03 ~] yum install -y ipvsadm
    [root@minglinux-03 ~] vim /usr/local/sbin/lvs_nat.sh //新建一个脚本
    //写入以下内容
    #! /bin/bash
    # director 调整linux系统内核参数,开启路由转发功能,让数据包能转发到后端rs上
    echo 1 > /proc/sys/net/ipv4/ip_forward  
    # 关闭icmp的重定向
    echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
    # 注意区分网卡名字,两个网卡分别为ens33和ens37
    echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
    # director 设置nat防火墙
    iptables -t nat -F  //清空nat表的规则
    iptables -t nat -X  //清空nat表中所有的链
    iptables -t nat -A POSTROUTING -s 192.168.162.0/24  -j MASQUERADE
    //让同网段的内网可以上网
    # director设置ipvsadm
    IPVSADM='/usr/sbin/ipvsadm'
    $IPVSADM -C    //ipvsadm的-C选项清空规则
    $IPVSADM -A -t 192.168.150.123:80 -s lc -p 3 
    //-A增加Virtual Server,-t为TCP,-s选项指定调度算法,lc为最小连接算法。
    //-p指定超时时间,即在一段时间内(3s),来自同一客户端的请求会被分发到相同的rs上
    $IPVSADM -a -t 192.168.150.123:80 -r 192.168.162.130:80 -m -w 1
    $IPVSADM -a -t 192.168.150.123:80 -r 192.168.162.132:80 -m -w 1
    //-a增加rs,-r指定rs的IP,-m表示LVS的模式为NAT(masquerad)
    //如果是-g表示LVS模式为DR,-i表示LVS模式为IP Tunnel,-w指定权重。
    
    [root@minglinux-03 ~] sh !$  //执行脚本
    sh /usr/local/sbin/lvs_nat.sh
    
    • NAT模式效果测试
      两台rs需安装有nginx并启动nginx

     设置两台rs不同的主页,做一个区分

    [root@minglinux-01 ~] echo "This is rs1" > /data/wwwroot/default/index.html 
    [root@minglinux-01 ~] curl localhost
    This is rs1
    
    [root@minglinux-02 ~] echo "This is rs2" > /usr/share/nginx/html/index.html
    [root@minglinux-02 ~] curl localhost
    This is rs2
    

     windows浏览器访问测试
    脚本中设置了3s的长久连接,此时连续刷新页面并不改变


    image.png

     修改lvs_nat.sh脚本去掉指定超时连接的设定

    [root@minglinux-03 ~] vim /usr/local/sbin/lvs_nat.sh
    [root@minglinux-03 ~] sh !$
    sh /usr/local/sbin/lvs_nat.sh
    [root@minglinux-03 ~] ipvsadm -ln
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  192.168.150.123:80 lc
      -> 192.168.162.130:80           Masq    1      0          0         
      -> 192.168.162.132:80           Masq    1      0          0     
    

     修改lvs_nat.sh脚本中使用的算法为rr
    在dir上使用curl测试:

    //请求均衡地发送到后端的rs上
    [root@minglinux-03 ~] vim /usr/local/sbin/lvs_nat.sh
    [root@minglinux-03 ~] sh /usr/local/sbin/lvs_nat.sh
    [root@minglinux-03 ~] curl 192.168.150.123
    This is rs2
    [root@minglinux-03 ~] curl 192.168.150.123
    This is rs1
    [root@minglinux-03 ~] curl 192.168.150.123
    This is rs2
    [root@minglinux-03 ~] curl 192.168.150.123
    This is rs1
    
    扩展

    lvs 三种模式详解 http://www.it165.net/admin/html/201401/2248.html
    lvs几种算法 http://www.aminglinux.com/bbs/thread-7407-1-1.html
    关于arp_ignore和 arp_announce http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
    lvs原理相关的 http://blog.csdn.net/pi9nc/article/details/23380589

    相关文章

      网友评论

          本文标题:负载均衡集群介绍、LVS介绍、LVS调度算法、LVS NAT模式

          本文链接:https://www.haomeiwen.com/subject/higukqtx.html