haproxy筆記之三:配置HAProxy詳細介紹


2.1 配置文件格式

HAProxy的配置處理3類來主要參數來源:
——最優先處理的命令行參數,
——“global”配置段,用於設定全局配置參數;
——proxy相關配置段,如“defaults”、“listen”、“frontend”和“backend”;

2.2 時間格式

一些包含了值的參數表示時間,如超時時長。這些值一般以毫秒為單位,但也可以使用其它的時間單位后綴。
us: 微秒(microseconds),即1/1000000秒;
ms: 毫秒(milliseconds),即1/1000秒;
s: 秒(seconds);
m: 分鍾(minutes);
h:小時(hours);
d: 天(days);

2.3 例子

下面的例子配置了一個監聽在所有接口的80端口上HTTP proxy服務,它轉發所有的請求至后端監聽在127.0.0.1:8000上的"server"。

global
daemon
maxconn 25600

defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms

frontend http-in
bind *:80
default_backend servers

backend servers
server server1 127.0.0.1:8080 maxconn 32

2.4 全局配置

“global”配置中的參數為進程級別的參數,且通常與其運行的OS相關。

* 進程管理及安全相關的參數
- chroot <jail dir>:修改haproxy的工作目錄至指定的目錄並在放棄權限之前執行chroot()操作,可以提升haproxy的安全級別,不過需要注意的是要確保指定的目錄為空目錄且任何用戶均不能有寫權限;
- daemon:讓haproxy以守護進程的方式工作於后台,其等同於“-D”選項的功能,當然,也可以在命令行中以“-db”選項將其禁用;
- gid <number>:以指定的GID運行haproxy,建議使用專用於運行haproxy的GID,以免因權限問題帶來風險;
- group <group name>:同gid,不過指定的組名;
- log <address> <facility> [max level [min level]]:定義全局的syslog服務器,最多可以定義兩個;
- log-send-hostname [<string>]:在syslog信息的首部添加當前主機名,可以為“string”指定的名稱,也可以缺省使用當前主機名;
- nbproc <number>:指定啟動的haproxy進程個數,只能用於守護進程模式的haproxy;默認只啟動一個進程,鑒於調試困難等多方面的原因,一般只在單進程僅能打開少數文件描述符的場景中才使用多進程模式;
- pidfile:
- uid:以指定的UID身份運行haproxy進程;
- ulimit-n:設定每進程所能夠打開的最大文件描述符數目,默認情況下其會自動進行計算,因此不推薦修改此選項;
- user:同uid,但使用的是用戶名;
- stats:
- node:定義當前節點的名稱,用於HA場景中多haproxy進程共享同一個IP地址時;
- description:當前實例的描述信息;

* 性能調整相關的參數
- maxconn <number>:設定每個haproxy進程所接受的最大並發連接數,其等同於命令行選項“-n”;“ulimit -n”自動計算的結果正是參照此參數設定的;
- maxpipes <number>:haproxy使用pipe完成基於內核的tcp報文重組,此選項則用於設定每進程所允許使用的最大pipe個數;每個pipe會打開兩個文件描述符,因此,“ulimit -n”自動計算時會根據需要調大此值;默認為maxconn/4,其通常會顯得過大;
- noepoll:在Linux系統上禁用epoll機制;
- nokqueue:在BSE系統上禁用kqueue機制;
- nopoll:禁用poll機制;
- nosepoll:在Linux禁用啟發式epoll機制;
- nosplice:禁止在Linux套接字上使用內核tcp重組,這會導致更多的recv/send系統調用;不過,在Linux 2.6.25-28系列的內核上,tcp重組功能有bug存在;
- spread-checks <0..50, in percent>:在haproxy后端有着眾多服務器的場景中,在精確的時間間隔后統一對眾服務器進行健康狀況檢查可能會帶來意外問題;此選項用於將其檢查的時間間隔長度上增加或減小一定的隨機時長;
- tune.bufsize <number>:設定buffer的大小,同樣的內存條件小,較小的值可以讓haproxy有能力接受更多的並發連接,較大的值可以讓某些應用程序使用較大的cookie信息;默認為16384,其可以在編譯時修改,不過強烈建議使用默認值;
- tune.chksize <number>:設定檢查緩沖區的大小,單位為字節;更大的值有助於在較大的頁面中完成基於字符串或模式的文本查找,但也會占用更多的系統資源;不建議修改;
- tune.maxaccept <number>:設定haproxy進程內核調度運行時一次性可以接受的連接的個數,較大的值可以帶來較大的吞吐率,默認在單進程模式下為100,多進程模式下為8,設定為-1可以禁止此限制;一般不建議修改;
- tune.maxpollevents <number>:設定一次系統調用可以處理的事件最大數,默認值取決於OS;其值小於200時可節約帶寬,但會略微增大網絡延遲,而大於200時會降低延遲,但會稍稍增加網絡帶寬的占用量;
- tune.maxrewrite <number>:設定為首部重寫或追加而預留的緩沖空間,建議使用1024左右的大小;在需要使用更大的空間時,haproxy會自動增加其值;
- tune.rcvbuf.client <number>:
- tune.rcvbuf.server <number>:設定內核套接字中服務端或客戶端接收緩沖的大小,單位為字節;強烈推薦使用默認值;
- tune.sndbuf.client:
- tune.sndbuf.server:

* Debug相關的參數
- debug
- quiet

2.5 代理

代理相關的配置可以如下配置段中。

- defaults <name>
- frontend <name>
- backend <name>
- listen <name>

“defaults”段用於為所有其它配置段提供默認參數,這配置默認配置參數可由下一個“defaults”所重新設定。

“frontend”段用於定義一系列監聽的套接字,這些套接字可接受客戶端請求並與之建立連接。

“backend”段用於定義一系列“后端”服務器,代理將會將對應客戶端的請求轉發至這些服務器。

“listen”段通過關聯“前端”和“后端”定義了一個完整的代理,通常只對TCP流量有用。

所有代理的名稱只能使用大寫字母、小寫字母、數字、-(中線)、_(下划線)、.(點號)和:(冒號)。此外,ACL名稱會區分字母大小寫。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM