美文网首页
负载均衡 LoadBlance

负载均衡 LoadBlance

作者: 靖流 | 来源:发表于2018-11-28 17:02 被阅读0次

    名词概念

    CIP Client IP,访问用户自身的IP
    VIP Virtual IP,用户访问的目的IP
    RIP Real IP,后端webserver的真实IP
    DIP 负载均衡器自身的IP

    概述

    • 负载均衡是实现将用户访问流量分发的方法,自身有高可用(保证存活)的能力(但并不是高可用集群),是以提高服务的并发处理能力为目标的集群搭建方法。

    • 实现负载均衡一般可以使用顺序、比重、流量、服务类别等进行分配,LB的部署方式也分为路由和服务直接返回模式。

    • 负载均衡可以通过“软硬”两种方法实现:

      • 软件LB:LVS(四层路由设备)、Nginx(七层负载均衡,主要针对http, smtp, pop3, imap)、Haproxy(通Nginx)

      • 硬件LB:最著名的就F5.(型号 F5 BIG-IP-1500, F5 BIG-IP LTM8800),价格昂贵是它的唯一缺点

    LB的主要方式

    • http重定向

      • 根据用户的http请求计算出一个真实的web服务器的IP地址,并将该web服务器IP地址写入http重定向中,重新返回给浏览器,由浏览器重新访问新的Ip。多应用于下载网站中。
      • 优点:简单
      • 缺点:浏览器需要两次请求服务器才能完成一次访问,性能差。http重定向服务器自身的处理能力可能成为其瓶颈。使用http302相应重定向,有可能会使搜索引擎判定为SEO作弊,降低搜索排名。
    • DNS LB

      • DNS LB提供域名到IP解析的过程,将LB部署在DNS解析服务器上。此时DNS服务器也就充当了LB。主要使用了域名运营商提供的只能DNS以及多线解析技术(不过这些跟我们没多大关系)。具体实现即DNS上配置多个域名对应的IP记录,域名解析式通过DNS服务器的算法(轮询)将一个域名请求分配到真实的服务器上。
      • 优点:工作都交给了DNS服务器,省却了功夫。同时多个DNS还支持基于地理位置的域名解析,将域名解析成距离用户地理位置最近的一个服务器地址,加快访问速度,极大程度改善性能。
      • 缺点:①DNS目前为多级解析,每一级(包括本地)都可能存在缓存记录。当一台存在于缓存中的服务器下线之后,该服务器对应的DNS记录可能仍然存在,导致用户的访问失败。②DNSLB的控制权在域名服务商的手中,网站可能无法做出过多的改善和管理,也不能实现按照服务器的处理能力来分配负载。DNS负载均衡采用的是简单的轮询算法,不能区分服务器之间的差异,不能反映服务器运行的状态。
    • 反向代理负载均衡

      • 主要的代表即为代表Nginx,其工作原理是根据负载均衡算法将请求的浏览器访问抓发到不同的web服务器来处理,处理结果经过反向服务器再发送回浏览器。
      • 优点:部署简单,处于http协议层面。
      • 缺点:使用了反向代理服务器后,web服务器RIP不能直接暴露在外,因此web服务器不需要使用外部IP地址,而反向代理服务作为沟通桥梁就需要配置双网卡、外部内部两套IP地址。
    • IP负载均衡 代表lvs-nat

      • 在网络层通过修改目标地址进行负载均衡。用户访问请求到达负载均衡服务器后,负载均衡服务器在操作系统内核进程获取网络数据包,根据算法得到一台RIP,然后将用户请求的目标地址修改成RIP,数据处理完成后返回给负载均衡服务器,负载均衡服务器收到响应后将自身的地址修改为CIP后再将数据返回回去。类似于反向代理。
      • 优点:在响应请求时速度叫反向代理要快。
      • 缺点:当请求数据较大时,速度较慢。
    • 数据链路层负载均衡 代表lvs-dr

      • 数据链路层修改MAC地址进行负载均衡。负载均衡服务器的DIP和它管理的web服务器集群使用的VIP一致,负载均衡服务器分发过程中不修改访问地址的IP地址,而是修改MAC地址。
      • 优点:不需要负载均衡服务器进行IP地址的转换。数据相应时,不需要经过负载均衡服务器。
      • 缺点:负载均衡服务器网卡带宽要求较高。
    • 物理层负载均衡 代表F5

      • ①F5 BIG-IP提供12种灵活的算法将所有的流量均衡的分配到各个服务器而面对用户,只是一台虚拟服务器。②自带健康性检查,F5 BIG-IP可以确认应用程序能否对请求返回对应的数据。③F5 BIG-IP具有动态的Session的会话保持功能。④F5 BIG-IP的iRules功能可以做到HTTP内容过滤,根据不同的域名,URL,将访问请求传送到不同的服务器。
      • 优点:性能好
      • 缺点:贵

    LB中的几种轮询算法

    • Fixed Scheduling Method 静态调度方法
      • RR 轮询
      • WRR 加权轮询(需要设置权重)
      • DH 目标地址hash(哈希映射)
      • SH 源地址hash
    • Dynamic Scheduling Method 动态调度方法
      • LC 最小连接
      • WLC 加权最小链接
      • LBLC 基于本地的最少连接(找出最近使用的服务器,若该服务器是可用的且没有超载,则会优先选择该服务器)
      • LBLCR 带复制的基于本地的最少连接(与LBLC的不同在于,对应的一个RIP可能所属与一个集群映射)

    LVS

    概述

    • LVS是Linux Virtual Server的简称,其工作在一台服务器上提供Directory的功能,本身并不提供任何服务,只是把特定的请求转发给对应的RealServer,从而实现集群环境中的LB。

    NAT转发模式

    NAT

    工作原理

    • 客户端将请求法王前端的Director,请求报文中包含CIP和VIP。
    • Director接收到报文后,若VIP为规则内存在的地址,那么它将客户端请求报文的VIP改为后端的RIP,并根据算法发送出去。
    • 报文送到Real Server后,由于报文的RIP为自身IP,故会响应该请求,处理完成后返回给LB。
    • Director接收到RS处理完成的报文后将RIP修改为VIP发送给CIP。

    配置中注意

    • NAT中RS的网关必须指向LVS,否则报文无法发送给CIP

    缺点

    因为所有的请求报文都需要Director处理应答,Director自身很可能成为架构的性能瓶颈

    DR直接路由模式

    DR

    工作原理

    • 客户端将请求发往前段的Director,请求报文包含CIP,VIP
    • Director收到报文后,发现为规则内存在的地址,则将客户端请求报文源MAC改为自身的DIP的MAC,目标MAC改为RIP的MAC地址,并将其转发给RS
    • RS接收到报文后,对报文进行处理,然后启用回环网卡接口(lo)发送到默认网卡(eth0)直接发送给CIP

    特点

    • 集群节点和director必须处于一个物理网络内
    • RIP可以使用公网IP或私有IP
    • director仅处理入站请求,director服务器的压力小
    • 集群节点网卡不知想director,故出站不经过director
    • 不支持端口映射
    • 大多数系统都可以作为realserver,需要支持ARP广播

    关于ARP的特殊处理法

    在配置RS的lo时,需要吧netmask配置为255.255.255.255,防止ARP广播的影响

    TUN-IP隧道模式

    TUN

    工作原理

    • 客户端将请求发往前端的Director,请求报文中包含CIP,VIP
    • Director接收到报文后,识别VIP为规则内存在的IP,则Director在客户端请求的报文前封装一层IP报文,将源地址改为DIP,转发到RIP
    • RS接收后,首先拆封第一次IP报文,之后第二层IP报文对应自身lo接口上的VIP,所以会处理请求报文,并将响应报文通过lo结构发给eth0网卡直接发送给CIP

    特点

    • 优点
      • Director只负责将请求报文发送给RS,而RS应答发送给CIP。减少Director的数据流。Director不再是系统的瓶颈,能处理巨大的请求量。区别于DR模式,此方法可以实现异地LB。
    • 缺点
      • 隧道模式的RS节点需要合法IP,需要所有的RS都支持"IP Tunneling"(IP Encapsulation)协议,RS可能只能部署Linux服务器

    LVS-DR的实际操作

    • 1.在DirectorServer上添加VIP和设置路由
      ifconfig eth0:0 192.168.1.2 broadcast 192.168.1.255 netmask 255.255.255.0 up
        # 设置VIP和VIP的广播域和子网掩码
      echo 'route add -host 192.168.1.2 dev eth0:0' >> /etc/rc/local
        # 永久添加路由
      
    • 2.LVS设置路由条目
      yum -y install ipvsadm 
      #下载安装LVS
      
      ipvsadm -C
      #清空LVS的规则
      
      ipvasadm -A -t 192.168.1.2:80 -s rr
      # -A为添加virtual_server -t使用tcp协议 -s指定调度策略 rr 轮询
      
      ipvsadm -a -t 192.168.1.2:80 -r 192.168.1.3:80 -g
      ipvsadm -a -t 192.168.1.2:80 -r 192.168.1.4:80 -g
      # -a 添加realserver -g 指定模式为DR
      
    • 3.让配置永久生效
      ipvsadm -save > /etc/sysconfig/ipvsadm
      systemctl enable ipvsadm
      
    • 4.在RealServer上进行配置
      RS_1
      ifconfig lo:0 192.168.1.3/32
      #配置lo网卡
      echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
      #忽略arp响应,不允许接受
      echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
      #允许arp发送
      
      在RS_2上执行类似的操作

    LVS-NAT的实际操作

    • 1.前期工作
      Director需要两个网卡,一个外网一个内网,其中外网网卡为VIP,此处取外网网卡IP为10.10.10.2,内网网卡IP为192.168.1.2,两个RSIP分别为192.168.1.3 192.168.1.4
    • 2.在RS上将Director作为网关
      echo 'route add -net 10.10.10.2/24 gw 192.168.1.2'
      
      RS_2上有相同操作
    • 3.在LVS上的操作
      echo 1 > /proc/sys/net/ipv4/ip_forward    #启动路由功能
      yum -y install ipvsadm
      ipvsadm -A -t 10.10.10.2:80 -s rr
      ipvsadm -a -t 10.10.10.2:80 -r 192.168.1.3:80 -m
      ipvsadm -a -t 10.10.10.2:80 -r 192.168.1.4:80 -m
      

    LVS上的其他操作汇总

    # 1.管理虚拟服务
        ipvsadm -A -t IPADDR:PORT -s rr     #添加采用轮询算法      
        ipvsadm -E -t IPADDR:PORT -s -wrr   #修改算法为加权轮询   
        ipvsadm -D -t IPADDR:PORT           #删除虚拟服务          
    # 2.管理RS
        ipvsadm -a -t RIP:PORT -r VIP -g -w 2 #加使用DR权重2   
        ipvsadm -e -t RIP:PORT -r VIP -g -w 5 #改权重          
        ipvsadm -d -t RIP:PORT -r VIP         #删除            
    # 3.查看统计
        ipvsadm -Ln                #查看当前              
        ipvsadm -lnc               #查看当前转发情况       
        ipvsadm -Ln --stats --rate #查看ipvs模块的转发     
    

    keepalived高可用集群

    keepalived是集群管理中保证集群高可用的一个服务软件,用于防止单点故障。

    工作原理

    • 1.keepalived是以VRRP协议为实现基础的,VRRP全程Virtual Rou8ter Redundacy Protocol,即虚拟路由冗余协议。
    • 2.实际上,keepalived是将相同功能的server构成一个组,在组中存在一个master和多个backup,master上面对外有对外提供服务的vip,master会发组播,当backup收不到vrrp包时就认为master宕机了,此时按照VRRP的优先级,会选举一个backup作为master
    • 3.keepalived中主要有三个模块,为core, check, vrrp
      • core 为keepalived的核心,负责主程序的启动维护和全局配置文件的加载和解析
      • check负责健康检查
      • vrrp实现vrrp协议

    实际配置

    • 1.环境准备 需准备两台以上服务器(此处以两台为例),其中一台搭载Keepalived

      • RS1:192.168.1.3
      • RS2:192.168.1.4
      • VIP:192.168.1.2
    • 2.配置

      • RS1 作为master
      yum -y install keepalived
      
      vi /etc/keepalived/keepalived.conf
      
      ! Configuration File for keepalived
      global_defs {
          router_id 1       #设备在组中的标识,可相同
      }
      #vrrp_script chk_nginx {          #健康检查
          #script "/etc/keepalived/ck_ng.sh"    #检查脚本
          #interval 2           #检查频率
          #weight -5            #priority减5
          #fall 3               #失败三次
      }
      
      vrrp_instance VI_1 { #VI_1 实例名,两台路由器相同
          state MASTER      #主或者从状态
          interface eth0    #监控网卡
          mcast_src_ip 192.168.1.3      #心跳源IP
          virtual_router_id 55          #虚拟路由编号,主从需一致
          priority 100      #优先级
          advert_int 1      #心跳间隔
      
          authentication {      #秘钥认证(1-8位)
              auth_type PASS
              auth_pass 123456
          }
      
          virtual_ipaddress{    #VIP
              192.168.0.1/24
          }
      
          #track_script {       #引用脚本
              #chknginx
          }
      }
      
      #修改完成后
      systemctl enable keepalived
      
      • 在RS2上需要修改
        state MASTER 修改为 state BACKUP
        mcat_src_ip 改为自身RIP
        priority 100 改为 99

    HAproxy

    概述

    是一款高性能LB软件,因为专注负载均衡,相比在七层上的NginxLB,他做的更好,更专业。其处理模式分为单进程模式和多进程模式,分别适应于CPU过剩和内存过剩环境

    特点

    • 1.支持tcp/http 两种协议层的LB,使得LB功能非常丰富
    • 2.支持8种LB算法
    • 3.性能优秀
    • 4.拥有一个出色监控页面,实时亮节系统的当前情况
    • 5.功能强大的ACL支持(ACL 访问控制列表)

    示例1

    HAproxy
    • 环境

      • 三台以上(此处三台为例子)互相做好域名解析
      • HAproxy IP: 192.168.1.2/24
      • web1 IP: 192.168.1.3/24
      • web2 IP: 192.168.1.4/24
    • 操作步骤

      • 1.安装HAproxy
      yum -y install epel-release
      yum -y install haproxy
      
      • 2.配置HAproxy
      global                          #全局配置
          log 127.0.0.1 local3 info   #日志配置
          maxconn 4096                #最大连接限制(优先级低)
          uid nobody
          gid nobody
          daemon                      #守护进程运行
          nbproc 1                    #可生成的进程数
      
      defaults        #默认配置,无配置时启用该配置
          log     global              #日志使用全局配置
          mode    http                #模式
          maxconn 2048                #最大连接数(优先级中)
          retries 3                   #健康检查(此处若三此无应答则不可用)
          option  redispatch          #服务不可用后的操作(重定向到别的服务器)
          stats   uri     /haproxy    #状态模块
          stats   auth    aaa:123     #状态模块认证,可用此用户名密码来登录网页查看当前负载均衡状态
          contimeout      5000        #HA和RS请求超时时常
          clitimeout      50000       #客户端连接时常
          srvtimeout      50000       #HA作为服务器和Cli的链接时长
      
      frontend http-in                #前端模块,后名字随意
          bind 0.0.0.0:80             #面向用户监听的端口和地址
          mode http                   #http模式的LB
          log  global
          option  httplog             #使用httplog格式
          option  httpclose           #防止产生多余的cookie信息
          acl html url_reg -i \.html$     #访问控制列表名称html,规则要求url以html结尾
          use_backend html-server if html     #若满足acl html规则,则推送给后端的服务器 htmlserver
          default_backend html-server     #默认的后端服务器为html-server
      
      backend html-server             #后端,后名字随意
          mode http                   #模式为http协议层
          balance roundrobin          #轮询算法
          opption httpchk GET /index.html     #允许使用http协议检查健康
          cookie SERVERID insert indirect nocache     #转发CLI请求时插入cookie再转给RS,若第二次访问就把cookie除掉
          server html-A web1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5          #2000毫秒一次检查甲亢 连续两次测试通过视为有效,连续失败5次则服务器宕机
          server html-B web2:80 wight 1 cookie 3 check inter 2000 rise 2 fall 5
      
    • 查看HAproxy的状态

    • 组群的配置文件配置样式参考

    • HAproxy_2
        global
            log 127.0.0.1 local3 info      
            maxconn 4096                 
            uid nobody                     
            gid nobody                   
            daemon                       
            nbproc 1                          
            
        
        defaults                     
            log        global
            mode       http     
            maxconn 2048        
            retries     3           
            option  redispatch  
            stats   uri  /haproxy   
            stats auth           wing:123     
            contimeout  5000         
            clitimeout      50000       
            srvtimeout      50000     
            
            
        frontend http-in
            bind 0.0.0.0:80                        
            mode http
            log global
            option httplog  
            option httpclose
            acl php url_reg  -i  \.php$
            acl html url_reg  -i  \.html$
            use_backend php-server if  php
            use_backend html-server if  html
            default_backend html-server
        
      
        backend php-server
            mode http
            balance roundrobin
            option httpchk GET /index.php
            cookie SERVERID insert indirect nocache
            server php-A 192.168.122.30:80 weight 1 cookie 1 check inter 2000 rise 2 fall 5
            server php-B 192.168.122.40:80 weight 1 cookie 2 check inter 2000 rise 2 fall 5
            #cookie 1 标识 serverid 为 1
            #check inter 2000          
            #rise 2    
            #fall 5
        
        backend html-server
            mode http
            balance roundrobin
            option httpchk GET /index.html
            cookie SERVERID insert indirect nocache
            server html-A 192.168.122.10:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
            server html-B 192.168.122.20:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5        
      

    Nginx

    概述

    老熟人

    特点和优缺点

    • 特点
      • 1.功能强大,性能卓越,运行稳定
      • 2.配置简单灵活
      • 3.能够自动剔除工作不正常的后端服务器
      • 4.上传文件需要使用异步模式
      • 5.支持多种分配策略,可以分配权重,分配方式灵活
    • 优点
      • Nginx复制用户请求在后端服务器出现问题是,nginx会再复制一份请求给另一台后端服务器(LVS在这种情况下只能等待用户重新发送请求)
    • 缺点
      • 流量会经过nginx,nginx会成为集群架构网络效率的瓶颈
    Nginx

    配置

    • 1.同步时间,域名解析,准备IP
    • 2.配置Nginx
      • yum -y install epel-release
      • yum -y isntall nginx
      • vim /etc/nginx/nginx.comf
      upstream html {
          server web1:80 weight=1 max_fails=2 fail_timeout=2;
          server web2:80 weight=1 max_fails=2 fail_timeout=2;
      }
      upstream php{
          server web3:80 weight=1 max_fails=2 fail_timeout=2;
          server web4:80 weight=1 max_fails=2 fail_timeout=2;
      }
      upstream 
      server {
          location / {
              proxy_pass http://html;
          }
          location ~*\.php$ {
              proxy_pass http://php;
          }
      }
      

    Nginx支持的状态参数

    • down 暂停对该服务器的调度
    • backup 类似于LVS Sorry Server,当所有的非backup服务器挂了,则会抓发到这台服务器
    • max_fails 转发请求失败次数
    • fail_timeout 在经历max_fails次失败后,暂停真实服务器的事件。

    Nginx支持的负载均衡算法

    • RR
    • WRR
    • ip_hash IP摘要,根据每个请求Ip进行调度,可以解决Session的问题,不能使用weight(同一个IP发往同一个服务器)
    • fair 可以根据页面的大小和加载时间长短进行调度,使用第三方的upstream_fair 模块,需要加载第三方插件
    • url_hash 按请求的url的hash进行调度,从而使每个url定向到同一个服务器,使用第三方的hash模块

    相关文章

      网友评论

          本文标题:负载均衡 LoadBlance

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