其中一些具有命令行等价。 下面的关键词可以在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 |