搭建Lvs负载均衡群集

作者: 小短腿电工 | 来源:发表于2018-12-21 13:25 被阅读20次

    一、Lvs详解
    lvs内核模型


    在网上淘的.png

    1、模型分析

    用户访问的数据可以进入调度器
    匹配调度器分配的虚拟IP|IP+端口(路由走向)
    根据调度器的算法确定匹配的服务器
    

    2、调度条件:基于IP、基于端口、基于内容(基于IP效率最高)
    3、lvs的三种工作模式:
    NAT模式:调度器充当网关,与需要调度的服务器在同一网段,安全性能高,瓶颈就是调度器挂了就炸了。
    IP隧道模式:tun模式,采用开放网络结构,调度器负责充当client端网络访问入口,将请求发给服务端,由服务端相应client端的请求(服务器端和调度器是通过ip隧道互通),安全性能低,性能高。
    DR模式:直连路由模式,采用半开放网络结构,调度器负责充当client端网络访问入口,将请求发给服务端,由服务端相应client端的请求(服务端和调度器处于同一网段),性能最高,安全较高。
    4、lvs的调度算法

    静态:
    1.轮询rr:将请求按顺序依次分配给各个web节点;
    2.加权轮询wrr:根据web服务器的处理能力,动态调整权重,将请求按照各节点的负载情况进行顺序分配;
    3.目标地址散列调度dh:根据请求的目标IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
    4.源地址 hash:源地址散列”调度算法根据请求的源IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
    动态:
    1.最小连接Lc:根据web服务器的连接数量,将请求分配给web节点服务器;
    2.加权最小连接WLC:根据web服务器的处理能力,动态调整权重,将请求按照各节点的连接数量进行分配,默认;
    3.最短延迟调度SED:在WLC基础上改进,Overhead = (ACTIVE+1)*256/加权,不再考虑非活动状态,把当前处于活动状态的数目+1来实现,数目最小的,接受下次请求,+1的目的是为了考虑加权的时候,非活动连接过多缺陷:当权限过大的时候,会倒置空闲服务器一直处于无连接状态。
    4.永不排队/最少队列调度NQ:无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个主机很空间。在SED基础上无论+几,第二次一定给下一个,保证不会有一个主机不会很空闲着,不考虑非活动连接,才用NQ,SED要考虑活动状态连接,对于DNS的UDP不需要考虑非活动连接,而httpd的处于保持状态的服务就需要考虑非活动连接给服务器的压力。
    5.基于局部性的最少链接LBLC:基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
    6.带复制的基于局部性最少连接LBLCR:带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
    
    

    二、搭建lvs的NAT模式负载集群
    拓补图如下:


    ![lvs-nat.png]!.png

    实验环境

    • lvs网关
      [root@lvs-gw ~]# hostname
      lvs-gw
      [root@lvs-gw ~]# cat /etc/redhat-release
      CentOS Linux release 7.5.1804 (Core)
    • lvs服务器1
      [root@real-slave1 ~]# hostname
      real-slave1
      [root@real-slave1 ~]# cat /etc/redhat-release
      CentOS Linux release 7.5.1804 (Core)
    • lvs服务器2
      [root@real-slave2 ~]# hostname
      real-slave2
      [root@real-slave2 ~]# cat /etc/redhat-release
      CentOS Linux release 7.5.1804 (Core)
      操作步骤
      1、nginx集群环境配置
    yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre-devel
    #pcre让 Nginx 支持 Rewrite 功能(防盗链)
    #创建nginx用户
    useradd nginx -s /sbin/nologin
    mkdir /usr/local/nginx
    tar zxvf nginx-1.15.7.tar.gz -C /usr/local/nginx/
    cd /usr/local/nginx/nginx-1.15.7
    ./configure --prefix=/usr/local/nginx \
    --with-http_dav_module \
    --with-http_stub_status_module \
    --with-http_addition_module \
    --with-http_sub_module \
    --with-http_flv_module \
    --with-http_mp4_module \
    --with-http_ssl_module \
    --user=nginx \
    --group=nginx \
    --with-pcre
    make ;make install 
    #nginx的服务管理
    /usr/local/nginx/sbin/nginx #开启
    #/usr/local/nginx/sbin/nginx -s stop 停止
    #/usr/local/nginx/sbin/nginx -s reload 重载
    cat <<END>> /etc/rc.d/rc.local ;chmod 755 /etc/rc.d/rc.local
    > /usr/local/nginx/sbin/nginx 
    > END
    #配置节点信息
    cat <<END >> /usr/local/nginx/html/index.html
    > node1 
    > END  
    #slave2有之前的配置。
    [root@real-slave1 html]# cd ~
    [root@real-slave1 ~]# curl -I 192.168.137.253
    HTTP/1.1 200 OK
    Server: nginx/1.15.7
    Date: Thu, 20 Dec 2018 17:04:27 GMT
    Content-Type: text/html
    Content-Length: 6
    Last-Modified: Thu, 20 Dec 2018 17:01:02 GMT
    Connection: keep-alive
    ETag: "5c1bcace-6"
    Accept-Ranges: bytes
    [root@real-slave1 ~]# curl -I 192.168.137.254
    HTTP/1.1 200 OK
    Server: nginx/1.12.2
    Date: Thu, 20 Dec 2018 17:04:39 GMT
    Content-Type: text/html;charset=ISO-8859-1
    Connection: keep-alive
    Vary: Accept-Encoding
    #网络配置
    slave1ens33:192.168.137.253/24
    slave2ens33:192.168.137.254/24
    

    2、调度器lvs的配置

    #设置lvs-gw的IP地址为
    ens33:192.168.1.104/24 
    ens34:192.168.137.1/24
    #重启网卡
    systemctl restart network
    调整调度器的相应参数
    [root@lvs-gw ~]# cat /etc/sysctl.conf 
    #追加以下内容
    net.ipv4.ip_forward = 1 #开启路由转发
    加载lvs模块查看状态安装ipvsadm工具
    [root@lvs-gw ~]# sysctl -p
    net.ipv4.ip_forward = 1
    [root@lvs-gw ~]# modprobe ip_vs
    [root@lvs-gw ~]# lsmod |grep ip_vs
    ip_vs                 141473  0 
    nf_conntrack          133053  8 ip_vs,nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_ipv4,nf_conntrack_ipv6
    libcrc32c              12644  4 xfs,ip_vs,nf_nat,nf_conntrack
    [root@lvs-gw ~]# yum -y install ipvsadm #这个工具是用来编辑lvs规则的
    清空并查看当前lvs规则
    for i in ipvsadm ; do systemctl stop $i ;done
    ipvsadm -C
    ipvsadm -L
    编写规则并保存
    [root@lvs-gw ~]# ipvsadm -A -t 192.168.1.104:80 -s rr
    [root@lvs-gw ~]# ipvsadm -a -t 192.168.1.104:80 -r 192.168.137.254:80 -m -w 1
    [root@lvs-gw ~]# ipvsadm -a -t 192.168.1.104:80 -r 192.168.137.253:80 -m -w 1
    [root@lvs-gw ~]# 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.137.100:80 rr
      -> 192.168.137.253:80           Masq    1      0          0         
      -> 192.168.137.254:80           Masq    1      0          0         
    [root@lvs-gw ~]# ipvsadm-save
    

    3、测试


    nginx的静态页面-slave1.png

    再一次访问变成了tomca的页面


    nginx反向代理tomca-slave2.png

    三、lvs的DR模式负载均衡集群
    实现拓补图如下:


    lvs-dr

    1、调度器的网络配置

    [root@test ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens37
    HWADDR=00:0C:29:99:14:1B
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=none
    IPADDR=192.168.137.1
    IPADDR1=192.168.137.100
    PREFIX=24
    PREFIX1=24
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_PRIVACY=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=ens37
    UUID=3afdb262-1c74-339e-87bb-048e36444a3a
    DEVICE=ens37
    ONBOOT=yes
    AUTOCONNECT_PRIORITY=-999
    GATEWAY=192.168.137.1
    
    
    #slave的环境就直接拿来用了
    

    2、编写调度器的lvs调度规则

    [root@test ~]# vim /etc/sysctl.conf 
    #追加以下内容
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects = 0
    net.ipv4.conf.ens37.send_redirects = 0
    #
    [root@test ~]# sysctl -p
    #加载模块
    modprobe ip_vs
    lsmod |grep ip_vs
    yum install -y ipvsadm
    systemctl stop ipvsadm
    ipvsadm -C #清空lvs_规则
    #添加dr的规则
    [root@test ~]# ipvsadm -A -t 192.168.137.100:80 -s rr #-p是指定超时间隔
    [root@test ~]# ipvsadm -a -t 192.168.137.100:80 -r 192.168.100.254 -g -w 1
    [root@test ~]# ipvsadm -a -t 192.168.137.100:80 -r 192.168.100.253 -g -w 1
    [root@test ~]# ipvsadm-save 
    -A -t test:http -s rr
    -a -t test:http -r 192.168.100.253:http -g -w 1
    -a -t test:http -r 192.168.100.254:http -g -w 1
    [root@test ~]# 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.137.100:80 rr
      -> 192.168.100.253:80           Route   1      0          0         
      -> 192.168.100.254:80           Route   1      0          0  
    

    配置完以上内容,在slave节点上还是存在数据包回包的问题,需要配置slave服务端的VIP

    [root@real-slave1 ~]# cat <<END >> /etc/sysconfig/network-scripts/ifcfg-lo:0
    DEVICE=lo:0
    IPADDR=192.168.137.100
    NETMASK=255.255.255.255
    ONBOOT=yes
    NAME=lo:0  #slave节点配置一样
    END
    systemctl restart network
    

    3、测试DR模式(直连路由模式)
    客户端



    第一次测试


    image.png
    关闭slave1的nginx再次测试
    image.png
    END

    相关文章

      网友评论

        本文标题:搭建Lvs负载均衡群集

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