首页 > 代码库 > haproxy配置

haproxy配置

haproxy配置


资料
http://www.cnblogs.com/dkblog/archive/2011/07/06/2098949.html
HAProxy相比LVS的使用要简单很多,功能方面也很丰富。当 前,HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、内部协议通信服务器等),和7层(HTTP)。在4层模式 下,HAProxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求 (request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则 因支持强大灵活的7层acl规则,广泛作为HTTP反向代理。

我现在用HAProxy主要在于它有以下优点,这里我总结下:

一、免费开源,稳定性也是非常好,这个可通过我做的一些小项目可以看出来,单Haproxy也跑得不错,稳定性可以与LVS相媲美;

二、根据官方文档,HAProxy可以跑满10Gbps-New benchmark of HAProxy at 10 Gbps using Myricom‘s 10GbE NICs (Myri-10G PCI-Express),这个作为软件级负载均衡,也是比较惊人的;

三、HAProxy可以作为MySQL、邮件或其它的非web的负载均衡,我们常用于它作为MySQL(读)负载均衡;

四、自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警,这个也是我非常喜欢它的原因之一;

五、HAProxy支持虚拟主机。

===================================================================================

在做反向代理服务器的负载均衡时,我们通常会使用nginx的均衡配置。其实,haproxy的负载均衡也是属于这一类的。那么关于这方面的配置过程我们现在来进行一下讲解。首先,对haproxy进行一个简单的介绍,之后就是安装和配置环节了。

HAProxy介绍

反向代理服务器,支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入?新的1.3引入了frontend,backend;frontend根据任意 HTTP请求头内容做规则匹配,然后把请求定向到相关的backend.

http://blog.liuts.com/post/223/ (搭建四层负载均衡器)

http://rfyimcool.blog.51cto.com/1030776/413187 (搭建七层负载均衡器)




http://blog.chinaunix.net/uid-27022856-id-3236257.html
HAProxy的优点:
1、HAProxy是支持虚拟主机的,可以工作在4、7层(支持多网段);
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作;
3、支持url检测后端的服务器;
4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的;
5、HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS;
6、HAProxy的算法较多,达到8种;



http://blog.chinaunix.net/uid/10167808/list/1.html?cid=178438

haproxy相关名词
listeners
session
task

ACL
rule

连接处理:_do_poll() ->listener_accept ->session_accept ->fronend_accept()

相关函数
signal_process_queue - 处理信号队列
wake_expired_tasks - 唤醒超时任务
process_runnable_tasks - 处理可运行的任务
jobs == 0 - 无任务可执行,结束循环
cur_poller.poll() - 执行 poll 处理 fd 的 IO 事件
处理可能仍有 IO 事件的 fd


一个请求完全完全有可能因为一些异常原因,或者 请求长度本身就比较大而被拆分到不同的 IP 报文中,一次 read 系统调用可能只读取到其 中的一部分内容。因此,该函数会同时分析已经接收到的数据,并确认是否已经接收到了 完整的 HTTP 请求。只有接收到了完整的 HTTP 请求,该函数处理完,才会交给下一个 analyser 处理,否则只能结束请求的处理,等待接收更多的数据,解析出一个完整的 HTTP 请求才行。

HAProxy 支持多种异步机制,有 select,poll,epoll,kqueue 等。

epoll 的代码在源文件 ev_epoll.c 中。epoll 的关键处理逻辑集中在函数 _do_poll() 中

----------------------------------------------
配置文件的配置段有5个
global:两类参数 1进程管理和安全相关参数   2性能调整相关参数  只能出现一次
defaults   只能出现一次   为其他段提供默认参数
listen       可以出现多次  通过关联前端和后端定义了一个完整的代理,通常只对TCP流量有用
frontend   可以出现多次  定义一系列监听套接字,这些套接字可接受客户端请求并与之建立连接
backend    可以出现多次  定义一系列后端服务器,代理将对应客户端的请求转发到这些服务器
可以只用global,defaults,frontend,backend
可以只用global,defaults,listen

简单例子
global
    daemon
    maxconn 4000
defaults
    mode http
    timeout connect 5000ms
    timeout client  50000ms
    timeout server  50000ms
fronend httpin
    bind *:80      #绑定在所有网卡接口的80端口
    default_backend servers   #默认后端是servers
backend servers
    server  server1 127.0.0.1:8080  maxconn 40
    

global
日志配置:
日志的level: local0~local7 16~23保留为本地使用
emerg 0 系统不可用
alert 1 必须马上采取行动的事件
crit 2 关键的事件
err 3 错误事件
warning 4 警告事件
notice 5 普通但重要的事件
info 6 有用的信息
debug 7 调试信息

spread-checks <0..50 in percent>  后端realserver太多,比如200台,将检测后端是否宕机的检测报文分成xx段发送以免造成haproxy和realserver之间的链路堵塞
spread-checks  25  将检测报文分成4份发送,减轻链路堵塞
    
    


安装

yum install -y haproxy.x86_64

/etc/init.d/haproxy start

vi /etc/haproxy/haproxy.cfg



haproxy配置