代理配置段:有四个配置段
default:设定默认参数,
frontenf:前端服务器的设定
backend:后端服务器的设定
listening:是设定前端和后端一一对应的设定
参数:
1bind:用于指定监听的端口,设定在frontend和listen段中,用于前端的可以监听多个端口 ,指明ip地址和一个端口范围,ip地址可省
如
bind :443 ssl crt /etc/haproxy/site.pem
2balance 用于后端的调度算法,用在backend和listen段中
几种调度算法有:
) roundrobin 轮询是动态的,指这种算法支持权重的运行时调度,本身表示加权的 , 最多支持4095个后端服务器
同时支持man启动(man启动是指,当在后端轮询的服务器中,再添加一个服务器,他会慢慢的将前两台服务器上的请求慢慢移到这台上,不会一下子一堆的请求,否则容易将服务器瞬间压死)缺陷可能后端服务器有限制
) static-rr 是静态轮询调度,不支持权重运行时调度, 不支持man启动,对后端服务器没有限制
)leastconn最小连接 加权最小连接,计算后端服务器连接数时,要先除以它的权重得到的最小数将处理下一次请求,也是动态的
)first :请求会先请求第一台,把第一台服务器请求满了,才会请求第二台
)source 原地址哈希
几种调度算法
3 hash-type 指定哈希类型 有2种:
map-based取模法 : 是指将后端服务器按照权重虚拟为多个节点,当请求的哈希值对应第几个节点,就对应做映射
缺点:一但服务器的位置发生变动,它会影响全局的取模结果
consistent一致性哈希:服务器变动只会影响局部
4 uri :是指不管前端的那个客户端请求,只要访问相同的uri就分发给同一台服务器上 提高缓存命中率 ,特别适用于缓存服务器上
5 uri_param 基于rul中某个指定的key 基于parameter 绑定,将同一个key的值发往到同一个服务器上,key不同的根据算法调度
用 uri uri是动态静态的取决于hash-type 只要来自同一个url发往同一台主机
backend websrvs
balance uri
server srv1 192.168.1.104: check
server srv2 192.168.1.105: check
hash-type consistent
for I in {..}; do curl http://192.168.1.200/test1.html ; done
6 hdr (<name>)此处有由(name)指定的将http首部的名称的值做哈希计算,将相同的发往相同的服务器上
如 hdr(cookie) 是基于cookie做绑定
7 rdp-cookie 远程桌面协议
举例:
基于first
backend websrvs
balance first
server srv1 192.168.1.104: check maxconn (最大并发数3个)
server srv2 192.168.1.105: check
压测:ab -c -n http://192.168.1.102 (-c并发数) 压测看不出效果
for I in {..} ; do curl http://192.168.1.102; done
基于first调度算法
backend websrvs
balance hdr(user-agent) 同种浏览器调度在用一个服务器上
server srv1 192.168.1.104: check
server srv2 192.168.1.105: check
hash-type consistent
use_backend: 使用指定后端
default_backend: 使用默认后端要使用的默认
7 compression 压缩 在四处位置都可以使用的
compression algo gzip |identity 指定压缩算法
compression algo deflate
compression type <text/html> 只对那些类型做压缩
8 server 用于backend 后端中指定后端主机,后面可以跟相应的参数用在listen和backend中
如:server srv1 192.168.1.104:80 check
Server 后面参数:
1) backup 指备用,
2)check 健康检测 默认是向服务器对应端口做健康检查
检查的方法有:
addr:检测使用ip地址 设定检测的地址
port:针对端口检测
inter <delay> 连续两次的检测之间的时间间隔默认为2000ms
rise <count> 连续检测多少次,结果成功则服务器标记ok 默认2次
fall <count> 连续检测多次,结果为失败,则标记不可用默认3次
option httpchk 对http主页进行检测参数
option httpchk OPTIONS * HTTP/1.1 \r\nHost:\ www 指明请求的uri
-----使用OPTIOS 方法,*表示对所有uri http版本1.1 主机名www 进行检查
oprion httpchk GET /test.html HTTP/1.0
查看日志:
tail -f /var/log/httpd/access.log
8 cookie <value> 设定一个cookie值,会基于cookie值实现cookie会话
9 maxconn 最大并发连接数
10 maxqueue 队列,:若一个服务器最大请求是3000 ,当有3500是将多的500暂存于队列中
11 minconn 最小连接,当设定了最小连接,他的最大连接是动态计算得出的
12 no-error : 在探测出后端服务器故障时的行动策略
fastinter :快速探测
fail-check: 故障检测
sudden-death: 告知故障
mark-down:标记为不可用
13 no-mark-down: 标记为不可用后的操作
shutdown-sessions: 将之前的该服务器上的所有请求切断
14 no-mark-up: 当服务器标记为可用时的操作
15 redir :重定向 访问时转接到百度
16 weight 定义服务器主机的权重
Server srv1 192.168.1.104:80 check weight 2
17 stats enable 启动状态页
Stats uri: 访问: 172.168.1.10/haproxy?stats 默认的url
Stats auth: 默认不做访问限制
Stats enable 启动统计页
启动统计页,基于默认参数:
Stats uri /haproxy?stats
Stats realm HAProxy Statistics
Stats auth : no
Stats scope : no
Stats auth <user>:<passwd> 认证的账号密码。可使用多次
Stats realm <realm> 认证时的realm提示
Stats uri : 自定义stats page 的uri
Frontend myweb *:
Stats enable
Stats uri /myproxy?admin
Stats realm “HAproxy stats page”
Stats auth admin:admin
Compression algo gzip
Compression type text/html text/plain application/xml application/javascript
Default_backend webserver
Stats admin if TRUE (如果永远为真使用)
单独定义一个stats
Listen stats
Bind *:
Stats enable
Stats uri /myproxy?admin
Stats realm “HAProxy stats page”
Stats auth admin:admin
Stats admin if TRUE
重启服务
访问:192.168.1.104:/myproxy?admin
18 Maxconn: 未指定的frontend定义最大并发数默认2000
Maxconn 3000
19 Mode (tcp|http|health)
Tcp基于4层实现代理
http仅基于7层http协议时使用
health:工作为健康状态的响应模式,当链接请求到达时正常则回应ok,后即断开连接
listen ssh
bind * :
balance leastconn
mode tcp 基于4层调度
server sr1 192.168.1.104: check
server sr2 192.168.1.105: check
重启服务
#ssh root@192.168.1.104 -p
20 Cookie 参数: 不能用在frontend
可以实现基于cookie的会话保持
LB的会话保存机制有3种
hash :通过hash值做会话绑定
源ip
Cookie
Uri
会话集群之间会话同步 (tomcat 中的msm机制)
会话服务器 memcached /redis
Backend webserver
cookie WEBSR insert nocache indirect cookie建为websrv 对nocache indirect类数据做cookie
Server srv1 192.168.1.104: check cookie srv1 值为srv1
Server srv2 192.168.1.105: check cookie srv2
21 errorfile 自定义错误页 4个定义段都可以定义
errorfile /etc/haproxy/errorfiles/400badreq.html
errotfile /dev/null
errorfile /etc/haproxy/errorfiles/403forbid.http
errorfile /etc/haproxy/error/503sorry.http
22errorloc 类似于重定向响应
errorloc 403 http://mageedu.com/403.html
23 reqadd 向请求报文中添加首部 不能用在defent 配置段
reqadd X-proxy-by:\ HAproxy 添加的内容 if来表示什么条件下添加
24 rspadd 向响应报文添加首部
rspadd X-proxy-by:\ HAproxy 在响应报文中添加
25 rspdel 删除响应报文中的值
rspdel ^server: .* 删除报文中的server信息
26 reqdel
日志系统:
Log global 使用全局定义的日志
No log 不使用日志