本节讲解全局参数配置。 html
--------------------------------------------------------------- node
3. 全局参数 git
全局区域里的参数是进程级别的,常常跟操做系统相关。他们一次性设置且不须要再变更。 github
其中一些具备命令行等价。 正则表达式
下面的关键词能够在global区域中存在。 算法
* Process管理和安全 缓存
- chroot-à设置global.chroot->而后执行chroot(global.chroot),用来切换进程的根目录。 安全
- daemon-àglobal.mode |= MODE_DAEMON->之后台方式启动 服务器
- gid---à设置global.gid->而后执行setgid(global.gid),修改进程的组ID cookie
- group-à经过参数获取组的信息,ha_group = getgrnam(args[1])->进而影响global.gid = (int)ha_group->gr_gid
- log----à设置日志服务器->发送日志就发送到这些服务器
- log-send-hostname-à设置global.log_send_hostname->用于发送日志消息logmsg嵌入在里面
- nbprocà设置global.nbproc->在daemon下执行多个进程,可是貌似文档说不鼓励用多个进程。
若是确实使用了多个进程,则parent退出,剩下nbproc个子进程,多个proxy会分散到这nbproc个child进程。
- pidfile-à设置global.pidfile-》用于记录pid的文件。
- uid-----》设置global.uid-----》经过setuid(global.uid)来修改进程的uid
- ulimit-n->设置global.rlimit_nofile—》setrlimit(RLIMIT_NOFILE, &limit来设置进程的最大文件描述符数量。
- user---》设置getpwnam(args[1])进而设置global.uid-----》经过setuid(global.uid)来修改进程的uid
- statsà较复杂,略。
- node->设置global.node-》全局的一个字符串标志。
- description-》global.desc-》一段文字,无其它意义。
* Performance tuning
- maxconn---》设置global.maxconn---》规定了一个proxy最多可创建的maxconn个链接,也就是accept的次数。
- maxpipes—》设置global.maxpipes—》不详,略。
- noepoll—》global.tune.options &= ~GTUNE_USE_EPOLL—》经过disablepoller函数禁止某个IO复用。
- nokqueue-》global.tune.options &= ~GTUNE_USE_KQUEUE—》经过disablepoller函数禁止某个IO复用。
- nopoll—》global.tune.options &= ~GTUNE_USE_POLL—》经过disablepoller函数禁止某个IO复用。
- nosepoll-》global.tune.options &= ~GTUNE_USE_SEPOLL-》经过disablepoller函数禁止某个IO复用。
- nosplice-》global.tune.options &= ~GTUNE_USE_SPLICE—》经过disablepoller禁止某个模块。
- spread-checks-》设置global.spread_checks-》用在process_chk,服务器check函数中,具体不详。
- tune.bufsize—》设置global.tune.bufsize-》session里的请求体和响应体缓冲区都占用这么大的长度。
- tune.chksize->设置global.tune.chksize—》为srv->check_data分配这么大的缓冲区-》用于存储check results
- tune.maxaccept-》设置global.tune.maxaccept-》event_accept中一次性最多接受maxaccept个链接。
- tune.maxpollevents-》设置global.tune.maxpollevents---》貌似是事件处理的次数限制。
- tune.maxrewrite-》设置global.tune.maxrewrite-》略
- tune.rcvbuf.client-》设置global.tune.client_rcvbuf-》event_accept时设置client端socket的接收缓冲区大小setsockopt(cfd, SOL_SOCKET, SO_RCVBUF
- tune.rcvbuf.server-》设置global.tune.server_rcvbuf-》链接服务器时设置socket的接收缓冲区大小setsockopt(fd, SOL_SOCKET, SO_RCVBUF
- tune.sndbuf.client-》设置global.tune. client_sndbuf-> event_accept时设置client端socket的发送缓冲区大小setsockopt(cfd, SOL_SOCKET, SO_SNDBUF
- tune.sndbuf.server-》不解释,很容易理解!
* Debugging
- debugàglobal.mode |= MODE_DEBUGàdebug模式
- quiet-》global.mode |= MODE_QUIET-》略。
3.1. 进程管理和安全
chroot <jail dir>
切换当前目录到参数,在丢弃权利前执行一个chroot()。
这个操做提高安全级别,仅仅当进程以超级用户特权启动才生效。
必须保证目录是空的且任何用户都不可写。
使得进程已后台模式启动,建议的模式,也能够用-D参数,能够被-db禁用。
gid <number>
改变进程的组ID,建议:组ID分配给了HAPROXY或者一些相似的后台用户们。
HAProxy必须被属于这个组的一个用户启动,或者以超级用户启动。
须要注意的是:略
group <group name>
与gid相似,可是使用名字从/etc/group获取GID.
log <address> <facility> [max level [min level]]
添加一组全局syslog服务器,最多2个全局服务器能够设置。
它们将接收启动和退出的日志,以及代理的全部日志(与log_global设置有关)。
地址能够是:
- 一个IPV4地址,UDP端口可选,若是没有设置端口,514为默认端口(标准syslog端口)。
- 一个文件系统路径到一个UNIX域的socket,须要注意的是:chroot,要确保路径可访问,
而且uid/gid可对路径进行写操做.
<facility> 必须是下列的24个标准syslog设备之一 :
kern user mail daemon auth syslog lpr news
uucp cron auth2 ftp ntp audit alert cron2
local0 local1 local2 local3 local4 local5 local6 local7
Level可选,来过滤发出的消息,默认,全部的消息会被发送。
若是最大level被设置,仅仅当前级别的消息能够被发送。
可选的最小级别也能够设定,若是被设置,更多级别的消息???
这是为了不发送emerg消息。
8个级别的消息:
emerg alert crit err warning notice info debug
log-send-hostname [<string>]
设置hostname字段,用于syslog头部,若是string参数设置了,
头部就会使用string的值,不然使用系统的hostname.
总的来讲,当不是经过一个中间的syslog服务器传递日志时使用,或者
就是为了定制hostname.
log-tag <string>
设置global.log_tag,设置syslog里的tag字段为此string.
默认为progname。一般就是”haproxy”,
有时,用于区分同一个主机上运行的多个进程。
nbproc <number>
建立多个进程,前提是后台模式。
默认状况下,仅仅一个进程被建立,这也是推荐的模式。
由于系统会限制每一个进程的打开文件描述符的个数,
须要建立多个后台进程,使用多个后台进程难以调试,
而且确实不被鼓励!!!
pidfile <pidfile>
写入全部后台进程的pids到此文件,与命令行里的”-p”等价。
文件必须可访问。
stats socket <path> [{uid | user} <uid>] [{gid | group} <gid>] [mode <mode>]
[level <level>]
建立一个UNIX套接字,流模式,在地址path.
任何先前存在的socket将备份而后替换掉。
链接到此socket的链接会返回各类统计输出,设置能够接收一些命令。
请咨询9.2节。
一个可选的level参数能够用来设定能够接收的命令。
- "user" 是最低权限级别,仅仅不敏感的统计结果能够读,不允许修改。
当不容易限制对此socket的访问时有做用。
- "operator"是默认级别,知足大多数使用场景,全部的数据能够被读,仅仅非敏感的修改被
允许,好比clear max counters.
- "admin" 须要当心使用,任何操做均可以,好比clear all counters.
在支持它的平台上,能够限制对此socket的访问,经过在uid和gid后指定数字。
或者user和group后面的参数。
也能够限制访问(经过传递八进制的数值,在mode以后,相似于chmod),
对这个socket的访问权将从上级目录获取,或者从user.
stats timeout <timeout, in milliseconds>
此socket上,默认的超时时间是10秒,能够经过此选项修改。
这个值必须以毫秒单位传递,或者之后缀{ us, ms, s, m, h, d }.
stats maxconn <connections>
默认,统计socket被限制在10个并发,能够修改。
uid <number>
修改进程的UID。建议:UID给予了haproxy,或者给一些相似的后台用户。
HAPROXY必须以超级用户启动来切换到其余UID.
ulimit-n <number>
设置每一个进程的最大文件句柄数,默认,会自动计算,因此建议不要使用此选项。
user <user name>
与UID相似,只是经过查找/etc/passwd获取UID
node <name>
当两个或者更多进程或者server共享同一个IP地址,
经过设置不一样的node名字,能够区分server.
description <text>
添加一段描述,注意,一些字符会被转移,好比#
这段文本会被插入到HTML页面,因此你必须避免使用
"<" and ">" 字符。
3.2. 性能相关
maxconn <number>
设置每一个进程最大并发链接数为参数number.与-n等价。
Proxy将会中止接受链接当限制达到。Ulimit-n参数会根据此参数
自动调整。
maxpipes <number>
设置每一个进程最大的管道数为number,管道只用于内核基础上的tcp splice.
也就是内核级别的direct IO.
管道包含两个文件描述符,ulimit-n值会自动增长.
默认的值是max/4,这个值看起来能够知足大部分场景。
代码会动态分配及释放管道,也能够退回到标准拷贝。
因此设置此值过低的话会影响性能。
禁止epoll,等价于-de,那么剩下的可用事件处理系统一般是poll.
禁止kqueue,等价于-dk,下一个可用事件处理系统一般是poll.
禁止poll,等价于-dp,下一个可用的是select.
应该永远不要进制poll,由于poll老是可用的。
禁止sepoll,等价于-ds,下一个可用的是epoll
禁止使用内核级的socket tcp 拷贝,等价于"-dS".
则数据将使用传统方式和更轻便的recv/send 函数来拷贝。
内核级别的TCP拷贝在内核2.6+可用,大多数介于2.6.25 和2.6.28
有问题,而且将转发破坏了的数据,因此,它们不该该被使用,
这个选项能够在不肯定时轻松的禁止内核拷贝。
"option splice-auto", "option splice-request" 和
spread-checks <0..50, in percent>
有时,要避免以精确的一样的间隔发送健康checks给服务器
好比,当一些服务器在同一个物理机器上,
经过这个参数,能够增长一些随机性到check间隔里(between 0 and +/- 50%)
值在【2,5】看起来不错,默认值是0.
tune.bufsize <number>
设置缓冲区大小为这个值,单位字节。
较小的值能够容纳更多的会话并存(一样容量的内存)。
较大的值允许更大的cookie存在。
默认值是16384字节,而且能够build时修改。
强烈建议,不要修改此值,由于很是低的值将破坏一些服务好比统计。
较大的值将提升内存使用,可能引发系统内存不够用。
因此若是这个值被提升,global maxconn应该下降。
tune.chksize <number>
设置check缓冲区大小为这个值,较高的值能够帮助找到字符串
或者正则表达式,经过这个可能imply更多的内存是CPU利用率。
默认值是16384,能够build时修改,不建议修改此值
tune.maxaccept <number>
进程一次最多可同时accept的最大请求数。
高的值能够提升较高的链接率,低值会偏向于已经创建的链接。
在单进程模式下,最大值为100.
尽管如此,多进程模式下,默认为8,目的是:
当一个进程被唤醒时,不会接收全部的进来的链接,而是留一部分给其它进程。
设置为-1则彻底消除此限制,正常情形下,没有必要修改此值。
tune.maxpollevents <number>
设置事件系统最多一次可处理的事件数,
默认值依赖于操做系统,200如下的话,
会轻微下降延迟(消耗网络带宽),200以上会提升网络带宽(以延迟为代价)。
tune.maxrewrite <number>
设置保留的缓冲区空间大小,单位字节,这个空间用于header重写或者追加。
第一次读操做永远不会填充超过bufsize-maxrewrite大小的空间,
默认是bufsize的一半,尽管没有太大意义,由于不多有大的header须要添加。
设置为太大的值,能够避免处理很大的报文,过小避免额外的新header到
已经很大的请求体或者POST请求体???,
通常来讲,设置为1024比较明智,会自动调整到bufsize的一半若是比一半大。
因此不用担忧。
tune.rcvbuf.client <number>
tune.rcvbuf.server <number>
强制修改内核的socket接收缓冲区大小(client)/(server).
这个值适用于全部的TCP/HTTP frontends和 backends.
正常不该该被设置,默认值0可让内核自动调整这个值(依赖于可用的内存)
尽管如此,有时会帮助设置为很小的值好比4096,这是为了保留内核的内存(阻止缓存大量的接收的数据)
较低的值能够显著提升CPU使用率。
tune.sndbuf.client <number>
tune.sndbuf.server <number>
强制内核socket发送缓冲区大小(client)|(server).
对全部的TCP/HTTP frontends和backends都适用. 正常状况下永远不要设置,
默认值0可让内核自动调整这个值(依赖于可用的内存)
尽管如此,有时会帮助设置为很小的值好比4096,这是为了保留内核的内存(阻止缓存大量的接收的数据)
较低的值能够显著提升CPU使用率。
另一个可用的场景是:防止写超时???
3.3. 调试
启用debug模式,会输出全部的改变。而且禁止进入后台模式。
等价于-d,在生产环境中不该该使用,由于能够防止系统重启。
启动时不显示任何消息,等价于-q.
3.4. Userlists
能够控制对frontend/backend/listen的访问权,或者对http统计信息
这是经过允许仅仅认证过的用户,为了实现这个,须要建立至少一个userlist而且定义users.
userlist <listname>
建立一份新的userlist,名字为listname.
一些独立的用户列表可使用来存储认证数据。
group <groupname> [users <user>,<user>,(...)]
添加 group <groupname> 到当前的 userlist.
能够添加users到这个group,经过逗号隔开。以前加上users关键词。
user <username> [password|insecure-password <password>]
[groups <group>,<group>,(...)]
添加user <username> 到当前的userlist.
加密数据和非加密密码均可以。加密的密码使用crypt(3)(依赖于系统的能力)
不一样的算法也支持,好比如今的libc支持MD5, SHA-256, SHA-512 以及经典的DES-based
方法。
userlist L1
group G1 users tiger,scott
group G2 users xdb,scott
user tiger password $6$k6y3o.eP$JlKBx9za9667qe4(...)xHSwRv6J.C0/D7cV91
user scott insecure-password elgato
user xdb insecure-password hello
userlist L2
group G1
group G2
user tiger password $6$k6y3o.eP$JlKBx(...)xHSwRv6J.C0/D7cV91 groups G1
user scott insecure-password elgato groups G1,G2
user xdb insecure-password hello groups G2
|
翻译 |
理解 |
1 |
ok |
ok |
2 |
ok |
ok |