转自(可能有一定的修改):
http://freeloda.blog.51cto.com/2033581/1294094
1.配置文件的格式
HAProxy的配置处理3类来主要参数来源:
- 最优先处理的命令行参数;
- “global”配置段,用于设定全局配置参数;
- proxy相关配置段,如“defaults”、“listen”、“frontend”和“backend”;
2.支持的时间格式
一些包含了值的参数表示时间,如超时时长。这些值一般以毫秒为单位,但也可以使用其它的时间单位后缀。
us: 微秒(microseconds),即1/1000000秒;
ms: 毫秒(milliseconds),即1/1000秒;
s: 秒(seconds);
m: 分钟(minutes);
h:小时(hours);
d: 天(days);
3.简单案例
下面的例子配置了一个监听在所有接口的 80 端口上 HTTP proxy服务,它转发所有的请求至后端监听在 127.0.0.1:8000上 的"server"。
global
daemon
maxconn 25600
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:80
default_backend servers
backend servers
server server1 127.0.0.1:8080 maxconn 32
执行如下命令检查配置:
sudo haproxy -f configuration.conf -c
4.全局配置
注,“global”配置中的参数为进程级别的参数,且通常与其运行的OS相关。
(1).进程管理及安全相关的参数
chroot :修改 haproxy 的工作目录至指定的目录并在放弃权限之前执行chroot()操作,
可以提升haproxy的安全级别,不过需要注意的是要确保指定的目录为空目录且任何用户均不能有写权限;
daemon:让haproxy以守护进程的方式工作于后台,其等同于“-D”选项的功能,当然,也可以在命令行中以“-db”
选项将其禁用;
gid :以指定的 GID 运行haproxy,建议使用专用于运行 haproxy 的 GID,以免因权限问题带来风险;
group :同 gid,不过指定的组名;
log [max level [min level]]:定义全局的 syslog 服务器,最多可以定义两个;
什么时候发生日志给定义的 syslog 服务器?1.HAProxy 启动和退出时;2.定义了 log global 的代理也会发送
日志给全局定义的 syslog 服务器。
:
IPv4 + : + UDP 端口,默认端口为 514;
指向一个 Unix domain socket 的文件路径(位于 chroot 内,有可写权限)
: 如下其中之一
kern user mail daemon auth syslog lpr news
uucp cron auth2 ftp ntp audit alert cron2
local0 local1 local2 local3 local4 local5 local6 local7
日志等级:默认发送所有日志信息,略 --> 详;
emerg alert crit err warning notice info debug
log-send-hostname []:在syslog信息的首部添加当前主机名,可以为“string”指定的名称,也可以缺
省使用当前主机名;
nbproc :指定启动的haproxy进程个数,只能用于守护进程模式的haproxy;默认只启动一个进程,鉴于调
试困难等多方面的原因,一般只在单进程仅能打开少数文件描述符的场景中才使用多进程模式;
pidfile:将所有进程的 pid 写入文件,启动进程的用户必须有权限访问此文件
uid:以指定的 UID 身份运行haproxy进程;
ulimit-n:设定每个进程所能够打开的最大文件描述符数目,默认情况下其会自动进行计算,因此不推荐修改此选项;
user:同 uid,但使用的是用户名;
stats:
node:定义当前节点的名称,用于HA场景中多haproxy进程共享同一个IP地址时;
description:当前实例的描述信息;
(2).性能调整相关的参数
maxconn :设定每个 haproxy 进程所接受的最大并发连接数,其等同于命令行选项“n”;
“ulimit n” 自动计算的结果正是参照此参数设定的;
maxpipes :haproxy 使用 pipe 完成基于内核的tcp报文重组,此选项则用于设定每进程所允许
使用的最大pipe个数;每个pipe会打开两个文件描述符,因此,“ulimit n”自动计算时会根据需要调大此值;
默认为maxconn/4,其通常会显得过大;
noepoll:在Linux系统上禁用epoll机制;
nokqueue:在BSE系统上禁用kqueue机制;
nopoll:禁用poll机制;
nosepoll:在Linux禁用启发式epoll机制;
nosplice:禁止在Linux套接字上使用内核 tcp 重组,这会导致更多的recv/send系统调用;不过,
在Linux 2.6.2528系列的内核上,tcp 重组功能有bug存在;
spreadchecks <0..50, in percent>:在haproxy后端有着众多服务器的场景中,在精确的时间间隔
后统一对众服务器进行健康状况检查可能会带来意外问题;此选项用于将其检查的时间间隔长度上增加或减小一定的随机时长;
tune.bufsize :设定buffer的大小,同样的内存条件下,较小的值可以让haproxy有能力接受更多的并发连接,
较大的值可以让某些应用程序使用较大的cookie信息;默认为16384,其可以在编译时修改,不过强烈建议使用默认值;
tune.chksize :设定检查缓冲区的大小,单位为字节;更大的值有助于在较大的页面中完成基于字符串或模式
的文本查找,但也会占用更多的系统资源;不建议修改;
tune.maxaccept :设定haproxy进程内核调度运行时一次性可以接受的连接的个数,较大的值可以带来较大
的吞吐率,默认在单进程模式下为100,多进程模式下为8,设定为1可以禁止此限制;一般不建议修改;
tune.maxpollevents :设定一次系统调用可以处理的事件最大数,默认值取决于OS;其值小于200时可节约带宽,
但会略微增大网络延迟,而大于200时会降低延迟,但会稍稍增加网络带宽的占用量;
tune.maxrewrite :设定为首部重写或追加而预留的缓冲空间,建议使用1024左右的大小;在需要使用更大的空间时,
haproxy会自动增加其值;
tune.rcvbuf.client :
tune.rcvbuf.server :设定内核套接字中服务端或客户端接收缓冲的大小,单位为字节;强烈推荐使用默认值;
tune.sndbuf.client:
tune.sndbuf.server:
(3).Debug相关的参数
debug
quiet
5.代理
代理相关的配置可以如下配置段中,
defaults
frontend
backend
listen
“defaults”段用于为所有其它配置段提供默认参数,这配置默认配置参数可由下一个“defaults”所重新设定。
“frontend”段用于定义一系列监听的套接字,这些套接字可接受客户端请求并与之建立连接。
“backend”段用于定义一系列“后端”服务器,代理将会将对应客户端的请求转发至这些服务器。
“listen”段通过关联“前端”和“后端”定义了一个完整的代理,也就是直接在 listen 组合定义了前端和后端,通常用于定义 TCP 流量。例如:
listen main *:80
balance roundrobin
server s1 192.168.0.71:80
server s1 192.168.0.72:80
注,所有代理的名称只能使用大写字母、小写字母、数字、-(中线)、_(下划线)、.(点号)和:(冒号)。此外,ACL名称会区分字母大小写。更详细的配置信息,请查阅官方文档
HAProxy 的工作模式:
HAProxy 主要支持两种代理:tcp(4层) 和 http(7层)。
在7层代理模式中,HAProxy 可以解析 HTTP 报文,对请求和响应报文的任意部分做 增加、修改、删除 操作。
对报文可 允许、拒绝、转发。解析报文,重新封装。
在 4 层代理模式中,直接在 TCP 层调度,在客户端和服务器端之间建立全双工的连接。(分别与客户端和服务端建立
连接,并将两个连接合并到一起,转发 TCP 流量)
注意 https 与 http 协议是两回事,使用 https 协议也只能使用 tcp 模式。
- 1.4 版本 http://cbonte.github.io/haproxy-dconv/1.4/configuration.html
- 1.5 版本 http://cbonte.github.io/haproxy-dconv/1.5/configuration.html