负载均衡 LoadBlance

名词概念

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模块
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群。常用的负载均衡开源软件有ngin...
    jiangmo阅读 1,316评论 0 1
  • 【摘要】 面对大量用户访问、高并发请求,海量数据,可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器...
    静修佛缘阅读 4,536评论 0 24
  • Linux Cluster: Cluster:计算机集合,为解决某个特定问题组合起来形成的单个系统; Linux ...
    Net夜风阅读 555评论 0 1
  • 一、负载均衡LVS基本介绍 二、LVS的基本工作原理 1. 当用户向负载均衡调度器(Director Server...
    梅_梅阅读 629评论 0 2
  • 一、软件负载均衡概述 硬件负载均衡性能优越,功能全面,但是价格昂贵,一般适合初期或者土豪级公司长期使用。因此软件负...
    程序员技术圈阅读 559评论 0 0