Haproxy配置
3.2 配置haproxy
haproxy安装后会在etc/haproxy目录下生成haproxy.cfg的配置文件,大多数的配置选项都在这个文件中定义
打开配置文件然后修改零添加下列选项:
backend webserver
balance roundrobin
cookie serverid insert nocache indirecta
server web1 192.168.137.131:80 check cookie webserver1
server web2 192.168.137.128:80 check cookie webserver2
1.5 Haproxy 配置文件详解
1.5.1 global 全局配置
主要控制haproxy启动前的进程及相关设置
global
log 127.0.0.1 local0 # 未定义日志级别,记录所有日志
log 127.0.0.1:514 local1 notice #定义haproxy日志级别[error warringinfo debug] 通过syslog服务处理
daemon # 以后台形式运行harpoxy
nbproc 1 # 设置进程数量 设置过程数时,该值的设置应该和服务器的核心数一致
pidfile /usr/local/haproxy/conf/haproxy.pid #haproxy 进程PID文件
ulimit-n 819200 # ulimit 的数量限制
maxconn 4096 #默认最大连接数,需考虑ulimit-n限制
chroot /usr/local/haproxy/var/chroot # chroot运行路径
uid/user 99/haproxy #运行haproxy 用户或UID
gid/group 99/haproxy #运行haproxy 用户组或gid
debug #haproxy 调试级别,建议只在开启单进程的时候调试
spread-checks 3 # 健康检查间隔时间
quiet # 安静模式,启动时无输出
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin # 开启socket支持
stats timeout 2m
1.5.2 default 默认配置
如果frontend backend listen段未设置,则默认使用defaults段的设置
defaults
log global
mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
option httplog #日志类别,采用httplog
option dontlognull #不记录健康检查日志信息
retries 2 #两次连接失败就认为是服务器不可用,也可以通过后面设置
option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
option httpclose #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能模拟这种模式的实现
#option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器,以后将不支持
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
maxconn 4096 #默认的最大连接数
timeout connect 5000ms #连接超时
timeout client 30000ms #客户端超时 (根据客户的习惯,一般设置在20-30s之间)
timeout server 30000ms #服务器超时 (后端服务器的超时之和不要大于客户访问的超时时间)
#timeout check 2000 #心跳检测超时
#timeout http-keep-alive10s #默认持久连接超时时间
#timeout http-request 10s #默认http请求超时时间
#timeoutqueue 1m #默认队列超时时间
balance roundrobin #设置默认负载均衡方式,轮询方式
#balance source # 设置默认负载均衡方式,类似于nginx的ip_hash
#balnace leastconn #设置默认负载均衡方式,最小连接数
1.5.3 listen 统计页面
listen admin_stats #设置Frontend和Backend的组合体,监控组的名称,按需要自定义名称
bind 0.0.0.0:1080 # 监控网卡地址 0.0.0.0或* 代表监控所有
mode http #http的7层模式
option httplog #采用http日志格式
option forwardfor #记录客户端真实IP
cookie SERVERID insert indirect
timeout server 15s
timeout connect 15s
#log 127.0.0.1 local0 err #错误日志记录
maxconn 10 #默认的最大连接数
stats enable # 开启状态
stats refresh 30s #统计页面自动刷新时间
stats uri /stats #统计页面url
stats realm XingCloud\ Haproxy #统计页面密码框上提示文本
stats auth admin:admin #设置监控页面的用户和密码:admin,可以设置多个用户名
stats auth Frank:Frank #设置监控页面的用户和密码:Frank
stats hide-version #隐藏统计页面上HAProxy的版本信息
stats admin if TRUE #设置手工启动/禁用,后端服务器(haproxy-1.4.9以后版本)
balance roundrobin # 负载均衡策略
server web01 192.168.137.101:80 check port 2000 fall 3
server web02 192.168.137.102:80 check port 2000 fall 3
########设置haproxy 错误页面#####
errorfile 403 /home/haproxy/haproxy/errorfiles/403.http
errorfile 500 /home/haproxy/haproxy/errorfiles/500.http
errorfile 502 /home/haproxy/haproxy/errorfiles/502.http
errorfile 503 /home/haproxy/haproxy/errorfiles/503.http
errorfile 504 /home/haproxy/haproxy/errorfiles/504.http
1.5.4 frontend 前端配置
bind 10.204.3.250:80 #VIP
#这里建议使用bind *:80的方式,要不然做集群高可用的时候有问题,vip切换到其他机器就不能访问了。
acl web hdr(host) -i www.abc.com
#acl后面是规则名称,-i是要访问的域名,
acl img hdr(host) -i img.abc.com
1.5.5 backend 后端配置
backend www.abc.com # webserver作用域 可以使用域名的方式 www.a.com
mode http
balance roundrobin # #负载均衡算法 banlance roundrobin 轮询,
balance source 保存session值,支持static-rr,leastconn,first,uri等参数
【注意】 ACL 名称可以重复定义
1.10.1 基于ACL其于URI的跳转
acl web_a hdr(host) –i www.baidu.com
acl web_b hdr(host) –i map.baidu.com
use_backend www if web_a
use_backend map if web_b
default_backend www
【实例讲解】
- 当用户输入的域名是www.baidu.com时,就跳转到后端地址池中的名为www的池定义的服务器
- 当用户输入的域名是map.baidu.com时,就跳转到后端地址池中的名为map的池定义的服务器
- 当用户输入的域名没有匹配到上面的acl,就默认走www的池
1.10.2 基于acl实现URI地址目录的跳转
函数: path.beg 匹配跟径开头
acl img path.beg /images/
acl php path.beg /php/
use_backend nginx_img if img
use_backend nginx_php if php
default_backend nginx_php
backend nginx_img
mode
http
balance
roundrobin
server
server2
10
.204.3.23:80check
port
80
inter5000
fall5
backend nginx_php
mode
http
balance
roundrobin
server
server2
10
.204.3.24:80check
port
80
inter5000
fall5
【实例讲解】
当用户输入的路径是/images/时,就跳转到后端nginx_img池中定义的服务器
当用户输入的路径是/php/时,就跳转到后端nginx_php池中定义的服务器
当用户输入的不包含上面路径时,默认走nginx_php
配置haproxy代理访问
##在haproxy.cfg中添加如下段配置;cas有多个节点时,back
end下配置多行server:
default_backend root
backend root
mode http
option forwardfor
option httpchk GET /
balance source
server wget 10.10.110.101:8080 check inter 10s
server wget 10.10.110.102:8080 check inter 10s
server:这个关键字用来定义多个后端真实服务器
使用格式为:
server
其中,每个参数含义如下:
:后端真实服务器的IP 地址或主机名。
[param*]:为后端服务器设定的一系参数,可用参数非常多,这里仅介绍常用的一些参数:
check:表示启用对此后端服务器执行健康状态检查。
inter:设置健康状态检查的时间间隔,单位为毫秒。
rise:设置从故障状态转换至正常状态需要成功检查的次数,例如。“rise 2”表示2 次检查正确就认为此服务器可用。
fall:设置后端服务器从正常状态转换为不可用状态需要检查的次数,例如,“fall 3”表示3 次检查失败就认为此服务器不可用。
cookie:为指定的后端服务器设定cookie 值,此处指定的值将在请求入站时被检查,第一次为此值挑选的后端服务器将在后续的请求中一直被选中,其目的在于实现持久连接的功能。上面的“cookie server1”表示web1 的serverid 为server1。同理,“cookie server2”表示web2 的serverid 为server2。
weight:设置后端真实服务器的权重,默认为1,最大值为256。设置为0 表示不参与负载均衡。
backup:设置后端真实服务器的备份服务器,仅仅在后端所有真实服务器均不可用的情况下才启用。
cookie:表示允许向cookie 插入SESSION_COOKIE,每台服务器的SERVERID 可在下面的server 关键字中使用cookie 关键字定义。
option httpchk:此选项表示启用HTTP 的服务状态检测功能。HAProxy 作为一款专业的负载均衡器,它支持对backend 部分指定的后端服务节点的健康检查,以保证在后端backend 中某个节点不能服务时,把从frotend 端进来的客户端请求分配至backend 中其他健康节点上,从而保证整体服务的可用性。
“optionhttpchk”的用法如下:
option httpchk
其中,各个参数的含义如下:
method:表示HTTP 请求的方式,常用的有OPTIONS、GET、HEAD 几种方式。一般的健康检查可以采用HEAD 方式进行,而不是才采用GET 方式,这是因为HEAD 方式没有数据返回,仅检查Response 的HEAD 是不是200 状态。因此相对与GET 来说,HEAD 方式更快,更简单。
uri:表示要检测的URL 地址,通过执行此URL,可以获取后端服务器的运行状态。在正常情况下将返回状态码200,返回其他状态码均为异常状态。
version:指定心跳检测时的HTTP 的版本号。