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
如需详细配置了解,请查询官网文档