轉自(可能有一定的修改):
http://freeloda.blog.51cto.com/2033581/1294094
1.配置文件的格式
HAProxy的配置處理3類來主要參數(shù)來源:
- 最優(yōu)先處理的命令行參數(shù);
- “global”配置段,用于設定全局配置參數(shù);
- proxy相關配置段,如“defaults”、“l(fā)isten”、“frontend”和“backend”;
2.支持的時間格式
一些包含了值的參數(shù)表示時間,如超時時長。這些值一般以毫秒為單位,但也可以使用其它的時間單位后綴。
us: 微秒(microseconds),即1/1000000秒;
ms: 毫秒(milliseconds),即1/1000秒;
s: 秒(seconds);
m: 分鐘(minutes);
h:小時(hours);
d: 天(days);
3.簡單案例
下面的例子配置了一個監(jiān)聽在所有接口的 80 端口上 HTTP proxy服務,它轉發(fā)所有的請求至后端監(jiān)聽在 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
執(zhí)行如下命令檢查配置:
sudo haproxy -f configuration.conf -c
4.全局配置
注,“global”配置中的參數(shù)為進程級別的參數(shù),且通常與其運行的OS相關。
(1).進程管理及安全相關的參數(shù)
chroot <jail dir>:修改 haproxy 的工作目錄至指定的目錄并在放棄權限之前執(zhí)行chroot()操作,
可以提升haproxy的安全級別,不過需要注意的是要確保指定的目錄為空目錄且任何用戶均不能有寫權限;
daemon:讓haproxy以守護進程的方式工作于后臺,其等同于“-D”選項的功能,當然,也可以在命令行中以“-db”
選項將其禁用;
gid <number>:以指定的 GID 運行haproxy,建議使用專用于運行 haproxy 的 GID,以免因權限問題帶來風險;
group <group name>:同 gid,不過指定的組名;
log <address> <facility> [max level [min level]]:定義全局的 syslog 服務器,最多可以定義兩個;
什么時候發(fā)生日志給定義的 syslog 服務器?1.HAProxy 啟動和退出時;2.定義了 log global 的代理也會發(fā)送
日志給全局定義的 syslog 服務器。
<address>:
IPv4 + : + UDP 端口,默認端口為 514;
指向一個 Unix domain socket 的文件路徑(位于 chroot 內,有可寫權限)
<facility>: 如下其中之一
kern user mail daemon auth syslog lpr news
uucp cron auth2 ftp ntp audit alert cron2
local0 local1 local2 local3 local4 local5 local6 local7
日志等級:默認發(fā)送所有日志信息,略 --> 詳;
emerg alert crit err warning notice info debug
log-send-hostname [<string>]:在syslog信息的首部添加當前主機名,可以為“string”指定的名稱,也可以缺
省使用當前主機名;
nbproc <number>:指定啟動的haproxy進程個數(shù),只能用于守護進程模式的haproxy;默認只啟動一個進程,鑒于調
試困難等多方面的原因,一般只在單進程僅能打開少數(shù)文件描述符的場景中才使用多進程模式;
pidfile:將所有進程的 pid 寫入文件,啟動進程的用戶必須有權限訪問此文件
uid:以指定的 UID 身份運行haproxy進程;
ulimit-n:設定每個進程所能夠打開的最大文件描述符數(shù)目,默認情況下其會自動進行計算,因此不推薦修改此選項;
user:同 uid,但使用的是用戶名;
stats:
node:定義當前節(jié)點的名稱,用于HA場景中多haproxy進程共享同一個IP地址時;
description:當前實例的描述信息;
(2).性能調整相關的參數(shù)
maxconn <number>:設定每個 haproxy 進程所接受的最大并發(fā)連接數(shù),其等同于命令行選項“n”;
“ulimit n” 自動計算的結果正是參照此參數(shù)設定的;
maxpipes <number>:haproxy 使用 pipe 完成基于內核的tcp報文重組,此選項則用于設定每進程所允許
使用的最大pipe個數(shù);每個pipe會打開兩個文件描述符,因此,“ulimit n”自動計算時會根據(jù)需要調大此值;
默認為maxconn/4,其通常會顯得過大;
noepoll:在Linux系統(tǒng)上禁用epoll機制;
nokqueue:在BSE系統(tǒng)上禁用kqueue機制;
nopoll:禁用poll機制;
nosepoll:在Linux禁用啟發(fā)式epoll機制;
nosplice:禁止在Linux套接字上使用內核 tcp 重組,這會導致更多的recv/send系統(tǒng)調用;不過,
在Linux 2.6.2528系列的內核上,tcp 重組功能有bug存在;
spreadchecks <0..50, in percent>:在haproxy后端有著眾多服務器的場景中,在精確的時間間隔
后統(tǒng)一對眾服務器進行健康狀況檢查可能會帶來意外問題;此選項用于將其檢查的時間間隔長度上增加或減小一定的隨機時長;
tune.bufsize <number>:設定buffer的大小,同樣的內存條件下,較小的值可以讓haproxy有能力接受更多的并發(fā)連接,
較大的值可以讓某些應用程序使用較大的cookie信息;默認為16384,其可以在編譯時修改,不過強烈建議使用默認值;
tune.chksize <number>:設定檢查緩沖區(qū)的大小,單位為字節(jié);更大的值有助于在較大的頁面中完成基于字符串或模式
的文本查找,但也會占用更多的系統(tǒng)資源;不建議修改;
tune.maxaccept <number>:設定haproxy進程內核調度運行時一次性可以接受的連接的個數(shù),較大的值可以帶來較大
的吞吐率,默認在單進程模式下為100,多進程模式下為8,設定為1可以禁止此限制;一般不建議修改;
tune.maxpollevents <number>:設定一次系統(tǒng)調用可以處理的事件最大數(shù),默認值取決于OS;其值小于200時可節(jié)約帶寬,
但會略微增大網絡延遲,而大于200時會降低延遲,但會稍稍增加網絡帶寬的占用量;
tune.maxrewrite <number>:設定為首部重寫或追加而預留的緩沖空間,建議使用1024左右的大?。辉谛枰褂酶蟮目臻g時,
haproxy會自動增加其值;
tune.rcvbuf.client <number>:
tune.rcvbuf.server <number>:設定內核套接字中服務端或客戶端接收緩沖的大小,單位為字節(jié);強烈推薦使用默認值;
tune.sndbuf.client:
tune.sndbuf.server:
(3).Debug相關的參數(shù)
debug
quiet
5.代理
代理相關的配置可以如下配置段中,
defaults <name>
frontend <name>
backend <name>
listen <name>
“defaults”段用于為所有其它配置段提供默認參數(shù),這配置默認配置參數(shù)可由下一個“defaults”所重新設定。
“frontend”段用于定義一系列監(jiān)聽的套接字,這些套接字可接受客戶端請求并與之建立連接。
“backend”段用于定義一系列“后端”服務器,代理將會將對應客戶端的請求轉發(fā)至這些服務器。
“l(fā)isten”段通過關聯(lián)“前端”和“后端”定義了一個完整的代理,也就是直接在 listen 組合定義了前端和后端,通常用于定義 TCP 流量。例如:
listen main *:80
balance roundrobin
server s1 192.168.0.71:80
server s1 192.168.0.72:80
注,所有代理的名稱只能使用大寫字母、小寫字母、數(shù)字、-(中線)、_(下劃線)、.(點號)和:(冒號)。此外,ACL名稱會區(qū)分字母大小寫。更詳細的配置信息,請查閱官方文檔
HAProxy 的工作模式:
HAProxy 主要支持兩種代理:tcp(4層) 和 http(7層)。
在7層代理模式中,HAProxy 可以解析 HTTP 報文,對請求和響應報文的任意部分做 增加、修改、刪除 操作。
對報文可 允許、拒絕、轉發(fā)。解析報文,重新封裝。
在 4 層代理模式中,直接在 TCP 層調度,在客戶端和服務器端之間建立全雙工的連接。(分別與客戶端和服務端建立
連接,并將兩個連接合并到一起,轉發(fā) TCP 流量)
注意 https 與 http 協(xié)議是兩回事,使用 https 協(xié)議也只能使用 tcp 模式。