type
status
date
slug
summary
tags
category
icon
password
ext
order
comment
HAProxy的配置文件为/etc/haproxy/haproxy.cfg
配置文件结构
- global:全局配置段
- 进程及安全配置相关的参数
- 性能调整相关参数
- Debug参数
- proxies:代理配置段
- defaults:为frontend, listen, backend提供默认配置
- fronted:描述了一组接受客户端连接的侦听套接字
- backend:代理将连接到的一组服务器以转发传入连接
- listen:定义一个完整的代理,其前端和后端部分组合在一个部分中
global常用配置项
进程及安全配置相关的参数
- chroot :将当前目录更改为并在之前执行chroot(),如果HAProxy被攻破了,也只能得到一个假的根环境,安全方面的设置
- deamon:运行在前台或者后台
- user:运行HAProxy进程的用户
- group:运行HAProxy进程的组
- uid:运行HAProxy进程的uid
- gid:运行HAProxy进程的gid
- nbproc :要启动的haproxy的进程数量;默认为1个,推荐为1个
- ulimit-n :每个haproxy进程可打开的最大文件数;会自动计算一个最佳的数字,建议不修改
性能调整参数
虽然说是调整性能的参数,但是一般情况下没有特殊需求,不建议修改
- maxconn :设定每个haproxy进程所能接受的最大并发连接数;
- maxconnrate : 每个进程每秒种所能创建的最大连接数量;
- maxsessrate :每个进程每秒钟所能创建的最大数量
- maxsslconn : 设定每个进程所能接受的最大ssl并发连接数
- spread-checks <0…50, in percent> :如果后端主机太多,为了避免同一时刻检查的主机数量太多,这里可以错峰检查。也就是提前或者延后一段时间检查,最多设置不能超过总长的百分之50,比如检测总时长是2s,如果提前或延后超过1s,则上一次的检查和这一次检查很可能会重叠,这时候就会出问题。
proxies常用的配置项
负载均衡算法
- balance roundrobin 基于权重进行轮询,在服务器的处理时间保持均匀分布时 ,这是最平衡、最公平的算法。此算法是动态的,这表示某权重可以在运行时进行调整
- balance static-rr 基于权重进行轮询,与roundrobin类似,但是他是静态方法,在运行时调整期后端权重不会生效,不过,其在后端服务器连接数上没有限制
- balance leastconn 最少连接者先处理,在有这较长会话的场景中推荐使用此算法,如LDAP、SQL等。其并不太适合用于较短会话的应用层协议,如HTTP,此算法是动态的,可以在运行时调整其权重
- balance source 将请求的源地址进行hash运算,并有后端的服务器的权重总数相处后派发至某匹配的服务器,这可以使得同一个客户端IP的请求始终被派发至某特定的服务器,不过,当服务器权重总数发生变化时,如某服务器宕机或者添加新服务器,许多的请求可能会被派发至与此前请求不同的服务器,常用于负载均衡无cooki功能的基于TCP的协议,默认为动态,不过可以使用hash-type修改此特性
- balance uri 对URI的左半部分(“问号”标记之前的部分)或整个URI进行hash运算,并由服务器的总权重相除后派发至某匹配的服务器,这可以使得对同一个URI的请求总是派发至某个匹配的服务器,除非服务器的权重总数发生了变化,此算法常用于代理缓存或反向代理以提高缓存的命中率,需要注意的是,此算法仅应用于HTTP后端服务器场景,其默认为静态算法,不过可以使用hash-type修改此特性
- balance url_param 通过URL指定的参数在每个HTTP GET请求中将会被索引,如果过找到了指定的参数且其通过等于号“=”被赋予了一个值,那么此值将被执行hash运算并被服务器的总权重相除后派发至某个匹配的服务器,此算法可以通过追踪请求中的用户标识进而确保同一个用户的ID请求被发送同一个特定的服务器,除非服务器的总权重发生了变化;如果某请求中没有出现指定的参数或其没有有效值,则使用轮询算法对其响应请求进行调度,此算法默认为静态,不过可以使用hash-type修改此特性
hash-type 哈希算法
格式:hash-type <method> <function> <modifier>
method有:
- map-based:除权取余法,哈希数据结构是静态的数组
- consistent:一致性哈希,哈希数据结构是一个树
server后端主机选项
mode haproxy工作模式
- tcp:实例运行于纯TCP模式,在客户端和服务器端之间将建立一个全双工的连接,且不会对7层报文做任何类型的检查;此为默认模式,通常用于SSL、SSH、SMTP等应用
- http:实例运行于HTTP模式,客户端请求在转发至后端服务器之前将被深度分析,所有不与RFC格式兼容的请求都会被拒绝
- health:工作为健康状态检查的响应模式,当连接请求到达时回应“OK”后即断开连接;
HTTP相关
cookie
用户访问服务器,haproxy转发到后端服务器。这时候由haproxy返回给用户的时候,可以操作报文首部,我们可以打个标记在cookie字段插入一个键值对。键为cookie的name,值为后端服务器设置的cookie名,从而做到session sticky。
option forwardfor
在由haproxy发往后端主机的请求报文中添加“X-Forwarded-For”首部,其值前端客户端的地址;用于向后端主发送真实的客户端IP
errorfile
返回设置的错误码的对应文件
errorloc
errorfile返回一个本地文件,这里的errorloc类似重定向一个uri
reqadd
请求报文中添加首部
rspadd
响应报文中添加首部
reqdel
删除请求报文首部
rspdel
删除响应报文首部
压缩相关参数
对后端服务器做http协议的健康状态检测的常用配置项
连接超时时长常用配置项
http-request
第7层请求的访问控制
日志相关设置
统计接口相关参数
ACL相关
use_backend
当符合指定的条件时使用特定的backend
block
满足条件的情况下,阻止/放行第7层请求
tcp-request connection
根据第4层条件对传入连接执行操作
acl访问控制列表
示例配置
动静分离
nginx+springboot+mysql+redis
- 作者:Loneking
- 链接:https://loneking.cn/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/99
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。