设为首页 收藏本站
查看: 1063|回复: 0

[经验分享] HAProxy基本介绍及简单配置

[复制链接]
YunVN网友  发表于 2019-1-1 14:53:28 |阅读模式
  
HAProxy简介
  HAProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,HAProxy是完全免费的、借助HAProxy可以快速并且可靠的提供基于TCP和HTTP应用的代理解决方案。
  

  HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
  HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作。
  

  HAProxy安装
  
  RHEL系,在CentOS6.4+以后,HAProxy就被收录进base源中
[root@bogon ~]# yum info haproxy
已加载插件:fastestmirror
Determining fastest mirrors
可安装的软件包
名称    :haproxy
架构    :x86_64
版本    :1.5.14
发布    :3.el7
大小    :833 k
源    :base
简介    : TCP/HTTP proxy and load balancer for high availability environments
网址    :http://www.haproxy.org/
协议    : GPLv2+
描述    : HAProxy is a TCP/HTTP reverse proxy which is particularly suited for high
         : availability environments. Indeed, it can:
         :  - route HTTP requests depending on statically assigned cookies
         :  - spread load among several servers while assuring server persistence
         :    through the use of HTTP cookies
         :  - switch to backup servers in the event a main server fails
         :  - accept connections to special ports dedicated to service monitoring
         :  - stop accepting connections without breaking existing ones
         :  - add, modify, and delete HTTP headers in both directions
         :  - block requests matching particular patterns
         :  - report detailed status to authenticated users from a URI
         :    intercepted by the application  因此,直接安装即可
[root@bogon ~]# yum install haproxy -y  

  下面介绍一下基本用法
  配置分为两段:
      global
  进程及安全配置相关的参数
  性能调整相关的参数
  Debug参数
  proxies:
  defaults:默认
  listen:监听
  frontend:前端
  backend:后端
  示例:
      frontend main *:80
          default_backend websrvs
  

      backend websrvs
          balance roundrobin
  server web1 172.18.100.68 check
          server web2 172.18.100.69 check
  

  代理参数:
  balance: 指明调度算法;
      动态:权重可动态调整
      静态:调整权重不会实时生效
  

      roundrobin: 轮询,动态算法,每个后端主机最多支持4128个连接;
      static-rr: 轮询,静态算法,每个后端主机支持的数量无上限;
      leastconn: 根据后端主机的负载数量进行调度;仅适用长连接的会话;动态;
      source: 源地址哈希
      hash-type:
          map-based:取模法;静态;
          consistent:一致性哈希法;动态;
      uri:
       hash-type
          map-based:
          consistent:
      url_param: 根据url中的指定的参数的值进行调度;把值做hash计算,并除以总权重;
      hash-type
          map-based:
          consistent:
  hdr():根据请求报文中指定的header(如use_agent, referer, hostname)进行调度;把指定的header的值做hash计算;
      hash-type
      map-based:
      consistent:
  

  bind:
      只能用于frontend, listen;
  mode:

      HAProxy的工作模式;默认为tcp;
      tcp, http, health
  

  log:
  

  maxconn:
  

  default_backend:
      为frontend指明使用的默认后端;
  

  use_backend: 条件式后端调用;
  

  server:
  

  server  [:port] [param*]
      backup: 设定当前server为backup server;
      check: 健康状态检测;
          inter :检测时间间隔;单位为ms, 默认为2000;
          fall: up --> down, soft state, soft state, hard state;
          rise:down --> up,
      cookie :
      maxconn: 此服务接受的并发连接的最大数量;
      maxqueue: 请求队列的最大长度;
      observe: 根据流量判断后端server的健康状态;
      weight: 指定权重,默认为1,最大为256;0表示不被调度;
      redir : 重定向;所有发往此服务器的请求均以302响应;
  

  后端http服务时的健康状态的检测方法:
      option httpchk
  

  基于浏览器cookie实现session sticky:
      backend websrvs
  balance     roundrobin
      cookie SERVERID insert nocache indirect
      server web1 172.18.1.68:80 check weight 1 cookie websrv1
      server web2 172.18.1.69:80 check weight 3 cookie websrv2
  

      要点:
          (1) 每个server有自己惟一的cookie标识;
      (2) 在backend中定义为用户请求调度完成后操纵其cookie
  

  启用stats:
      listen statistics
  bind *:9090
  stats enable
  stats hide-version
  #stats scope .
  stats uri /haproxyadmin?stats
  stats realm "HAPorxy\ Statistics"
  stats auth admin:mageedu
  stats admin if TRUE
  

  向日志中记录额外信息:
          capture request header
          capture response header
  

      当mode为http时,记录丰富的日志信息:
          option httplog
  

  错误页面重定向:
      errorfile: 使用haproxy主机本地文件进行响应;
      errorloc, errorloc302: 使用指定的url进行响应,响应状态码为302;不适用于GET以外的其它请求方法;
      errorloc303:返回303状态码;
  

  访问控制:
      http_request
      tcp_request
  

  添加请求或响应报文首部:
      reqadd
      rspadd
  

  ACL
作用:haproxy ACL具有很强大的功能,能够定义三到七层的规则。ACL的作用,就是为了匹配一些特别的请求,然后对其进行修改或者分发到不同的服务器组中      定义,及调用;
格式: acl [flags] [operator] [] .
  一个例子,将以.php结尾的发往另一台主机,从而实现动静分离

frontend main
    bind *:80
    acl url_static path_end -i .php
    use_backend webphp if url_static
    default_backend websrv
backend webphp
    balance roundrobin
    server srvphp 172.18.1.131:80 check
backend websrv
    balance roundrobin
    server srv1 172.18.1.130:80 check
listen stats *:9001
    stats enable
    stats uri /haadmin?stats  

  

  一个实例:
  一台主机安装HAProxy(172.18.1.113),反代用户请求至172.18.1.130和172.18.1.131主机上,并实现负载均衡和健康监测功能,并提供一个状态页
  安装HAProxy

  编辑配置文件
listen websrv
    balance roundrobin
    server srv1 172.18.1.130:80 check
    server srv2 172.18.1.131:80 check
listen stats *:9001
    stats enable
    stats uri /haadmin?stats  分别给httpd服务器启动服务并提供测试页

  

  用curl命令请求,可以实现负载均衡的效果
[root@bogon haproxy]# curl 172.18.1.113
RS-1
[root@bogon haproxy]# curl 172.18.1.113
RS-2
[root@bogon haproxy]# curl 172.18.1.113
RS-1
[root@bogon haproxy]# curl 172.18.1.113
RS-2  

  查看状态页

  

  

  完善,实现动静分离,172.18.1.130提供静态页面服务,172.18.1.131提供动态页面服务
frontend main
    bind *:80
    acl url_static path_end -i .php
    use_backend webphp if url_static
    default_backend websrv
backend webphp
    balance roundrobin
    server srvphp 172.18.1.131:80 check
backend websrv
    balance roundrobin
    server srv1 172.18.1.130:80 check
listen stats *:9001
    stats enable
    stats uri /haadmin?stats  

  测试
[root@bogon haproxy]# curl 172.18.1.113
RS-1
[root@bogon haproxy]# curl 172.18.1.113
RS-1
[root@bogon haproxy]# curl 172.18.1.113
RS-1
[root@bogon haproxy]# curl 172.18.1.113
RS-1  

  测试php信息

  






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-658356-1-1.html 上篇帖子: HAproxy基础(1)-理论篇 下篇帖子: 【中级篇】使用Haproxy搭建WEB群集
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表