LinuxEye - Linux系统教程

LinuxEye - Linux系统教程

当前位置: 主页 > Linux教程 >

HAProxy官方文档1.4 解析 - 全局参数

时间:2015-03-02 09:49来源:oschina 编辑:qiangzigege 点击:
全局区域里的参数是进程级别的,经常跟操作系统相关。他们一次性设置且不需要再变动。 其中一些具有命令行等价。 下面的关键词可以在global区域中存在。 * Process管理和安全 - chro
全局区域里的参数是进程级别的,经常跟操作系统相关。他们一次性设置且不需要再变动。

其中一些具有命令行等价。

下面的关键词可以在global区域中存在。

 * Process管理和安全
   - chroot-à设置global.chroot->然后执行chroot(global.chroot),用来切换进程的根目录。
   - daemon-àglobal.mode |= MODE_DAEMON->以后台方式启动
   - gid---à设置global.gid->然后执行setgid(global.gid),修改进程的组ID
   - 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()。

这个操作提升安全级别,仅仅当进程以超级用户特权启动才生效。

必须保证目录是空的且任何用户都不可写。

daemon
使得进程已后台模式启动,建议的模式,也可以用-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,这个值看起来可以满足大部分场景。

代码会动态分配及释放管道,也可以退回到标准拷贝。

所以设置此值太低的话会影响性能。

noepoll

禁止epoll,等价于-de,那么剩下的可用事件处理系统通常是poll.

nokqueue

禁止kqueue,等价于-dk,下一个可用事件处理系统通常是poll.

nopoll

禁止poll,等价于-dp,下一个可用的是select.

应该永远不要进制poll,因为poll总是可用的。

nosepoll

禁止sepoll,等价于-ds,下一个可用的是epoll

nosplice

禁止使用内核级的socket tcp 拷贝,等价于"-dS".

则数据将使用传统方式和更轻便的recv/send 函数来拷贝。

内核级别的TCP拷贝在内核2.6+可用,大多数介于2.6.25 和2.6.28

有问题,并且将转发破坏了的数据,所以,它们不应该被使用,

这个选项可以在不确定时轻松的禁止内核拷贝。

"option splice-auto", "option splice-request" 和

"option splice-response".

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
启用debug模式,会输出所有的改变。并且禁止进入后台模式。

等价于-d,在生产环境中不应该使用,因为可以防止系统重启。
quiet

启动时不显示任何消息,等价于-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
last for 2 days!

转载请保留固定链接: https://linuxeye.com/Linux/2224.html

------分隔线----------------------------
标签:HAproxy
栏目列表
推荐内容