歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> HAProxy官方文檔1.4 解析 - 全局參數

HAProxy官方文檔1.4 解析 - 全局參數

日期:2017/2/27 15:55:18   编辑:Linux教程
全局區域裡的參數是進程級別的,經常跟操作系統相關。他們一次性設置且不需要再變動。

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

下面的關鍵詞可以在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!
Copyright © Linux教程網 All Rights Reserved