HAProxy:基础详解

时间:2014-05-03 15:01:41   收藏:0   阅读:430

一、简介

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

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

二、配置文件格式

配置文件中的参数具体参考:http://cbonte.github.io/haproxy-dconv/configuration-1.4.html

配置文件格式:

全局参数:

global
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the ‘-r‘ option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local2            #定义日志的,需要在syslog中开启
    chroot      /var/lib/haproxy            #指定haproxy工作目录,能提高安全性
    pidfile     /var/run/haproxy.pid        #pid文件文职
    maxconn     40000                       #最大并发连接数
    user        haproxy                     #指定用户运行haproxy
    group       haproxy
    daemon                                  #以守护进程方式工作于后台
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats     #

代理相关配置主要分为四段:

defaults
    mode                    http            #指定协议
    log                     global          #指定日志是从全局继承
    option                  httplog         #开启日志记录http请求等信息
    option                  dontlognull     #启用或禁用日志记录空连接
    option http-server-close  #在支持保持连接的情况下;一旦用户的保持连接超时;是否允许服务器发起关闭.
    option forwardfor       except 127.0.0.0/8 #允许在request 中加入X-Forwarded-For header 发往server
    option                  redispatch      #基于cookie的会话保持时;一旦upstream server宕机时;将此server的会话重新定向到其他的upstream server;
    retries                 3               #重试次数
    timeout http-request    10s             #关闭客户端一次性请求的时长
    timeout queue           1m              #在队列中等待时间
    timeout connect         10s             #定义haproxy将用户请求转发后端upstream server时的超时时长
    timeout client          1m              #客户端非活动连接的超时时长
    timeout server          1m              #等待服务器端非活动连接的超时时长
    timeout http-keep-alive 10s             #设置保持连接模式的超时时长
    timeout check           10s             #检查请求建立后;服务器端没有响应的超时时长
    maxconn                 3000            #每个server默认最大连接数
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  main *:5000    #定义前端的监听地址和端口
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
#定义访问控制列表,上述含义是以后面参数开头path的且不区分大小写为url_static列表
    acl url_static       path_end       -i .jpg .gif .png .css .js
#同上
    use_backend static          if url_static
#如果匹配到url_static列表,则代理至backend定义的static server
    default_backend             app
#否则,默认到app server
backend static    #定义后端server
    balance     roundrobin    算法rr
    server      static 127.0.0.1:4331 check    #check代表健康检测
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    balance     roundrobin
    server  app1 127.0.0.1:5001 check
    server  app2 127.0.0.1:5002 check
    server  app3 127.0.0.1:5003 check
    server  app4 127.0.0.1:5004 check

三、配置文件中部分关键字

1、acl访问控制列表

acl <aclname> <criterion> [flags] [operator] <value> ...

常用的测试标准:

2、balance格式:

balance <algorithm> [ <arguments> ]

balance url_param <param> [check_post [<max_wait>]]

定义负载均衡算法,可用于“defaults”、“listen”和“backend”。<algorithm>用于在负载均衡场景中挑选一个server,其仅应用于持久信息不可用的条件下或需要将一个连接重新派发至另一个服务器时。

调度算法:

3、mode { tcp|http|health }:设定启动的实例的协议类型。

4、errorfile <code> <file>:在用户请求不存在的页面时,返回一个页面文件给客户端而非由haproxy生成的错误代码;可用于所有段中。

5、server <name> <address>[:port] [param*]:为后端声明一个server,因此,不能用于defaults和frontend区段。

<name>:为此服务器指定的内部名称,其将出现在日志及警告信息中;如果设定了"http-send-server-name",它还将被添加至发往此服务器的请求首部中;

[param*]:为此服务器设定的一系参数;其可用的参数非常多,具体请参考官方文档中的说明,下面仅说明几个常用的参数;

参数说明:

6、haproxy的状态信息stats

配置实例:

backend web
  server websrv1 192.168.0.111:80
  stats enable
  stats hide-version
  stats scope   .
  stats uri     /.admin?stats
  stats realm   Haproxy\ Statistics
  stats auth    administrator:password
  stats auth    master:password
  stats admin if TRUE

bubuko.com,布布扣

配置后测试登陆。

haproxy的配置文件格式及一些基本的参数以详细说明;具体的可用根据给定的官方文档做参照。





如有错误;恳请更正。

本文出自 “Soul” 博客,请务必保留此出处http://chenpipi.blog.51cto.com/8563610/1405553

HAProxy:基础详解,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!