程序環(huán)境:
主程序:/usr/sbin/haproxy
配置文件:/etc/haproxy/haproxy.cfg
Unit file:/usr/lib/systemd/system/haproxy.service配置段:
global:全局配置段
進(jìn)程及安全配置相關(guān)的參數(shù)
性能調(diào)整相關(guān)參數(shù)
Debug參數(shù)proxies:代理配置段
defaults:為frontend, backend, listen提供默認(rèn)配置
frontend:前端速梗,相當(dāng)于nginx中的server {}
backend:后端说贝,相當(dāng)于nginx中的upstream {}
listen:同時(shí)擁有前端和后端配置
haproxy反向代理后端服務(wù)器httpd
1)修改haproxy配置文件尸昧,啟動(dòng)
[root@Centos7 ~]#vim /etc/haproxy/haproxy.cfg
listen web
mode tcp
bind 192.168.8.101:80
server web1 192.168.8.103:80 check
server web2 192.168.8.104:80 check
啟動(dòng)
[root@haproxy ~]#systemctl start haproxy
2)安裝httpd鹏溯,啟動(dòng)
[root@centos ~]#yum install httpd -y
[root@centos ~]#systemctl start httpd
3)測(cè)試
[root@centos ~]#while : ;do curl 192.168.8.101 ;sleep 0.5 ;done
<h1/>192.168.8.103</h1>
<h1/>192.168.8.103</h1>
<h1/>192.168.8.104</h1>
<h1/>192.168.8.103</h1>
<h1/>192.168.8.104</h1>
haproxy調(diào)度算法
HAProxy 靜態(tài)調(diào)度算法
balance:指明對(duì)后端服務(wù)器的調(diào)度算法磕昼,配置在listen或backend
靜態(tài)算法:按照事先定義好的規(guī)則輪詢公平調(diào)度,不關(guān)心后端服務(wù)器的當(dāng)前負(fù)載、鏈接數(shù)和相應(yīng)速度等,且無法實(shí)時(shí)修改權(quán)重在验,只能重啟后生效。
static-rr:基于權(quán)重的輪詢調(diào)度堵未,不支持權(quán)重的運(yùn)行時(shí)調(diào)整及后端服務(wù)器慢啟動(dòng)腋舌,其后端主機(jī)數(shù)量沒有限制
first:根據(jù)服務(wù)器在列表中的位置,自上而下進(jìn)行調(diào)度渗蟹,但是其只會(huì)當(dāng)?shù)谝慌_(tái)服務(wù)器的連接數(shù)達(dá)到上限块饺,新請(qǐng)求才會(huì)分配給下一臺(tái)服務(wù),因此會(huì)忽略服務(wù)器的權(quán)重設(shè)置雌芽。
HAProxy 動(dòng)態(tài)調(diào)度算法
動(dòng)態(tài)算法:基于后端服務(wù)器狀態(tài)進(jìn)行調(diào)度適當(dāng)調(diào)整授艰,比如優(yōu)先調(diào)度至當(dāng)前負(fù)載較低的服務(wù)器,且權(quán)重可以在haproxy運(yùn)行時(shí)動(dòng)態(tài)調(diào)整無需重啟世落。
roundrobin:基于權(quán)重的輪詢動(dòng)態(tài)調(diào)度算法淮腾,支持權(quán)重的運(yùn)行時(shí)調(diào)整,不等于lvs 的rr岛心,支持慢啟動(dòng)即新加的服務(wù)器會(huì)逐漸增加轉(zhuǎn)發(fā)數(shù)来破,每個(gè)后端backend中最多支持4095個(gè)server篮灼,此為默認(rèn)調(diào)度算法忘古,server 權(quán)重設(shè)置weight
leastconn:加權(quán)的最少連接的動(dòng)態(tài),支持權(quán)重的運(yùn)行時(shí)調(diào)整和慢啟動(dòng)诅诱,即當(dāng)前后端服務(wù)器連接最少的優(yōu)先調(diào)度髓堪,比較適合長(zhǎng)連接的場(chǎng)景使用,比如MySQL等場(chǎng)景娘荡。
HAProxy 調(diào)度算法-source
source:源地址hash干旁,基于用戶源地址hash并將請(qǐng)求轉(zhuǎn)發(fā)到后端服務(wù)器,默認(rèn)為靜態(tài)即取模方式炮沐,但是可以通過hash-type支持的選項(xiàng)更改争群,后續(xù)同一個(gè)源地址請(qǐng)求將被轉(zhuǎn)發(fā)至同一個(gè)后端web服務(wù)器,比較適用于session保持/緩存業(yè)務(wù)等場(chǎng)景大年。
map-based:取模法换薄,基于服務(wù)器權(quán)重的hash數(shù)組取模玉雾,該hash是靜態(tài)的即不支持在線調(diào)整權(quán)重,不支持慢啟動(dòng)轻要,其對(duì)后端服務(wù)器調(diào)度均衡复旬,缺點(diǎn)是當(dāng)服務(wù)器的總權(quán)重發(fā)生變化時(shí),即有服務(wù)器上線或下線冲泥,都會(huì)因權(quán)重發(fā)生變化而導(dǎo)致調(diào)度結(jié)果整體改變驹碍,hash(o)modn 。
source:源地址hash凡恍,基于用戶源地址hash并將請(qǐng)求轉(zhuǎn)發(fā)到后端服務(wù)器志秃,默認(rèn)為靜態(tài)即取模方式,但是可以通過hash-type支持的選項(xiàng)更改嚼酝,后續(xù)同一個(gè)源地址請(qǐng)求將被轉(zhuǎn)發(fā)至同一個(gè)后端web服務(wù)器洽损,比較適用于session保持/緩存業(yè)務(wù)等場(chǎng)景。
consistent:一致性哈希革半,該hash是動(dòng)態(tài)的碑定,支持在線調(diào)整權(quán)重,支持慢啟動(dòng)又官,優(yōu)點(diǎn)在于當(dāng)服務(wù)器的總權(quán)重發(fā)生變化時(shí)延刘,對(duì)調(diào)度結(jié)果影響是局部的,不會(huì)引起大的變動(dòng)六敬。
HAProxy 調(diào)度算法-uri
- uri:基于對(duì)用戶請(qǐng)求的uri做hash并將請(qǐng)求轉(zhuǎn)發(fā)到后端指定服務(wù)器
- map-based:取模法
- consistent:一致性哈希
uri調(diào)度算法示例:
listen web_prot_http_nodes
bind 192.168.7.101:80
mode http #不支持tcp碘赖,會(huì)切換到tcp的roundrobin負(fù)載模式
balance uri
hash-type consistent
log global
option forwardfor
server 192.168.7.101 192.168.7.101:8080 check inter 3000 fall 3 rise 5
server 192.168.7.102 192.168.7.102:8080 check inter 3000 fall 3 rise 5
HAProxy 調(diào)度算法-url_param
- url_param:
對(duì)用戶請(qǐng)求的url中的<params>部分中的參數(shù)name作hash計(jì)算,并由服務(wù)器總權(quán)重相除以后派發(fā)至某挑出的服務(wù)器外构;通常用于追蹤用戶普泡,以確保來自同一個(gè)用戶的請(qǐng)求始終發(fā)往同一個(gè)Backend Server
url_param調(diào)度算法示例:
listen web_prot_http_nodes
bind 192.168.7.101:80
mode http #不支持tcp,會(huì)切換到tcp的roundrobin負(fù)載模式
balance url_param name #基于參數(shù)name做hash
hash-type consistent
log global
option forwardfor
server 192.168.7.101 192.168.7.101:8080 check inter 3000 fall 3 rise 5
server 192.168.7.102 192.168.7.102:8080 check inter 3000 fall 3 rise 5
HAProxy 調(diào)度算法-hdr
- hdr(<name>):針對(duì)用戶每個(gè)http頭部(header)請(qǐng)求中的指定信息做hash审编,此處由<name>指定的http首部將會(huì)被取出并做hash計(jì)算撼班,然后由服務(wù)器總權(quán)重相除以后派發(fā)至某挑出的服務(wù)器,假如無有效的值垒酬,則會(huì)被輪詢調(diào)度
HAProxy 調(diào)度算法-rdp-cookie
- rdp-cookie對(duì)遠(yuǎn)程桌面的負(fù)載砰嘁,使用cookie保持會(huì)話
- rdp-cookie(<name>)
四層與七層的區(qū)別:
- 四層:
- 在四層負(fù)載設(shè)備中,把client發(fā)送的報(bào)文目標(biāo)地址(原來是負(fù)載均衡設(shè)備的IP地址)勘究,根據(jù)均衡設(shè)備設(shè)置的選擇web服務(wù)器的規(guī)則選擇對(duì)應(yīng)的web服務(wù)器IP地址矮湘,這樣client就可以直接跟此服務(wù)器建立TCP連接并發(fā)送數(shù)據(jù)。
- 七層:
- 七層負(fù)載均衡服務(wù)器起了一個(gè)代理服務(wù)器的作用口糕,服務(wù)器建立一次TCP連接要三次握手缅阳,而client要訪問webserver要先與七層負(fù)載設(shè)備進(jìn)行三次握手后建立TCP連接,把要訪問的報(bào)文信息發(fā)送給七層負(fù)載均衡景描;然后七層負(fù)載均衡再根據(jù)設(shè)置的均衡規(guī)則選擇特定的webserver十办,然后通過三次握手與此臺(tái)webserver建立TCP連接孤里,然后webserver把需要的數(shù)據(jù)發(fā)送給七層負(fù)載均衡設(shè)備,負(fù)載均衡設(shè)備再把數(shù)據(jù)發(fā)送給client橘洞;所以捌袜,七層負(fù)載均衡設(shè)備起到了代理服務(wù)器的作用。
基于cookie實(shí)現(xiàn)session會(huì)話保持
listen web
mode http
option forwardfor
bind 192.168.8.101:80
cookie NAME insert
server web1 192.168.8.103:80 cookie web1 check
server web2 192.168.8.104:80 cookie web2 check
基于域名匹配的 acl 訪問控制
listen web
mode http
rspidel server.*
option forwardfor
rspadd server:HAProxy
bind 192.168.8.101:80
acl test_host hdr_dom(host) www.xingyu.com
acl test_host1 hdr_dom(host) www.xingyu.vip
use_backend test_host if test_host
use_backend test_host1 if test_host1
# server web1 192.168.8.103:80 check
# server web2 192.168.8.104:80 check
backend test_host
mode http
server web3 192.168.8.103:80 check
backend test_host1
mode http
server web4 192.168.8.104:80 check