HAproxy是基于第三方应用实现的负载均衡技术,
基于TCP(第四层)和HTTP(第七层)应用的负载均衡软件:可以根据报文内容再配合负载均衡算法来选择
适用于并发量特别大且需要持久连接或四层和七层处理机制的web系统
make TARGET=linux26 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
cp examp/auth.cfg /usr/local/haproxy/conf复制一份配置文件过去
global设定全局配置参数;defaults配置默认值;frontend设置接受用户请求的前段虚拟节点;backend设置集群后端的配置;
listen frontend和backend的结合体,两种方式任选一种
配置文件:
global
# chroot /var/empty/
uid nobody
gid nobody
log 127.0.0.1 local0 info 使用本地日志系统
maxconn 8192 可接受的最大并发连接数,等同ulimit -n
daemon
nbproc 1 启动时创建的进程数,小于CPU核心
pidfile /usr/local/haproxy/logs/haproxy.pid 启动进程的用户必须可访问此文件
defaults
mode http 分析报文.不与RFC格式兼容的请求都被废弃 tcp建立全双工连接,不检查七层报文 health已被废弃
retries 3 失败重试次数,三次之后设置为不可用
timeout connect 3s 连接到一台服务器最长等待时间,默认单位毫秒
# timeout queue 11000
# timeout tarpit 12000
timeout client 20000 连接客户端发送数据最长等待时间
# timeout http-request 40000
# timeout http-keep-alive 5000
timeout server 40000 服务器回应客户端数据发送的最长等待时间
timeout check 7000 对后端服务器的检测超时时间
# option contstats
# option log-health-checks
frontend www
bind *:80定义监听的套接字
mode http
option httplog 启用日志记录http请求
option forwardfor 向后端服务器的请求添加X-Forwarded-For记录客户端IP
option httpclose完成一次连接后主动关闭
log global使用全局日志配置
default_backend htmpool指定一组后端真实服务器
backend htmpool
mode http
option redispatch将客户的请求强制重定向到另外一台健康的服务器
option abortonclose自动结束当前队列中处理时间较长的连接
balance roundrobin
{roundrobin 轮叫 static-rr权重轮叫 source原地址hash
leastconn适合长时间 uri uri_param hdr}
cookie SERVERID想cookie插入
option httpchk HEAD /index.html
log global
server s1 192.168.1.201:80 check inter 2000 cookie server1 weight 6 ;backup 192.168.1.100
server s2 192.168.1.202:80 check inter 2000 cookie server2 weight 6 rise 2两次成功就加回 fall 3三次失败就设置不可用
listen admin_stats 设置一个监听界面
bind 0.0.0.0:9188
mode http
log 127.0.0.1 local0 err
stats refresh 30s
stats uri /haproxy
stats realm welcome login\ Haproxy密码框上的提示信息
stats auth admin:123123
stats hide-version
stats admin if TRUE支持手工禁用后端真实服务器
日志配置:
$Modload imudp 模块
$UDPServerRun 514 监听端口
local3.* /usr/local/haproxy/logs/haproxy.log
local0.* /usr/local/haproxy/logs/haproxy.log
SYSLOGD_OPTIONS='-c 2 -r接收远程日志 -m 0"
ACL:放在front内,根据backend分发
acl 名称 方法 -i不区分大小写 匹配的路径或者正则表达式
acl方法:hdr_reg(host)正则匹配 ,hdr_dom(host) 完整域名, hdr_beg(host)以开头 ,
url_sub检查匹配, url_dir, path_beg开头匹配, path_end结尾匹配
与方法一起使用的有use_backend default_backend
acl www_policy hdr_reg(host) -i ^(www.z.cn|z.cn)客户端以www.z.cn|z.cn开头的域名发送请求时返回ture
acl bbs_policy hdr_dom(host) -i bbs.z.cn 客户端通过bbs.z.cn发送请求时返回true
acl url_policy url_sub -i buy_sid= 当URL中包含buy_sid时返回true
use_backend server_www if www_policy 满足www policy规则时,发送到server_www
·····
···
default_backend server_cache
haproxy -f 配置文件 -st重启 -sf完成 -db禁用后台模式 -n最大并发连接数 -c检查配置文件 -q安静模式