Haproxy中的 global (全局) 配置部分的优先级是最低的。global 主要包括了三个方面的配置:
进程和安全管理
性能优化配置
debug.
Tips 1:本文不涉及到ca、ssl等相关的配置,和ssl相关的配置,可以参考:haproxy中与ssl相关的配置项
Tips 2:本文不涉及到stats的相关配置,可以参考:haproxy中与stats相关的配置项
一、进程和安全管理
chroot
修改haproxy的工作目录至指定的目录,并在放弃权限之前执行chroot()操作,可以提升haproxy的安全级别,不过需要注意的是确保指定的目录为空目录且任何用户均不能有写权限
chroot /data/jail/
# ll
总用量 8
d---------. 2 root root 6 3月 4 08:30 jai
tips 1:这里需要注意下,如果开启外部脚本健康检查,外部检查的 external-check path ,以及脚本文件 都应该chroot的权限范围内。
nbproc
cpu-map …
这2个配置是密切相关的,nbproc是指启动多少个haproxy进程。
#nbproc设置为4,讲启动4个进程
haproxy 11472 0.0 0.0 56520 1228 ? Ss 08:57 0:00 ./haproxy -f /usr/local/haproxy/conf/haproxy.cfg
haproxy 11473 0.0 0.0 56520 1228 ? Ss 08:57 0:00 ./haproxy -f /usr/local/haproxy/conf/haproxy.cfg
haproxy 11474 0.0 0.0 56520 1228 ? Ss 08:57 0:00 ./haproxy -f /usr/local/haproxy/conf/haproxy.cfg
haproxy 11475 0.0 0.0 56520 1228 ? Ss 08:57 0:00 ./haproxy -f /usr/local/haproxy/conf/haproxy.cfg
#查看pid文件,也可以看到四个进程ID
# cat /run/haproxy.pid
11472
11473
11474
11475
cpu-map是将进程绑定到特定的CPU上,这个好处是防止多进程对CPU的抢占,可以提升少量性能。这个配置指令有2个参数,第一参数是进程序号,从1开始。第二个参数是CPU序号,从0开始。举例说明如果将进程绑定到指定的CPU上的。
#查看本机的CPU个数,同时也可以看到CPU的序号从0开始
# cat /proc/cpuinfo | grep processor
processor : 0
processor : 1
processor : 2
processor : 3
# 逐一指定
cpu-map 1 0
cpu-map 2 1
cpu-map 3 2
cpu-map 4 3
cpu-map 5 4 //该条超过nbproc的数量,将被忽略
#全部的进程由0号cpu处理。
cpu-map all 0
#奇数的进程有0号cpu处理,偶数的进程有1号cpu处理。
cpu-map odd 0
cpu-map even 1
daemon
后台模式,也可以使用“-D”启用,或者“-db”禁用
deviceatlas-json-file
deviceatlas-log-level
deviceatlas-separator
deviceatlas-properties-cookie
这四个和deviceatlas相关的设置,配置这四个设置需要在安装haproxy增加对应的模块
make TARGET= USE_PCRE=1 USE_DEVICEATLAS=1 \
DEVICEATLAS_SRC=
external-check
option external-check
external-check path
external-check command
external-check:在 global 中设置,启用外部脚本执行健康检查,出于安全考虑,默认情况下关闭的。
option external-check:在defaults、listen、backend均可以设置,采用外部脚本执行健康检查。这里和常用的 option httpchk GET /index.html的用法一个意思。
external-check path :运行外部检查时使用的PATH环境变量的值
external-check command :运行外部检查的执行脚本文件。在执行中脚本文件将会接受到4个参数,同时可以直接使用一些环境变量。详见如下:
参数:
变量:
HAPROXY_PROXY_ID
HAPROXY_PROXY_NAME
HAPROXY_PROXY_ADDR
HAPROXY_PROXY_PORT
HAPROXY_SERVER_ADDR
HAPROXY_SERVER_CURCONN //服务器connects数
HAPROXY_SERVER_ID
HAPROXY_SERVER_MAXCONN //haproxy的最大链接数
HAPROXY_SERVER_NAME
HAPROXY_SERVER_PORT
PATH //设置的external-check path
Tips 1:外部检查的脚本,必须已 0 状态退出,否则会认为检查失败。这个对于高级的haproxy应用特别有用。
Tips 2:如果开启chroot,需要注意下访问的权限,这里可以参考chroot的配置。
具体的用法如下:
global
external-check
backend servers
option external-check
external-check path "/usr/bin:/bin:/tmp"
external-check command /bin/true //执行的脚本
gid
group
uid
user
运行 haproxy 的用户 和 组,例如:
uid 1002
gid 1002
或
user haproxy
group haproxy
log
[len ] [format ] [max level [min level]]log-send-hostname []
log-tag
lua-load
执行一个lua脚本 ,但在安装 haproxy 需要指定 USE_LUA,例如:
# make PREFIX=/usr/local/haproxy/ TARGET=linux2628 USE_PCRE=1
USE_OPENSSL=1 USE_ZLIB=1 USE_LUA=1
pidfile
将deamon的所有pids写入文件中,启动进程的用户必须有写入的权限。也可用“-p”代替
setenv
presetenv
resetenv [ …]
unsetenv [ …]
setenv :设置环境变量,如果存在会覆盖。
presetenv:设置环境变量,如果存在不会覆盖。
resetenv:移除指定的环境变量。
unsetenv:移除指定的环境变量。
server-state-base server-state-file load-server-state-from-file { global | local | none }server-state-file-name []
load-server-state-from-file:在defaults、listen、backend中定义。
server-state-base:在global中定义
server-state-file:在global中定义
Tips 1:这个配置暂时不知道是什么意思。-_-!!
这里有一个关于 server-state的讨论:http://www.serverphorums.com/read.php?10,1478702
ulimit-n
设置每个进程的最大文件描述符的数量,因为在Haproxy中会自动计算,所以这个不建议设置。
unix-bind [ prefix ] [ mode ] [ user ] [ uid ] [ group ] [ gid ]
node
当前服务器存在有多个进程,或启动多个实例,配置才生效。
description
但前实例的描述
51degrees-data-file
51degrees-property-name-list [ …]
51degrees-property-separator
51degrees-cache-size
wurfl-data-file
wurfl-information-list []*
wurfl-information-list-separator
wurfl-patch-file []
wurfl-engine-mode { accuracy | performance }
wurfl-cache-size [,]
wurfl-useragent-priority { plain | sideloaded_browser }
二、性能优化配置
max-spread-checks
spread-checks <0..50, in percent>
maxconn
maxconnrate
maxconn:设置每个进程的最大并发连接数值,相当于命令行中的“-n”参数。
maxconnrate:设置每个进程每秒种的最大链接数。
Tips 1:maxconnrate限制的优先级高于maxconn
maxconn 51200
maxconnrate 25600
maxcomprate
maxcompcpuusage
tune.comp.maxlevel
tune.comp.maxlevel:设置session的压缩级别,默认1,选值1-6,压缩级别越高CPU的使用率越高,但同时传输的数据越小。
maxcompcpuusage:限制压缩算法占用CPU的百分比,默认100,设置降低该值,来防止因为压缩的算法,而导致高延迟。
maxcomprate:限制每秒钟的压缩数据量的大小(单位:KB)。当在会话期间,如果达到该限制值,那么系统将降低tune.comp.maxlevel。如果在会话开始的时,已经达到该限制,则系统完全不压缩该会话。
maxpipes
限制进程每秒中管道的数,默认是maxconn / 4,因为一个 pipes包括2个文件描述符,所以该值的设置将会影响ulimit-n.
maxsessrate
tune.maxaccept
maxsessrate:限制进程每秒钟处理session的数量,如果到达该限制,则不再接受新的链接。
tune.maxaccept:默认是64,设置为-1表示完全禁用,通常不需要设置该值。
maxzlibmem
限制内存通过zlib的大小,默认是0,表示不限制。
noepoll
禁用epoll,等同于命令行的 -de
nokqueue
禁用kqueue,等于命令行的 -dk
nopoll
禁用poll,等同于命令行 -dp
nosplice
option splice-auto
no option splice-auto
option splice-request
no option splice-request
option splice-response
no option splice-response
以上同时相关的。后6个defaults、listen、frontend、backend中设置。
nogetaddrinfo
等同于命令行 -dG
noreuseport
等同于命令行-dR
tune.buffers.limit
tune.buffers.reserve
进程缓存,如果不是haproxy的核心开发者,不建议修改这2个值。
tune.buffers.limit:默认值是0,表示不限制
tune.buffers.reserve:默认值是2
tune.bufsize
tune.chksize
tune.bufsize:单位字节,默认是16384,不建议修改,太小可能会引发错误,太大会浪费内存。
tune.chksize:单位字节,默认是16384
tune.http.cookielen
限制cookie的长度,默认63字节,不建议修改
tune.http.maxhdr
请求头的数量,默认是101
tune.idletimer
默认是1000,可选值0-65535
tune.lua.forced-yield
tune.lua.maxmem
tune.lua.session-timeout
tune.lua.task-timeout
tune.lua.service-timeout
lua脚本的相关性能设置。
tune.maxpollevents
进程调用poll系统的数量,默认200
tune.maxrewrite
单位字节:通常设置在1024左右。
tune.pattern.cache-size
查找正则的缓存,不建议修改。
tune.pipesize
pipe的缓存大小,不建议修改。
tune.rcvbuf.client
tune.rcvbuf.server
tune.recv_enough
tune.sndbuf.client
tune.sndbuf.server
socket的接受/发送缓存大小。默认是0,表示自动调整。
tune.vars.global-max-size
tune.vars.proc-max-size
tune.vars.reqres-max-size
tune.vars.sess-max-size
tune.vars.txn-max-size
变量系统的相关设置。
tune.zlib.memlevel
tune.zlib.windowsize
zlib的参数设置。
三、Debug
debug
等同与命令行中 -d
quiet
等同于命令中 -q