負(fù)載均衡haproxy

  • 程序環(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ù)。
image.png
  • 七層:
  • 七層負(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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末炸枣,一起剝皮案震驚了整個(gè)濱河市虏等,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌适肠,老刑警劉巖霍衫,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異侯养,居然都是意外死亡敦跌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門逛揩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柠傍,“玉大人,你說我怎么就攤上這事辩稽【宓眩” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵逞泄,是天一觀的道長(zhǎng)患整。 經(jīng)常有香客問我,道長(zhǎng)喷众,這世上最難降的妖魔是什么各谚? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮到千,結(jié)果婚禮上昌渤,老公的妹妹穿的比我還像新娘。我一直安慰自己父阻,他們只是感情好愈涩,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布望抽。 她就那樣靜靜地躺著加矛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪煤篙。 梳的紋絲不亂的頭發(fā)上斟览,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音辑奈,去河邊找鬼苛茂。 笑死已烤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的妓羊。 我是一名探鬼主播胯究,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼躁绸!你這毒婦竟也來了裕循?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤净刮,失蹤者是張志新(化名)和其女友劉穎剥哑,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淹父,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡株婴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了暑认。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片困介。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蘸际,靈堂內(nèi)的尸體忽然破棺而出逻翁,到底是詐尸還是另有隱情,我是刑警寧澤捡鱼,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布八回,位于F島的核電站,受9級(jí)特大地震影響驾诈,放射性物質(zhì)發(fā)生泄漏缠诅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一乍迄、第九天 我趴在偏房一處隱蔽的房頂上張望管引。 院中可真熱鬧,春花似錦闯两、人聲如沸褥伴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)重慢。三九已至,卻和暖如春逊躁,著一層夾襖步出監(jiān)牢的瞬間似踱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留核芽,地道東北人囚戚。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像轧简,于是被迫代替她去往敵國(guó)和親驰坊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361