Haproxy中 global 部分的配置

Haproxy中的 global (全局) 配置部分的优先级是最低的。global 主要包括了三个方面的配置:

  • 进程和安全管理
  • 性能优化配置
  • debug.

Tips 1:本文不涉及到ca、ssl等相关的配置,和ssl相关的配置,可以参考:haproxy中与ssl相关的配置项

Tips 2:本文不涉及到stats的相关配置,可以参考:haproxy中与stats相关的配置项

一、进程和安全管理

chroot <jail dir>

修改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 <number>
cpu-map <“all”|”odd”|”even”|process_num> <cpu-set>…

这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 <path>
deviceatlas-log-level <value>
deviceatlas-separator <char>
deviceatlas-properties-cookie <name>

这四个和deviceatlas相关的设置,配置这四个设置需要在安装haproxy增加对应的模块

make TARGET=<target> USE_PCRE=1 USE_DEVICEATLAS=1 \
DEVICEATLAS_SRC=<path to the API root folder>

关于deviceatlas 的介绍参考:https://deviceatlas.com/products/overview
关于 haproxy中安装 deviceatlas模块参考: https://deviceatlas.com/deviceatlas-haproxy-module

external-check
option external-check
external-check path <path>
external-check command <command>

external-check:在 global 中设置,启用外部脚本执行健康检查,出于安全考虑,默认情况下关闭的。

option external-check:在defaults、listen、backend均可以设置,采用外部脚本执行健康检查。这里和常用的 option httpchk GET /index.html的用法一个意思。

external-check path <path>:运行外部检查时使用的PATH环境变量的值

external-check command <command>:运行外部检查的执行脚本文件。在执行中脚本文件将会接受到4个参数,同时可以直接使用一些环境变量。详见如下:

参数:<proxy_address> <proxy_port> <server_address> <server_port>

变量:
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 <number>
group <group name>
uid <number>
user <user name>

运行 haproxy 的用户 和 组,例如:

uid 1002
gid 1002
或
user haproxy
group haproxy

log <address> [len <length>] [format <format>] <facility> [max level [min level]]
log-send-hostname [<string>]
log-tag <string>

log的用法可以参考这里:Haproxy中的Log的相关配置详解

lua-load <file>

执行一个lua脚本 ,但在安装 haproxy 需要指定  USE_LUA,例如:

# make PREFIX=/usr/local/haproxy/ TARGET=linux2628 USE_PCRE=1 
USE_OPENSSL=1 USE_ZLIB=1 USE_LUA=1

pidfile <pidfile>

将deamon的所有pids写入文件中,启动进程的用户必须有写入的权限。也可用“-p”代替

setenv <name> <value>
presetenv <name> <value>
resetenv [<name> …]
unsetenv [<name> …]

setenv :设置环境变量,如果存在会覆盖。
presetenv:设置环境变量,如果存在不会覆盖。
resetenv:移除指定的环境变量。
unsetenv:移除指定的环境变量。

server-state-base <directory>
server-state-file <file>
load-server-state-from-file { global | local | none }
server-state-file-name [<file>]

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 <number>

设置每个进程的最大文件描述符的数量,因为在Haproxy中会自动计算,所以这个不建议设置。

unix-bind [ prefix <prefix> ] [ mode <mode> ] [ user <user> ] [ uid <uid> ] [ group <group> ] [ gid <gid> ]

参考:haproxy中与stats相关的配置项

node <name>

当前服务器存在有多个进程,或启动多个实例,配置才生效。

description <text>

但前实例的描述

51degrees-data-file <file path>
51degrees-property-name-list [<string> …]
51degrees-property-separator <char>
51degrees-cache-size <number>

51degrees的相关设置,相关的信息可以参考:https://51degrees.com/51degrees.com/blog/51degrees-and-haproxy-technologies-bring-device-detection-to-haproxy-community-3

wurfl-data-file <file path>
wurfl-information-list [<capability>]*
wurfl-information-list-separator <char>
wurfl-patch-file [<file path>]
wurfl-engine-mode { accuracy | performance }
wurfl-cache-size <U>[,<D>]
wurfl-useragent-priority { plain | sideloaded_browser }

