阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

负载均衡之HAProxy详解

251次阅读
没有评论

共计 6948 个字符,预计需要花费 18 分钟才能阅读完成。

HAProxy 提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy 特别适用于那些负载特大的 web 站点,这些站点通常又需要会话保持或七层处理。HAProxy 运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的 web 服务器不被暴露到网络上。

HAProxy 实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间 (User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个 CPU 时间片(Cycle) 做更多的工作。————百度百科

安装:
[root@sherry ~]# yum install haproxy  -y

配置文件说明:
[root@sherry ~]# vim /etc/haproxy/haproxy.cfg 
global
    log        127.0.0.1 local2  # <address> <facility> [max level [min level]]:定义全局的 syslog 服务器,最多可以定义两个;
    chroot      /var/lib/haproxy #修改 haproxy 的工作目录至指定的目录并在放弃权限之前执行 chroot()操作,可以提升 haproxy 的安全级别,不过需要注意的是要确保指定的目录为空目录且任何用户均不能有写权限;
    pidfile    /var/run/haproxy.pid
    maxconn    4000  #设定每个 haproxy 进程所接受的最大并发连接数,其等同于命令行选项“-n”;“ulimit -n”自动计算的结果正是参照此参数设定的;
    user        haproxy
    group      haproxy
    daemon  #让 haproxy 以守护进程的方式工作于后台,其等同于“-D”选项的功能,当然,也可以在命令行中以“-db”选项将其禁用;
    stats socket /var/lib/haproxy/stats
defaults
    mode                    http   
    工作模式:
                        http  对应用层数据做深入分析,因此支持 7 层的过滤、处理、转换等机制;
                        tcp  haproxy 在客户端和 upstream server 之间建立一个全双工的连接;
                  不会对应用层协议做任何检查;
                    SSL、MySQL、SSL 等都应该使用此模式;
    log                        global  使用全局配置的日志
    #log <address> <facility> [<level> [<minlevel>]]  重新指定  可以定在 frontend
    option                  httplog
    option                  dontlognull
    option httpclose  #短连接
    option logasap  #先记录日志
    option dontlognull  #不记录空
    option http-server-close  #长链接时候 客户端超时  服务器自动断开连接
    option                  Redispatch  #基于 cookie 时候 后端服务器故障时候 自动迁移
    option forwardfor      except 127.0.0.0/8
    #{httpd.conf  LogFormat “%{X-Forwarded-For}i %l %u %t \”%r\” %>s %b” common  }
 
    capture request  header Host len 20  #记录 host 
    capture request  header Referer len 60 #记录 referer
 
    retries                3
    timeout http-request    10s  #三次握手等待时长
    timeout queue          1m      #后端在队列中等待时长
    timeout connect        10s    # 发送给后端时 超时时长
    timeout client          1m  #客户端非活动连接最大时长
    timeout server          1m  #等待后端服务器的发送数据的时长
    timeout http-keep-alive 10s    #保持连接的时长
    timeout check          10s    #健康检测超时时长
    maxconn                3000
frontend  main *:5000  #定义前端
    捕获信息
    capture request header Host len 15
    capture request header X-Forwarded-For len 15
    capture requset Referrer  len 15
    capture request header <HEADER> len <LENGTH>
    capture response header <HEADER> len <LENGTH>
    errorfile 404 /demo.php
    log 127.0.0.1 local3
    bind :80,:443    #绑定端口  只能定义在 frontend  listen
    acl index path -i /index.html
    acl url_static      path_beg      -i /static /images /Javascript /stylesheets      #地址的开始部分
    acl url_static      path_end      -i .jpg .gif .png .css .js    #地址的结尾
    use_backend static          if url_static  #如果条件符合上面的定义的  则引用的后端   
     
    use_backend          app  if  <condition>
    use_backend          app  unless  <condition>
    default_backend            app                  #默认的后端
backend static      #定义一个后端
检查方法:
    option httpchk
    option httpchk <uri>
    option httpchk <method> <uri>
    option httpchk <method> <uri> <version>:不能用于 frontend 段,例如:
     
      cookie <name>  [rewrite 重写 |insert 拆入 |prefix 前缀 多 cookie 放在应用程序之前] [indirect] [nocache] [postonly] [preserve] [httponly] [secure] [domain<domian>]* [maxidle<idle>] [maxlife<life>]
还要在每台 real-server 后加 cookie 标志
 
    cookie web insert  nocache  缓存服务器不保存 cookie   
    cookie SESSION_COOKIE insert indirect nocache    应用服务器
    hash-type:  map-based 权重取莫 默认
                        consistent          hash 一致性  后端服务器用这个
    balance    roundrobin    #调用方法 轮询  只能定义在 defaults  listen backend   
                      roundrobin:加权轮询  可以增加后来服务器  支持慢启动  图片服务器
                      static-rr 加权静态轮询    后面增加的服务器不生效,除非重启服务  服务器重新上线后理解分配高连接
                      leastconn  最少连接 支持权重改变 支持慢启动  mysql 从服务器
                      source  源地址 ip hash  并保存在 hash 表  支持加权  在 ip 层调用   
                      uri  基于用户请求的 uri  提高命中缓存命中率
                      url_param 
                      hdr(<name>)    #基于某个指定首部  use_domain_only  www.a.com 仅计算 a.com
                      rdp-cookie  在应用调用
                      rdp-cookie(name)
    server      static 127.0.0.1:4331 check  #后端服务器  定义名称  服务器地址  健康状态检测
backend app  #定义后端
    balance    roundrobin  #调度方法轮训
    server  app1 127.0.0.1:5001 check 
#backup 设定为备用服务器,仅在负载均衡场景中的其它 server 均不可用于启用此 server;
#check:启动对此 server 执行健康状态检查,其可以借助于额外的其它参数完成更精细的设定,如:
check inter 3000 rise 2 fall 5
          inter <delay>:设定健康状态检查的时间间隔,单位为毫秒,默认为 2000;也可以使用 fastinter 和 downinter 来根据服务器端状态优化此时间延迟;
          rise <count>:一般 2 次 设定健康状态检查中,某离线的 server 从离线状态转换至正常状态需要成功检查的次数;
          fall <count>:一般 5 次  确认 server 从正常状态转换为不可用状态需要检查的次数;
#cookie <value>:为指定 server 设定 cookie 值,此处指定的值将在请求入站时被检查,第一次为此值挑选的 server 将在后续的请求中被选中,其目的在于实现持久连接的功能;
#maxconn <maxconn>:指定此服务器接受的最大并发连接数;如果发往此服务器的连接数目高于此处指定的值,其将被放置于请求队列,以等待其它连接被释放;前端连接个数小于等于后端(maxconn+maxqueue)*server-number
#maxqueue <maxqueue>:设定请求队列的最大长度;
#observe <mode>:通过观察服务器的通信状况来判定其健康状态,默认为禁用,其支持的类型有“layer4”和“layer7”,“layer7”仅能用于 http 代理场景;
#redir <prefix>:启用重定向功能,将发往此服务器的 GET 和 HEAD 请求均以 302 状态码响应;需要注意的是,在 prefix 后面不能使用 /,且不能使用相对地址,以免造成循环;例如:
server srv1 172.16.100.6:80 redir http://imageserver.linuxidc.com check
#weight <weight>:权重,默认为 1,最大值为 256,0 表示不参与负载均衡;
    server  app2 127.0.0.1:5002 check   
    server  app3 127.0.0.1:5003 check
    server  app4 127.0.0.1:5004 check
listen stats
    bind *:8009
    stats enable
    stats uri /haproxy?stats
    stats auth admin:admin 
    stats hide-version
    stats admin if TRUE 认证通过允许管理  一般用 stats admin if LOCALHOST 本机 比较危险
    acl allow src 192.168.1.0/24  #定义允许访问段
    acl deny src 192.168.1.111  #定义拒绝访问的网络
    tcp-request content reject if deny      #tcp 层拒绝  也可以是 http-requset  七层控制
    tcp-request content accept if allow    #tep 层绝收
    tcp-request content reject

基于 session 的具体配置:
global
    log        127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile    /var/run/haproxy.pid
    maxconn    4000
    user        haproxy
    group      haproxy
    daemon
    stats socket /var/lib/haproxy/stats
 
defaults
    mode                    http
    log                    global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor      except 127.0.0.0/8
    option                  redispatch
    retries                3
    timeout http-request    10s
    timeout queue          1m
    timeout connect        10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check          10s
    maxconn                3000
 
frontend web
    log 127.0.0.1 local3
    bind :80,:443
    default_backend  webservers
backend webservers
    option httpchk
    cookie webcookie insert nocache
    balance roundrobin
    server s1 martin:80 check inter 3000 rise 2 fall 5 cookie s1
    server s2 lucia:80  check inter 30000 rise 2 fall 5 cookie s2
listen stats
    bind *:8009
    stats enable
    stats uri /haproxy?stats
    stats auth admin:admin
    stats hide-version
    stats admin if TRUE
    acl allow src 192.168.1.0/24
    acl deny src 192.168.1.111
    tcp-request content reject if deny
    tcp-request content accept if allow
    tcp-request content reject

开启日志记录:
[root@sherry ~]# vim /etc/rsyslog.conf 
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
 
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
local2.*                                                /var/log/haproxy.log
 
 
[root@sherry ~]# /etc/init.d/rsyslog restart

测试结果:

负载均衡之 HAProxy 详解

负载均衡之 HAProxy 详解

Haproxy+Keepalived 搭建 Weblogic 高可用负载均衡集群 http://www.linuxidc.com/Linux/2013-09/89732.htm

Keepalived+HAProxy 配置高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/56748.htm

CentOS 6.3 下 Haproxy+Keepalived+Apache 配置笔记 http://www.linuxidc.com/Linux/2013-06/85598.htm

Haproxy + KeepAlived 实现 WEB 群集 on CentOS 6 http://www.linuxidc.com/Linux/2012-03/55672.htm

Haproxy+Keepalived 构建高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/55880.htm

使用 HAProxy 配置 HTTP 负载均衡器 http://www.linuxidc.com/Linux/2015-01/112487.htm

HAproxy 的详细介绍:请点这里
HAproxy 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-06/132163.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计6948字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中