1. 程式人生 > >HAProxy關鍵配置詳解

HAProxy關鍵配置詳解

HAProxy的配置檔案共有5個域

  • global:用於配置全域性引數
  • default:用於配置所有frontend和backend的預設屬性
  • frontend:用於配置前端服務(即HAProxy自身提供的服務)例項
  • backend:用於配置後端服務(即HAProxy後面接的服務)例項組
  • listen:frontend+backend的組合配置,可以理解成更簡潔的配置方法

global域的配置

  • daemon:指定HAProxy以後臺模式執行,通常情況下都應該使用這一配置
  • user [username] :指定HAProxy程序所屬的使用者
  • group [groupname] :指定HAProxy程序所屬的使用者組
  • log [address] [device] [maxlevel] [minlevel]:日誌輸出配置,如log 127.0.0.1 local0 info warning,即向本機rsyslog或syslog的local0輸出info到warning級別的日誌。其中[minlevel]可以省略。HAProxy的日誌共有8個級別,從高到低為emerg/alert/crit/err/warning/notice/info/debug
  • pidfile :指定記錄HAProxy程序號的檔案絕對路徑。主要用於HAProxy程序的停止和重啟動作。
  • maxconn :HAProxy程序同時處理的連線數,當連線數達到這一數值時,HAProxy將停止接收連線請求

frontend域的配置

  • acl [name] [criterion] [flags] [operator] [value]:定義一條ACL,ACL是根據資料包的指定屬性以指定表示式計算出的true/false值。如"acl url_ms1 path_beg -i /ms1/"定義了名為url_ms1的ACL,該ACL在請求uri以/ms1/開頭(忽略大小寫)時為true
  • bind [ip]:[port]:frontend服務監聽的埠
  • default_backend [name]:frontend對應的預設backend
  • disabled:禁用此frontend
  • http-request [operation] [condition]:對所有到達此frontend的HTTP請求應用的策略,例如可以拒絕、要求認證、新增header、替換header、定義ACL等等。
  • http-response [operation] [condition]:對所有從此frontend返回的HTTP響應應用的策略,大體同上
  • log:同global域的log配置,僅應用於此frontend。如果要沿用global域的log配置,則此處配置為log global
  • maxconn:同global域的maxconn,僅應用於此frontend
  • mode:此frontend的工作模式,主要有http和tcp兩種,對應L7和L4兩種負載均衡模式
  • option forwardfor:在請求中新增X-Forwarded-For Header,記錄客戶端ip
  • option http-keep-alive:以KeepAlive模式提供服務
  • option httpclose:與http-keep-alive對應,關閉KeepAlive模式,如果HAProxy主要提供的是介面型別的服務,可以考慮採用httpclose模式,以節省連線數資源。但如果這樣做了,介面的呼叫端將不能使用HTTP連線池
  • option httplog:開啟httplog,HAProxy將會以類似Apache HTTP或Nginx的格式來記錄請求日誌
  • option tcplog:開啟tcplog,HAProxy將會在日誌中記錄資料包在傳輸層的更多屬性
  • stats uri [uri]:在此frontend上開啟監控頁面,通過[uri]訪問
  • stats refresh [time]:監控資料重新整理週期
  • stats auth [user]:[password]:監控頁面的認證使用者名稱密碼
  • timeout client [time]:指連線建立後,客戶端持續不傳送資料的超時時間
  • timeout http-request [time]:指連線建立後,客戶端沒能傳送完整HTTP請求的超時時間,主要用於防止DoS類攻擊,即建立連線後,以非常緩慢的速度傳送請求包,導致HAProxy連線被長時間佔用
  • use_backend [backend] if|unless [acl]:與ACL搭配使用,在滿足/不滿足ACL時轉發至指定的backend

backend域的關鍵配置

  • acl:同frontend域
  • balance [algorithm]:在此backend下所有server間的負載均衡演算法,常用的有roundrobin和source,完整的演算法說明見官方文件configuration.html#4.2-balance
  • cookie:在backend server間啟用基於cookie的會話保持策略,最常用的是insert方式,如cookie HA_STICKY_ms1 insert indirect nocache,指HAProxy將在響應中插入名為HA_STICKY_ms1的cookie,其值為對應的server定義中指定的值,並根據請求中此cookie的值決定轉發至哪個server。indirect代表如果請求中已經帶有合法的HA_STICK_ms1 cookie,則HAProxy不會在響應中再次插入此cookie,nocache則代表禁止鏈路上的所有閘道器和快取伺服器快取帶有Set-Cookie頭的響應。
  • default-server:用於指定此backend下所有server的預設設定。具體見下面的server配置。
  • disabled:禁用此backend
  • http-request/http-response:同frontend域
  • log:同frontend域
  • mode:同frontend域
  • option forwardfor:同frontend域
  • option http-keep-alive:同frontend域
  • option httpclose:同frontend域
  • option httpchk [METHOD] [URL] [VERSION]:定義以http方式進行的健康檢查策略。如option httpchk GET /healthCheck.html HTTP/1.1
  • option httplog:同frontend域
  • option tcplog:同frontend域
  • server [name] [ip]:[port] [params]:定義backend中的一個後端server,[params]用於指定這個server的引數
  • timeout connect [time]:指HAProxy嘗試與backend server建立連線的超時時間
  • timeout check [time]:預設情況下,健康檢查的連線+響應超時時間為server命令中指定的inter值,如果配置了timeout check,HAProxy會以inter作為健康檢查請求的連線超時時間,並以timeout check的值作為健康檢查請求的響應超時時間
  • timeout server [time]:指backend server響應HAProxy請求的超時時間

default域

上文所屬的frontend和backend域關鍵配置中,除acl、bind、http-request、http-response、use_backend外,其餘的均可以配置在default域中。default域中配置了的專案,如果在frontend或backend域中沒有配置,將會使用default域中的配置。

listen域

listen域是frontend域和backend域的組合,frontend域和backend域中所有的配置都可以配置在listen域下.