wurfl的相关知识点,可到网上自行查阅。在安装的时候需要使用 USE_WURFL=1
可参考:http://blog.csdn.net/njchenyi/article/details/1905841

二、性能优化配置

max-spread-checks <delay in milliseconds>
spread-checks <0..50, in percent>

健康检查的相关设置,参考:Haproxy中几种健康检查的使用

maxconn <number>
maxconnrate <number>

maxconn:设置每个进程的最大并发连接数值,相当于命令行中的“-n”参数。
maxconnrate:设置每个进程每秒种的最大链接数。

Tips 1:maxconnrate限制的优先级高于maxconn

maxconn 51200
maxconnrate 25600

maxcomprate <number>
maxcompcpuusage <number>
tune.comp.maxlevel <number>

tune.comp.maxlevel:设置session的压缩级别,默认1,选值1-6,压缩级别越高CPU的使用率越高,但同时传输的数据越小。
maxcompcpuusage:限制压缩算法占用CPU的百分比,默认100,设置降低该值,来防止因为压缩的算法,而导致高延迟。
maxcomprate:限制每秒钟的压缩数据量的大小(单位:KB)。当在会话期间,如果达到该限制值,那么系统将降低tune.comp.maxlevel。如果在会话开始的时,已经达到该限制,则系统完全不压缩该会话。

maxpipes <number>

限制进程每秒中管道的数,默认是maxconn / 4,因为一个 pipes包括2个文件描述符,所以该值的设置将会影响ulimit-n.

maxsessrate <number>
tune.maxaccept <number>

maxsessrate:限制进程每秒钟处理session的数量,如果到达该限制,则不再接受新的链接。
tune.maxaccept:默认是64,设置为-1表示完全禁用,通常不需要设置该值。

maxzlibmem <number>

限制内存通过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 <number>
tune.buffers.reserve <number>

进程缓存,如果不是haproxy的核心开发者,不建议修改这2个值。
tune.buffers.limit:默认值是0,表示不限制
tune.buffers.reserve:默认值是2

tune.bufsize <number>
tune.chksize <number>

tune.bufsize:单位字节,默认是16384,不建议修改,太小可能会引发错误,太大会浪费内存。
tune.chksize:单位字节,默认是16384

tune.http.cookielen <number>

限制cookie的长度,默认63字节,不建议修改

tune.http.maxhdr <number>

请求头的数量,默认是101

tune.idletimer <timeout>

默认是1000,可选值0-65535

tune.lua.forced-yield <number>
tune.lua.maxmem
tune.lua.session-timeout <timeout>
tune.lua.task-timeout <timeout>
tune.lua.service-timeout <timeout>

lua脚本的相关性能设置。

tune.maxpollevents <number>

进程调用poll系统的数量,默认200

tune.maxrewrite <number>

单位字节:通常设置在1024左右。

tune.pattern.cache-size <number>

查找正则的缓存,不建议修改。

tune.pipesize <number>

pipe的缓存大小,不建议修改。

tune.rcvbuf.client <number>
tune.rcvbuf.server <number>
tune.recv_enough <number>
tune.sndbuf.client <number>
tune.sndbuf.server <number>

socket的接受/发送缓存大小。默认是0,表示自动调整。

tune.vars.global-max-size <size>
tune.vars.proc-max-size <size>
tune.vars.reqres-max-size <size>
tune.vars.sess-max-size <size>
tune.vars.txn-max-size <size>

变量系统的相关设置。

tune.zlib.memlevel <number>
tune.zlib.windowsize <number>

zlib的参数设置。

三、Debug

debug

等同与命令行中 -d

quiet

等同于命令中 -q

Haproxy中 global 部分的配置》上有2条评论

  1. Pingback引用通告: Haproxy配置-新手入门篇 | 精彩每一天

  2. Pingback引用通告: haproxy中的Proxies段的配置 | 精彩每一天

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>