全局配置
"global"配置中的参数为进程级别的参数,且通常与其运行的OS相关。
* 进程管理以及安全相关的参数
-chroot<jail dir>:修改haproxy的工作目录至指定的目录并在放弃权限之前执行chroot()操作,可以提升haproxy的安全级别,不过需要注意的是要确保指定的目录为空目录且任何用户均不能有写权限;
-daemon:让haproxy以守护进程的方式工作于后台,其等于“-D”选项的功能,当然,也可以在命令行中以“-db”选项将其禁用;
-gid<number>:以指定的GID运行haproxy,建议使用专用于运行haproxy的GID,以免因权限问题带来风险;
-group<group name>:同gid,不过指定的组名;
-log <address> <facility> [max level [min level]]:定义全局syslog服务器,最多可以定义两个;
-log-send-hostname [<string>]:在syslog信息的首部添加当前主机名,可以为“string”指定的名称,也可以缺省使用当前主机名;
-nbproc <number>:指定启动的haproxy进程的个数,只能用于守护进程模式的haproxy;默认只启动一个进程,鉴于调试困难等多方面的原因,一般只在单进程仅能打开少数文件描述符的场景中才使用多进程模式;
-pidfile:haproxy运行的进程pid文件位置目录
-ulimit -n:设定每进程所能够打开的最大文件描述符数目,默认情况下其会自动进行计算,因此不推荐修改此选项;
-user:同uid,但使用的是用户名;
-stats:
-node:定义当前节点的名称,用于HA场景中多haproxy进程共享同一个IP地址时;
-description:当前实例的描述信息;
*性能调整相关的参数
- maxconn <number>:设定每个haproxy进程所接受的最大并发连接数,其等同于命令行选项“-n”;“ulimit -n”自动计算的结果正是参照此参数设定的;
- maxpipes<number>:
: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系统调用;不过,在linux2.6.25-28系列的内核上,tcp重组功能有bug存在;- spread-checks <0..50, in percent>: 在haproxy后端有这众多服务器的场景中,在精确的时间间隔后统一对众服务器进行健康状态检查可能会带来意外问题;此选项用于将其检查的时间间隔长度上增加或减小一定的随机时长;
- tune.bufsize <number>: 设定buffer的大小,同样的内存条件小,较小的值可以让haproxy有能力接受更多的并发连接,较大的值可能让某些应用程序使用较大的cookie信息;默认为16384,其可以在编译时修改,不过强烈建议使用默认值;
- tune.chksize(number);设定检查缓冲区的大小,单位为字节;更大的值有助于在较大的页面中完成基于字符串或模式的文本查找,但也会占用更多的系统资源;不建议修改;
tune.maxaccept<number>:设定haproxy进程内核调度运行时一次性可以接受的连接的个数,较大的值可以带来较大的吞吐率,默认在单进程模式下为100,多进程模式为8,设定为-1可以禁止此限制,一般不建议修改;
- tune.maxpollevents <number>:设定一次系统调用可以处理的事件最大数,默认值取决于OS;其值小于200时可节约带宽,但会略微增大网络延迟,而大于200时会降低延迟,但会稍稍增加网络带宽的占用量;
tune.maxrewrite <number>:设定为首部重写或追加而预留的缓冲空间,建议使用1024左右的大小;在需要使用更大的空间时,haproxy会自动增加其值;
- tune.rcvbuf.client <number>:
- tune.rcvbuf.server <number>:设定内核套接字中服务端或客户端接受缓冲的大小,单位为字节,强烈推荐
使用默认值;
代理配置
代理相关的配置可以如下配置段中。
- defaults <name>
- frontend <name>
- backend <name>
- listen <name>
"defaults"段用于为所有其它配置段提供默认参数,这配置默认配置参数可由下一个"defaults"所重新设定。
"frontend"段用于定义一系列监听的套接字,这些套接字可接受客户端请求并与之建立连接。
"backend"段用于定义一系列"后端"服务器,代理将会将对应客户端的请求转发至这些服务器。
"listen"段通过关联"前端"和"后端"定义了一个完整的代理,通常只对TCP流量有用。
所有代理的名称只能使用大小写字母、数字、-(中线)、_(下划线)、.(点号)和:(冒号)。此外,ACL 名称会区分字母大小写。