本節講解全局參數配置。 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 |