初識千萬級高並發負載均衡軟件HaProxy
什麽是HaProxy?
負載均衡的實現方式一般有兩種方式,硬件負載均衡和軟件負載均衡,硬件負載均衡最具代表性的當屬F5,軟件負載均衡的實現方案很多,大致分為兩類,一種為操作系統級的負載均衡,另一種為第三方應用的軟件負載均衡。LVS就是基於操作系統的一種軟件負載均衡,HaProxy和Nginx等就是開源的基於第三方應用的軟件負載均衡。
HaProxy是TCP / HTTP 反向代理服務器,尤其適合於高可用性環境。HAProxy 可以在4和7兩層作負載均衡。它支持兩種主要的代理模式:"tcp"也即4層(大多用於郵件服務器、內部協議通信服務器、Mysql等),和7層HTTP的代理。在4層的代理模式下,haproxy僅在客戶端和服務器之間進行流量轉發。但是在7才能夠http代理模式下,haproxy會分析應用層協議,並且能通過允許,拒絕,交換,增加,修改或者刪除請求或者回應裏指定內容來控制協議。
HaProxy的安裝與配置
在紅帽官方發行的Linux版本的鏡像中以加入了haproxy的軟件包。所以用戶無需使用復雜的編譯安裝方式來安裝該軟件,可直接使用yum方式或者rpm方式安裝haproxy
[root@node1 ~]# yum -y install haproxy #安裝haproxy [root@node1 ~]# rpm -qi haproxy #查看軟件信息 [root@node1 ~]# rpm -ql haproxy #查看軟件的文件列表 |
安裝完成後可使用如上命令來查看其信息和軟件列表,其中三個文件構成器軟件運行環境,即主程序,配置文件,服務啟動腳本。配置文件為
Haproxy配置
Haproxy的配置文件總體分為兩大段,全局配置段(global)和代理配置段(proxies)。
全局配置段:
主要配置進程及安全配置相關的參數性能調整相關參數和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> :設置每個進程每秒種所能建立的最大連接數量 maxsessrate <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/
本文出自 “Keep simple keep stupid” 博客,請務必保留此出處http://yangzhiheng.blog.51cto.com/11586378/1979161
初識千萬級高並發負載均衡軟件HaProxy