HAproxy均衡负载部署和配置文件详解
HAproxy均衡负载部署和配置文件详解
HAProxy提供高可用性负载均衡以及基于TCPHTTP应用的代理支持虚拟主机,它是免费、快速并且可靠的一种解决方案。根据官方数据,其最高极限支持10G的并发。
HAProxy特别适用于那些负载特大的web站点, 这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
其支持从4层至7层的网络交换,即覆盖所有的TCP协议。就是说,Haproxy 甚至还支持 Mysql 的均衡负载。。
如果说在功能上,能以proxy反向代理方式实现 WEB均衡负载,这样的产品有很多。包括NginxApacheProxylighttpdCheroke 等。
但要明确一点的,Haproxy 并不是 Http 服务器。以上提到所有带反向代理均衡负载的产品,都清一是 WEB 服务器。简单说,就是他们能自个儿提供静态(html,jpg,gif..)或动态(php,cgi..)文件的传输以及处理。而Haproxy 仅仅,而且专门是一款的用于均衡负载的应用代理。其自身并不能提供http服务。
但其配置简单,拥有非常不错的服务器健康检查功能还有专门的系统状态监控页面,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。自1.3版本开始还引入了frontend,backend,frontend根据任意HTTP请求头内容做规则匹配,然后把请求定向到相关的backend
另外, 版本1.3 是处于活跃开发阶段的版本, 它支持如下新特性:
        内容交换 : 可以根据请求(request)的任何一部分 来选择一组服务器, 比如请求的 URI , Host(header) , cookie , 以及其他任何东西.当然,对那些静态分离的站点来说,对此特性还有更多的需求。
        全透明代理 : 曹云金与郭德纲可以用新高考录取变化 客户端IP地址yuanli 或者任何其他地址来连接后端服务器. 这个特性仅在Linux 2.4/2.6内核打了cttproxy 补丁后才可以使用. 这个特性也使得为某器处理部分流量同时又不修改服务器的地址成为可能。
        基于树的更快的调度器 : 1.2.16以上的版本要求所有的超时都设成同样的值以支持数以万计的全速连接. 这个特性已经移植到1.2.17.
        内核TCP拼接 : 避免了内核到用户然后用户到内核端的数据拷贝, 提高了吞吐量同时又降低了CPU使用率 . Haproxy 1.3支持Linux L7SW 以满足在商用硬件上数Gbps 的吞吐的需求。
        连接拒绝 : 因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。 这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点。
        细微的头部处理 : 使得编写基于header的规则更为简单,同时可以处理URI的某部分。
元宵节信息        快而可靠的头部处理 : 使用完全RFC2616 兼容的完整性检查对一般的请求全部进行分析和索引仅仅需要不到2ms 的时间。
        模块化设计 : 允许更多人加入进此项目,调试也非常简单. poller已经分离, 已经使得它们的开发简单了很多. HTTP已经从TCP分离出来了,这样增加新的七层特性变得非常简单. 其他子系统也会很快实现模块化
        投机I/O 处理 : 在一个套接字就绪前就尝试从它读取数据。poller仅推测哪个可能就绪哪个没有,尝试猜测,并且如果成功,一些开销很大的系统调用就可以省去了。如果失败,就会调用这些系统调用。已知的使用Linux epoll()已经净提升起码10%了。
        ACLs : 使用任意规则的任意组合作为某动作的执行条件。
        TCP 协议检查 : 结合ACL来对请求的任意部分进行检查,然后再进行转发。这就可以执行协议验证而不是盲目的进行转发。比如说允许SSL但拒绝SSH
追凶好看吗
        更多的负载均衡算法 : 现在,动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现。其他算法比如Weighted Measured Response Time也很快会实现。
安装:
        1、从 haproxy.1wt.eu/#down 下载最新版本,如  haproxy-1.4. 
        2、解压缩, # tar zcvf haproxy-1.4.  建议移动到工作目录  /usr/local/haproxy/ 下,否则后续安装时还要用PREFIX=/usr/local/haprpxy指定安装路径
        3、运行 make install 即完成安装
                程序为 /usr/local/haproxy    /usr/local/sbin/haproxy 运行程序 haproxy,显示版本信息即说明安装成功
读取配置文件失败
                文档在/usr/local/doc/haproxy
                Man:/usr/local/share/man/man1
配置:    # vi haproxy.cfg
配置内容如下:
global                                #全局设置
        log 127.0.0.1  local0 #日志输出配置,所有日志都记录在本机,通过local0输出
        #log 127.0.0.1  local1 notice
        #log loghost    local0 info
      ulimit-n 82000      #设置每个进程的可用的最大文件描述符
        maxconn 4096        #最大连接数
        chroot /usr/local/haproxy    #改变当前工作目录
        uid 99                      #所属运行的用户uid
        gid 99                      #所属运行的用户组
        daemon                  #以后台形式运行ha-proxy
        nbproc 3                #启动2ha-proxy实例
        pidfile /usr/local/haproxy/run/haproxy.pid    #pid文件位置
        debug        #调试模式,输出启动信息到标准输出
        #quiet    #安静模式,启动时无输出
defaults                      #默认设置
        log    global
        log    127.0.0.1      local3        #日志文件的输出定向
        mode    http                            #所处理的类别,默认采用http模式,可配置成tcp4层消息转发
        option  httplog                        #日志类别,采用httplog
        option  httpclose  #每次请求完毕后主动关闭http通道,ha-proxy不支持keep-alive,只能模拟这种模式的实现

        option  dontlognull
        option  forwardfor  #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip

        option  redispatch
        retries 2                      #3次连接失败就认为服务器不可用,主要通过后面的check检查         
        maxconn 2000        #最大连接数
        balance roundrobin                    #负载均衡算法
        stats  uri    /haproxy-stats        #haproxy 监控页面的访问地址,可通过ip/haproxy-stats访问
        contimeout      5000                    #连接超时时间     
        clitimeout      50000                  #客户端连接超时时间
        srvtimeout      50000              #服务器端连接超时时间
listen app-balancer 0.0.0.0:80
        mode http
      #  log 127.0.0.1 local3
        #cookie ServerID insert nocache
        cookie ServerID prefix
        cookie JSESSIONID prefix
        capture request header Cookie len 200
        capture request header X-Forwarded-For len 15
        capture request header Host len 15
        capture request header Referrer len 15
        appsession JSESSIONID len 52 timeout 1080000
        balance roundrobin
        option httpchk GET /ok.jsp HTTP/1.0  #健康检查
        server app_1 192.168.0.243:8080 cookie app1 minconn 100 maxconn 40960 check i
nter 5000 rise 2 fall 5 weight 2
        server app_2 192.168.0.242:8080 cookie app2 minconn 100 maxconn 40960 check inter 2000 rise 2 fall 5 weight 2
        server app_4 192.168.0.245:8080 cookie app2 minconn 100 maxconn 40960 check inter 2000 rise 2 fall 5 weight 1
        #option forwardfor except 192.168.0.159
        option forwardfor
        stats enable
        stats uri /haproxy-stat
        stats realm "test_123 monitor"
        stats auth admin:admin