海量運(yùn)維常用技術(shù)之 HAProxy 網(wǎng)站負(fù)載均衡應(yīng)用
原創(chuàng)【51CTO原創(chuàng)文章】近期朋友劉鑫的網(wǎng)站成功上線并運(yùn)營(yíng)了,PV達(dá)到了億級(jí)/日的訪問(wèn)量,最前端用的是HAProxy+Keepalived雙機(jī)作的負(fù)載均衡器/反向代理,整個(gè)網(wǎng)站非常穩(wěn)定;這讓我更堅(jiān)定 了HAProxy+Keepalived作為Web最前端的負(fù)載均衡器網(wǎng)站架構(gòu)設(shè)計(jì)方案,在這里我也有一點(diǎn)要跟大家申明下:很多朋友擔(dān)心軟件級(jí)別的負(fù)載均衡在高并發(fā)流量沖擊下的穩(wěn)定情況,事實(shí)是我們通過(guò)成功上線的許多網(wǎng)站發(fā)現(xiàn),HAProxy作為前端的負(fù)載均衡的穩(wěn)定性是非常好的,宕機(jī)的可能性微乎其微,由于HAProxy我們多用于7層負(fù)載均衡,在大流量的沖擊下,發(fā)現(xiàn)確實(shí)對(duì)CPU有一定消耗,這里大家用DELL 710 | 910服務(wù)器。另外,HAProxy不僅僅只能做七層負(fù)載均衡,它還可以做四層負(fù)載均衡的,由于它跟LVS一樣,僅僅只是做為負(fù)載均衡專用,所以在轉(zhuǎn)發(fā)及處理流量的效率上,肯定是優(yōu)于Nginx的?,F(xiàn)在網(wǎng)上LVS/Nginx的資料太多了,所以大家的關(guān)注度自然也高,其實(shí)HAProxy也是很不錯(cuò)的,所以網(wǎng)站有負(fù)載均衡需求的朋友,不妨考慮試用下HAProxy。雙機(jī)高可用方案建議大家采用HAProxy+Keepalived。
LVS現(xiàn)在幾乎成了負(fù)載均衡的代名詞,其作用和功能不斷的被神化,但LVS有這么神奇嗎?前段時(shí)間負(fù)責(zé)升級(jí)的一個(gè)電子商務(wù)網(wǎng)站,由于業(yè)務(wù)和監(jiān)控的需求,后端的每臺(tái)Web服務(wù)器上面都有十幾條靜態(tài)路由再加兩個(gè)VLAN,LVS就滿足不了需求了,而Nginx/HAProxy就沒(méi)什么問(wèn)題,而作為負(fù)載轉(zhuǎn)發(fā)器,HAproxy的性能是優(yōu)行NGINX,另外大家都知道,由于ARP抑制的原因,LVS的部署和維護(hù)并不是太簡(jiǎn)單,而HAProxy/Nginx就不存在這些問(wèn)題。由于LVS本身還有些缺點(diǎn),淘寶的技術(shù)一直在完善它,2012年有興參加了淘寶的技術(shù)嘉年華,聽(tīng)取了吳佳明(淘寶普空)先生關(guān)于對(duì)LVS的改進(jìn)講座,其中提到了LVS的FULLNAT模式,它是一種新的轉(zhuǎn)發(fā)模式,實(shí)現(xiàn)LVS后端的真實(shí)物理服務(wù)器間跨VLAN通訊,并且IN/OUT流量都經(jīng)過(guò)LVS,另外,新的FULLNAT在防御DDOS攻擊方面也有很大改進(jìn),有興趣的朋友可以關(guān)注吳佳明先生的PPT。
再拿另外一個(gè)工作實(shí)例來(lái)說(shuō)下,另外一個(gè)廣告類型的網(wǎng)站,我負(fù)責(zé)改進(jìn)其整體架構(gòu)設(shè)計(jì),由于要保證整個(gè)網(wǎng)站的高可用,公司老總授意用F5來(lái)做為L(zhǎng)B,但經(jīng)過(guò)仔細(xì)分析,我發(fā)現(xiàn)網(wǎng)站初期流量并不是特別大,日PV不過(guò)百萬(wàn),而且網(wǎng)站主要是白天負(fù)責(zé)開(kāi)放,監(jiān)控人員也很多(運(yùn)維和運(yùn)營(yíng)人員白天基本都在),所以就用DNS輪詢的方式來(lái)處理了,而且事后發(fā)現(xiàn)效果也比較理想,達(dá)到了前期節(jié)約成本的目的,而且后期規(guī)劃中我也堅(jiān)定的選擇了HAProxy,放棄F5和LVS。
現(xiàn)在HAProxy的算法也非常多,并不比專業(yè)的F5/LVS算法少,常用的算法有如下8種:
- roundrobin,表示簡(jiǎn)單的輪詢,建議關(guān)注;
- static-rr,表示根據(jù)權(quán)重,建議關(guān)注;
- leastconn,表示最少連接者先處理,建議關(guān)注;
- source,表示根據(jù)請(qǐng)求源IP,跟Nginx的ip_hash算法相似,建議關(guān)注;
- uri,表示根據(jù)請(qǐng)求的URI;
- url_param,表示根據(jù)請(qǐng)求的URl參數(shù);
- hdr(name),表示根據(jù)HTTP請(qǐng)求頭來(lái)鎖定每一次HTTP請(qǐng)求;
- rdp-cookie(name),表示根據(jù)據(jù)cookie(name)來(lái)鎖定并哈希每一次TCP請(qǐng)求。
現(xiàn)在新版的HAProxy也越來(lái)越強(qiáng)了,開(kāi)始支持https了,建議關(guān)注HAProxy官方網(wǎng)站。
撰寫此文的目的是了推廣HAProxy的應(yīng)用,做技術(shù)的人不應(yīng)該人云亦云,道聽(tīng)途說(shuō),應(yīng)該以自己的線上環(huán)境和數(shù)據(jù)來(lái)說(shuō)話,來(lái)做為自己的論理根據(jù),也歡迎大家通過(guò)我的博客和微博地址來(lái)一起交流HAProxy在平時(shí)線上的應(yīng)用。
個(gè)人博客:http://andrewyu.blog.51cto.com
微博地址:http://weibo.com/yuhongchun027
【聲明】本文作者:余洪春(撫琴煮酒),英文名Andrew.Yu。在51CTO系統(tǒng)頻道首發(fā),轉(zhuǎn)載請(qǐng)注明作者和出處。