HAproxy 配置详解

haproxy介绍

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

HAProxy监听的端口是1080,代理192.168.18.2:10000,127.0.0.1:10000

配置HAProxy Session亲缘性的三种方式:1 用户IP 识别 2 cookie 识别 3 session 识别

haproxy相关配置介绍
一、算法

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(<name>):根据请求报文中指定的header(如use_agent, referer, hostname)进行调度;把指定的header的值做hash计算;
hash-type
map-based:  静态   增加或者删除后端服务器会影响全局
consistent:    动态   增加或删除后端服务影响局部

二、定义后端webserver配置:
servserver name addr [:port] [param*]
<name>服务器的内部名称,出现在日志及警告信息中,如果添加了http-send-server-name,还会将其发往至此服务器的请求首部当中
<address>服务器的地址,支持使用主机名
<port>端口映射,省略时表示与bind的端口相同
<param*> 参数
backup: 设定当前服务器为备用服务器,只在主服务器不可用时启用,相当于错误页
addr:通过此地址去做健康状态监测
check: 健康状态检测;
inter :检测时间间隔;单位为ms, 默认为2000;
fall: up –> down 连续多次的失败监测就将服务器标记为down(soft state, soft state, hard state; )
rise:down –> up 连续多次的成功监测就将服务器标记为up
cookie :为当前服务器设定cookie值,用cookie值做会话黏性
maxconn: 此服务接受的并发连接的最大数量;
maxqueue: 请求队列的最大长度;
observe: 根据流量判断后端server的健康状态;
weight: 指定权重,默认为1,最大为256;0表示不被调度;
redir : 重定向;所有发往此服务器的请求均以302响应;

定义后端服务器及健康监测

listen webserver  *:80
balance    source 
balance    roundrobin
balance    uri
hash-type consistent
option httpchk
balance hdr(Host)
server  web_one 192.168.172.128 check weight 1 maxconn 3000 maxqueue 2000 port 80 fall 3 rise 3
server  web_two 192.168.172.129 check weight 2 maxconn 4000 maxqueue 2000 port 80 fall 3 rise 3

后端http服务时的健康状态的检测方法:
option httpchk
option httpchk< url >
option httpchk< method > < url >
option httpchk< method > < url > < version >


example:

backend bk_myapp
 [...]
 option httpchk get /check HTTP/1.0\r\nHost:\ www.domain.com
 default-server inter 3s fall 3 rise 2
 server srv1 192.168.172.128:80 check
 server srv1 192.168.172.129:80 check
基于浏览器cookie实现session sticky:
backend websrvs
balance     roundrobin
cookie SERVERID insert nocache indirect
server web1 192.168.172.128:80 check weight 1 cookie websrv1
server web2 192.168.172.128:80 check weight 3 cookie websrv2
开启haproxy管理页面
listen statistics 
bind *:9000
stats enable
stats hide-version
#stats scope 
stats uri /haproxyadmin?stats
stats realm "HAPorxy\ Statistics"
stats auth admin:admin
stats admin if TRUE

haproxy动静分离配置

backend phpserver
        balance roundrobin
        option httpchk
        rspidel php
        rspidel Server.*
        rspadd X-Via:192.168.172.130
        rspidel ^User-Agent:
        cookie php indirect nocache
        server phpsrv1 192.168.172.129:80 check weight 1 cookie phpsrv1 maxconn 3000
backend webserver1
        balance roundrobin
        option httpchk                  调用七层检查方式
        rspidel php
        rspidel Server.*                删除客户端请求头部的server信息
        rspadd X-Via:192.168.172.130    添加haproxyip地址
        rspidel ^User-Agent:             
        server websrv1 192.168.172.128:80 check maxconn 3000
frontend mysrvs
        bind *:80
        acl php_page path_end -i .php
        use backend phpserver if php_page        调用匹配到的acl
        default_backend webserver1               调用默认acl

如需详细配置了解,请查询官网文档

你可能感兴趣的:(haproxy配置)