共计 6948 个字符,预计需要花费 18 分钟才能阅读完成。
HAProxy 提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy 特别适用于那些负载特大的 web 站点,这些站点通常又需要会话保持或七层处理。HAProxy 运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的 web 服务器不被暴露到网络上。
HAProxy 实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间 (User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个 CPU 时间片(Cycle) 做更多的工作。————百度百科
安装:
[root@sherry ~]# yum install haproxy -y
配置文件说明:
[root@sherry ~]# vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local2 # <address> <facility> [max level [min level]]:定义全局的 syslog 服务器,最多可以定义两个;
chroot /var/lib/haproxy #修改 haproxy 的工作目录至指定的目录并在放弃权限之前执行 chroot()操作,可以提升 haproxy 的安全级别,不过需要注意的是要确保指定的目录为空目录且任何用户均不能有写权限;
pidfile /var/run/haproxy.pid
maxconn 4000 #设定每个 haproxy 进程所接受的最大并发连接数,其等同于命令行选项“-n”;“ulimit -n”自动计算的结果正是参照此参数设定的;
user haproxy
group haproxy
daemon #让 haproxy 以守护进程的方式工作于后台,其等同于“-D”选项的功能,当然,也可以在命令行中以“-db”选项将其禁用;
stats socket /var/lib/haproxy/stats
defaults
mode http
工作模式:
http 对应用层数据做深入分析,因此支持 7 层的过滤、处理、转换等机制;
tcp haproxy 在客户端和 upstream server 之间建立一个全双工的连接;
不会对应用层协议做任何检查;
SSL、MySQL、SSL 等都应该使用此模式;
log global 使用全局配置的日志
#log <address> <facility> [<level> [<minlevel>]] 重新指定 可以定在 frontend
option httplog
option dontlognull
option httpclose #短连接
option logasap #先记录日志
option dontlognull #不记录空
option http-server-close #长链接时候 客户端超时 服务器自动断开连接
option Redispatch #基于 cookie 时候 后端服务器故障时候 自动迁移
option forwardfor except 127.0.0.0/8
#{httpd.conf LogFormat “%{X-Forwarded-For}i %l %u %t \”%r\” %>s %b” common }
capture request header Host len 20 #记录 host
capture request header Referer len 60 #记录 referer
retries 3
timeout http-request 10s #三次握手等待时长
timeout queue 1m #后端在队列中等待时长
timeout connect 10s # 发送给后端时 超时时长
timeout client 1m #客户端非活动连接最大时长
timeout server 1m #等待后端服务器的发送数据的时长
timeout http-keep-alive 10s #保持连接的时长
timeout check 10s #健康检测超时时长
maxconn 3000
frontend main *:5000 #定义前端
捕获信息
capture request header Host len 15
capture request header X-Forwarded-For len 15
capture requset Referrer len 15
capture request header <HEADER> len <LENGTH>
capture response header <HEADER> len <LENGTH>
errorfile 404 /demo.php
log 127.0.0.1 local3
bind :80,:443 #绑定端口 只能定义在 frontend listen
acl index path -i /index.html
acl url_static path_beg -i /static /images /Javascript /stylesheets #地址的开始部分
acl url_static path_end -i .jpg .gif .png .css .js #地址的结尾
use_backend static if url_static #如果条件符合上面的定义的 则引用的后端
use_backend app if <condition>
use_backend app unless <condition>
default_backend app #默认的后端
backend static #定义一个后端
检查方法:
option httpchk
option httpchk <uri>
option httpchk <method> <uri>
option httpchk <method> <uri> <version>:不能用于 frontend 段,例如:
cookie <name> [rewrite 重写 |insert 拆入 |prefix 前缀 多 cookie 放在应用程序之前] [indirect] [nocache] [postonly] [preserve] [httponly] [secure] [domain<domian>]* [maxidle<idle>] [maxlife<life>]
还要在每台 real-server 后加 cookie 标志
cookie web insert nocache 缓存服务器不保存 cookie
cookie SESSION_COOKIE insert indirect nocache 应用服务器
hash-type: map-based 权重取莫 默认
consistent hash 一致性 后端服务器用这个
balance roundrobin #调用方法 轮询 只能定义在 defaults listen backend
roundrobin:加权轮询 可以增加后来服务器 支持慢启动 图片服务器
static-rr 加权静态轮询 后面增加的服务器不生效,除非重启服务 服务器重新上线后理解分配高连接
leastconn 最少连接 支持权重改变 支持慢启动 mysql 从服务器
source 源地址 ip hash 并保存在 hash 表 支持加权 在 ip 层调用
uri 基于用户请求的 uri 提高命中缓存命中率
url_param
hdr(<name>) #基于某个指定首部 use_domain_only www.a.com 仅计算 a.com
rdp-cookie 在应用调用
rdp-cookie(name)
server static 127.0.0.1:4331 check #后端服务器 定义名称 服务器地址 健康状态检测
backend app #定义后端
balance roundrobin #调度方法轮训
server app1 127.0.0.1:5001 check
#backup 设定为备用服务器,仅在负载均衡场景中的其它 server 均不可用于启用此 server;
#check:启动对此 server 执行健康状态检查,其可以借助于额外的其它参数完成更精细的设定,如:
check inter 3000 rise 2 fall 5
inter <delay>:设定健康状态检查的时间间隔,单位为毫秒,默认为 2000;也可以使用 fastinter 和 downinter 来根据服务器端状态优化此时间延迟;
rise <count>:一般 2 次 设定健康状态检查中,某离线的 server 从离线状态转换至正常状态需要成功检查的次数;
fall <count>:一般 5 次 确认 server 从正常状态转换为不可用状态需要检查的次数;
#cookie <value>:为指定 server 设定 cookie 值,此处指定的值将在请求入站时被检查,第一次为此值挑选的 server 将在后续的请求中被选中,其目的在于实现持久连接的功能;
#maxconn <maxconn>:指定此服务器接受的最大并发连接数;如果发往此服务器的连接数目高于此处指定的值,其将被放置于请求队列,以等待其它连接被释放;前端连接个数小于等于后端(maxconn+maxqueue)*server-number
#maxqueue <maxqueue>:设定请求队列的最大长度;
#observe <mode>:通过观察服务器的通信状况来判定其健康状态,默认为禁用,其支持的类型有“layer4”和“layer7”,“layer7”仅能用于 http 代理场景;
#redir <prefix>:启用重定向功能,将发往此服务器的 GET 和 HEAD 请求均以 302 状态码响应;需要注意的是,在 prefix 后面不能使用 /,且不能使用相对地址,以免造成循环;例如:
server srv1 172.16.100.6:80 redir http://imageserver.linuxidc.com check
#weight <weight>:权重,默认为 1,最大值为 256,0 表示不参与负载均衡;
server app2 127.0.0.1:5002 check
server app3 127.0.0.1:5003 check
server app4 127.0.0.1:5004 check
listen stats
bind *:8009
stats enable
stats uri /haproxy?stats
stats auth admin:admin
stats hide-version
stats admin if TRUE 认证通过允许管理 一般用 stats admin if LOCALHOST 本机 比较危险
acl allow src 192.168.1.0/24 #定义允许访问段
acl deny src 192.168.1.111 #定义拒绝访问的网络
tcp-request content reject if deny #tcp 层拒绝 也可以是 http-requset 七层控制
tcp-request content accept if allow #tep 层绝收
tcp-request content reject
基于 session 的具体配置:
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
frontend web
log 127.0.0.1 local3
bind :80,:443
default_backend webservers
backend webservers
option httpchk
cookie webcookie insert nocache
balance roundrobin
server s1 martin:80 check inter 3000 rise 2 fall 5 cookie s1
server s2 lucia:80 check inter 30000 rise 2 fall 5 cookie s2
listen stats
bind *:8009
stats enable
stats uri /haproxy?stats
stats auth admin:admin
stats hide-version
stats admin if TRUE
acl allow src 192.168.1.0/24
acl deny src 192.168.1.111
tcp-request content reject if deny
tcp-request content accept if allow
tcp-request content reject
开启日志记录:
[root@sherry ~]# vim /etc/rsyslog.conf
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
local2.* /var/log/haproxy.log
[root@sherry ~]# /etc/init.d/rsyslog restart
测试结果:
Haproxy+Keepalived 搭建 Weblogic 高可用负载均衡集群 http://www.linuxidc.com/Linux/2013-09/89732.htm
Keepalived+HAProxy 配置高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/56748.htm
CentOS 6.3 下 Haproxy+Keepalived+Apache 配置笔记 http://www.linuxidc.com/Linux/2013-06/85598.htm
Haproxy + KeepAlived 实现 WEB 群集 on CentOS 6 http://www.linuxidc.com/Linux/2012-03/55672.htm
Haproxy+Keepalived 构建高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/55880.htm
使用 HAProxy 配置 HTTP 负载均衡器 http://www.linuxidc.com/Linux/2015-01/112487.htm
HAproxy 的详细介绍:请点这里
HAproxy 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-06/132163.htm