haproxy是单进程、事件驱动、非阻塞模型的调度器。虽然是单进程,但官方强烈建议不要设置为多进程,因为单进程可以处理很多个代理连接请求且性能极好(官方手册说30W个代理实例都能良好运行),设置为多进程反而有一些限制。
chroot :修改haproxy工作目录至指定目录,可提升haproxy安全级别,但要确保必须为空且任何用户均不能有写权限;
daemon:让haproxy以守护进程的方式工作于后台,等同于命令行的"-D"选项,当然,也可以在命令行中以"-db"选项将其禁用;(建议设置项)
uid/user:以指定的UID或用户名身份运行haproxy进程;
gid/group:以指定的GID或组名运行haproxy,建议使用专用于运行haproxy的GID,以免因权限问题带来风险;
log:定义全局的syslog服务器,接收haproxy启动和停止的日志。最多可以定义两个;
log <address> <facility> [max level [min level]]
log-send-hostname [string]:在日志的最前面记录本机主机名或string。远程发送到日志服务器时可由此知道是haproxy主机发送的。
pidfile:等同于命令行的"-p"选项。使用服务启动脚本启动haproxy时建议不要设置该项,以保证脚本能正确获取pid文件。
nbproc :指定启动的haproxy进程个数,只能用于守护进程模式的haproxy;默认只启动一个进程,一般只在单进程仅能打开少数文件描述符的场景中才使用多进程模式;(官方强烈建议不要设置该选项)
ulimit-n:设定每进程能够打开的最大文件描述符数量,默认haproxy会自动进行计算,因此不推荐修改此选项;(不建议设置项)
stats:和多进程haproxy有关,由于不建议使用多进程,所以也不建议设置此项。但建议设置为"stats socket"将套接字和本地文件进行绑定,如"stats socket /var/lib/haproxy/stats"。
node:定义当前节点的名称,用于HA场景中多haproxy进程使用相同IP地址时分辨哪个node正处于使用状态;
2.性能调整相关的参数。
maxconn :设定每haproxy进程所接受的最大并发连接数,当达到此限定连接数后将不再接受新的连接。该参数特指和客户端的连接数,不包括和服务端的连接。等同于命令行选项"-n";"ulimit -n"就是根据此值进行自动调整的;
maxpipes :haproxy在使用splice()在内核中零复制时,是使用pipe传递进行报文粘接重组的,此选项用于设定每进程所允许使用的最大pipe个数;每个pipe会打开两个文件描述符,因此"ulimit -n"自动计算时会按需调大此值;默认值为maxconn/4。调小时会影响一定的性能;
noepoll:在Linux系统上禁用epoll机制;(不建议设置此项)
nokqueue:在BSD系统上禁用kqueue机制;
nopoll:禁用poll机制;
nosplice:禁止在Linux套接字上使用内核tcp重组,这会导致更多的recv/send系统调用;(在内核版本2.6.28之后极度不建议设置此项)
spread-checks <0..50, in percent>:在haproxy后端有着众多服务器的场景中,在精确的时间间隔后统一对众服务器进行健康状况检查可能会带来意外问题;此选项用于将其检查的时间间隔长度上增加或减小一定的随机时长;默认为0,官方建议设置为2到5之间。(建议设置项)
tune.bufsize :设定buffer的大小,同样的内存条件下,较小的值可以让haproxy有能力接受更多��并发连接,较大的值可以让某些应用程序使用较大的cookie信息;默认为16384,可在编译时修改,不过强烈建议使用默认值;(不建议设置项)
tune.chksize :设定检查缓冲区的大小,单位为字节;更大的值有助于在较大的页面中完成基于字符串或正则pattern的文本查找,但也会占用更多的系统资源;(不建议设置项)
tune.maxaccept :设定haproxy进程内核调度运行时一次性可以接受的连接的个数,较大的值可以带来较大的吞吐率,默认在单进程模式下为100,多进程模式下为8,设定为-1可以禁止此限制;(不建议设置项)