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

本節講解全局參數配置。 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會分散到這nbprocchild進程。  

 - 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—》不詳,略。

   - noepollglobal.tune.options &= ~GTUNE_USE_EPOLL—》經過disablepoller函數禁止某個IO複用。

   - nokqueue-global.tune.options &= ~GTUNE_USE_KQUEUE—》經過disablepoller函數禁止某個IO複用。

   - nopollglobal.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時設置clientsocket的接收緩衝區大小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時設置clientsocket的發送緩衝區大小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的訪問,經過在uidgid後指定數字。

或者usergroup後面的參數。

也能夠限制訪問(經過傳遞八進制的數值,在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%

值在【25】看起來不錯,默認值是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 frontendsbackends都適用. 正常狀況下永遠不要設置,

默認值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!
相關文章
相關標籤/搜索