在紅帽官方發行的Linux版本的鏡像中以加入了haproxy的軟件包。因此用戶無需使用複雜的編譯安裝方式來安裝該軟件,可直接使用yum方式或者rpm方式安裝haproxy
前端
[root@node1 ~]# yum -y install haproxy #安裝haproxynode [root@node1 ~]# rpm -qi haproxy #查看軟件信息nginx [root@node1 ~]# rpm -ql haproxy #查看軟件的文件列表git |
安裝完成後可以使用如上命令來查看其信息和軟件列表,其中三個文件構成器軟件運行環境,即主程序,配置文件,服務啓動腳本。配置文件爲/etc/haproxy/haproxy.cfg。github
Haproxy配置redis
Haproxy的配置文件整體分爲兩大段,全局配置段(global)和代理配置段(proxies)。算法
全局配置段:sql
主要配置進程及安全配置相關的參數性能調整相關參數和Debug的一些選項。這些參數通常只設置一次,若是配置無誤,就不須要再次配置進行修改。後端
代理配置段下分爲四個子配置段:數組
defaults :爲frontend, backend,listen 提供默認配置
frontend :前端,至關於nginx 中的server {}段,用於接收請求的前端虛擬節點,Frontend能夠根據規則直接指定具體使用後端的backend(可動態選擇)
backend :後端,至關於nginx 中的upstream {}段,即後端服務集羣的配置,是真實的服務器,一個Backend對應一個或者多個實體服務器
listen :同時擁有前端和後端,即frontend和backendde 組合體, 適用於一對一環境
配置文件詳解:
全局配置段
global log 127.0.0.1 local2 #全局的日誌配置其中日誌級別是[err warning info debug],local2 是日誌設備,可是以前在/etc/syslog.conf文件中定義的是local0因此這裏也是用local2,同時支持把日誌存放與遠程的日誌服務器中,需對日誌服務進行陪孩子 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 #默認最大鏈接數 user haproxy #運行haproxy的用戶 group haproxy #運行haproxy的用戶 daemon #使HAProxy進程進入後臺運行(守護進程方式)。這是推薦的運行模式 nbproc 2 #要啓動的haproxy 的進程數量,系統默認單進程,要求使用daemon maxconnrate <number> :設置每一個進程每秒種所能創建的最大鏈接數量 maxse***ate <number> :設置每一個進程每秒種所能創建的最大會話數量 maxsslconn <number>: 每進程支持SSL 的最大鏈接數量 spread-checks <0..50, in percent> 健康檢測延遲時長比,建議2-5 之間 |
默認配置段
defaults mode http #默認使用http代理,作配置時注意 log global #使用全局默認日誌配置 option httplog #採用http日誌格式 option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch #若是cookie寫入了serverId而客戶端不會刷新cookie,當serverId對應的服務器掛掉後,強制定向到其餘健康的服務器 retries 3 timeout http-request 10s #請求超時時間 timeout queue 1m timeout connect 10s #鏈接超時時間 timeout client 1m #客戶端超時時間 timeout server 1m #服務端超時時間 timeout http-keep-alive 10s #持久鏈接超時時間 timeout check 10s #心跳檢測超時時間 maxconn 3000 |
Frontend ,backend,listen配置選項詳解:
Bind:指定一個或者多個前端偵聽地址和端口,用於listen,Frontend段
示例:
listen http_proxy bind :80,:443 bind 10.0.0.1:10080,10.0.0.1:10443 bind /var/run/ssl-frontend.sock user root mode 600 accept-proxy |
Balance:後端服務器組內的調度算法,用於default, backend,listen段
用法:balance <algorithm> [<arguments> ]
balance url_param <param>[check_post]
調度算法種類:
roundrobin:基於權重輪詢,動態算法,支持權重的運行時調整,支持慢啓動;每一個後端backend 中最多支持4095 個server
serveroptions:weight #
static-rr:基於權重輪詢,靜態算法,不支持權重的運行時調整及慢啓動;後端主機數量無上限
leastconn:加權最少鏈接,動態算法,最少鏈接的後端服務器優先分配接收新鏈接,相同鏈接時輪詢,推薦在較長會話的場景使用 ,例如MySQL 、LDAP 等,不適合http
first:根據服務器在列表中的位置,自上而下進行調度;前面服務器的鏈接數達到上限,新請求才會分配給下一臺服務
source:源地址hash ,新鏈接先按權重分配,後續鏈接按source 分配請求
uri:對URI 的左半部分或整個uri 作hash 計算,併除以服務器總權重取模,之後派發至某挑出的服務器, 適用於後端緩存服務器
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
左半部分:/<path>;<params>
整個uri :/<path>;<params>?<query>#<frag>
url_param:對用戶請求的uri 中的<params>部分中的參數的值做hash 計算,並由服務器總權重相除之後派發至某挑出的服務器;一般用於追蹤用戶,以確保來自同一個用戶的請求始終發往同一個Backend Server
hdr(<name>):對於每一個http 請求,此處由<name> 指定的http 首部將會被取出作hash;計算; 並由服務器總權重相除之後派發至某挑出的服務器; 無 有效值的會被輪詢調度
rdp-cookie 遠程桌面相關
rdp-cookie(<name>)
hash-type :哈希算法,用於default,listen,backend配置段
hash-type <method> <function><modifier>
method:
map-based:除權取餘法,哈希數據結構是靜態數組
consistent:一致性哈希,哈希數據結構是一棵樹
<function>: 哈希函數
sdbmdjb2 wt6
default_backend <backend>
無use_backend 匹配時,使用默認的backend,用於frontend中,或者defaults和listen中
default-server [param*]
爲backend 中的各server設定默認選項,用於default,listen,backend配置段
server <name><address>[:[port]] [param*]
定義後端主機的各服務器及其選項,用於listen和backend中。
server <name> <address>[:port] [settings ...] default-server [settings ...] <name> :服務器在haproxy 上的內部名稱;出如今日誌及警告信息 <address> :服務器地址,支持使用主機名 [:[port]] :端口映射;省略時,表示同bind 中綁定的端口 [param*] :參數 weight <weight> :權重,默認爲1 maxconn <maxconn> :當先後端server 的最大併發鏈接數 backlog <backlog> :當server 的鏈接數達到上限後的後援隊列長度 backup :設定當前server 爲備用服務器Sorry Server |
Haproxy的配置選項衆多,不能詳盡,讀者可查看其官方文檔進行學習。
https://cbonte.github.io/haproxy-dconv/