HAProxy負(fù)載均衡器的配置與算法
原創(chuàng)【51CTO.com 獨(dú)家特稿】雖然我們看HAProxy的官方文檔確實(shí)配置內(nèi)容比較多,但其實(shí)我們用于線上環(huán)境,僅此幾條就夠用了,這也是大家說HAProxy簡(jiǎn)單的原因,HAProxy的對(duì)應(yīng)配置文件如下所示:
- global
- log 127.0.0.1 local0
- maxconn 4096
- chroot /usr/local/haproxy
- uid 99
- gid 99
- daemon
- nbproc 1
- pidfile /usr/local/haproxy/logs/haproxy.pid
- debug
- defaults
- log 127.0.0.1 local3
- mode http
- option httplog
- option httpclose
- option dontlognull
- option forwardfor
- option redispatch
- retries 2
- maxconn 2000
- balance source
- stats uri /haproxy-stats
- contimeout 5000
- clitimeout 50000
- srvtimeout 50000
- listen 1paituan_proxy 203.93.236.149:80
- option httpchk HEAD /index.jsp HTTP/1.0
- server web1 203.93.236.147:80 cookie app1inst1 check inter 2000 rise 2 fall 1
- server web2 203.93.236.146:80 cookie app1inst2 check inter 2000 rise 2 fall 1
加上日志支持,如下所示:
- #vim /etc/syslog.conf
- 添加:
- local3.* /var/log/haproxy.log
- local0.* /var/log/haproxy.log
- #vim /etc/sysconfig/syslog
- 修改:
- SYSLOGD_OPTIONS="-r -m 0"
- service syslog restart
這里要注意的幾個(gè)地方是:
一、HAProyx采用的是balance source機(jī)制,它跟LVS的persistent和Nginx的ip_hash一樣,是讓客戶機(jī)訪問時(shí)始終訪問后端的某一臺(tái)真實(shí)的web服務(wù)器;
二、203.93.236.149是我的網(wǎng)站通過Keepalived生成的VIP地址;
三、 option httpchk HEAD /index.jsp HTTP/1.0 是網(wǎng)頁(yè)臨近,如果HAProxy檢測(cè)不到Web的根目錄下沒有index.jsp,就會(huì)產(chǎn)生503報(bào)錯(cuò)。
HAProxy+keepalived/Heartbeat是我網(wǎng)站的第二套方案,因?yàn)閯傞_始網(wǎng)站上的LVS+Keepalived高可用架構(gòu),后來幾個(gè)朋友說用手機(jī)測(cè)試時(shí),轉(zhuǎn)發(fā)很慢,有時(shí)打不開,甚有的電腦也是這樣,我嘗試了以下確實(shí)如此;所以用了Nginx+Keepalived以后發(fā)現(xiàn)轉(zhuǎn)發(fā)速度確實(shí)快多了,手機(jī)上一拍網(wǎng)也沒有這個(gè)問題了,由于Nginx+Keepalived在東莞的客戶那里已經(jīng)部署得很成功了,所以后期我也考慮將此網(wǎng)站設(shè)計(jì)成HAProyx+Keepalived這種架構(gòu)的。
HAProxy的算法有如下8種:
一、roundrobin,表示簡(jiǎn)單的輪詢,這個(gè)不多說,這個(gè)是負(fù)載均衡基本都具備的;
二、static-rr,表示根據(jù)權(quán)重,建議關(guān)注;
三、leastconn,表示最少連接者先處理,建議關(guān)注;
四、source,表示根據(jù)請(qǐng)求源IP,建議關(guān)注;
五、uri,表示根據(jù)請(qǐng)求的URI;
六、url_param,表示根據(jù)請(qǐng)求的URl參數(shù)'balance url_param' requires an URL parameter name
七、hdr(name),表示根據(jù)HTTP請(qǐng)求頭來鎖定每一次HTTP請(qǐng)求;
八、rdp-cookie(name),表示根據(jù)據(jù)cookie(name)來鎖定并哈希每一次TCP請(qǐng)求。
其實(shí)這些算法各有各的用法,我們平時(shí)應(yīng)用得比較多的應(yīng)該是roundrobin、source和lestconn,大家可以重點(diǎn)關(guān)注下。這里我用HAProxy+Keepalived時(shí)沒有考慮HAProxy進(jìn)程級(jí)別的高HA,一來是因?yàn)樘詫氁苍谟盟鳛樨?fù)載均衡器,穩(wěn)定性肯定不需要懷疑;二來在測(cè)試時(shí)發(fā)現(xiàn)確實(shí)相當(dāng)?shù)姆€(wěn)定,殺掉HAProxy進(jìn)程還必須用kill -9,所以沒有在這上面浪費(fèi)時(shí)間了;在測(cè)試時(shí)也確實(shí)考慮過用HAProxy+Keepalived做雙主架構(gòu),后來發(fā)現(xiàn)不是太好維護(hù)就算了。
有一點(diǎn)要提醒大家,HAProxy是支持虛擬主機(jī)的,我以前看過有些朋友說它是不支持的,這個(gè)其實(shí)很好驗(yàn)證,我們做個(gè)1+1的架構(gòu),后面隨便放臺(tái)Nginx或Aapceh的web服務(wù)器就可能驗(yàn)證這種說法了;另外,經(jīng)過與Nginx的正則對(duì)比,我們也確實(shí)發(fā)現(xiàn)HAProxy的正則處理能力上不如Nginx的強(qiáng)大和靈活的,我們這里也可以采取一個(gè)折衷的方案,后面的web服務(wù)器我們都用Nginx來作,如果是jsp應(yīng)用,可以用Nginx+tomat,如果是跑PHP的,可以用Nginx+FastCGI(PHP5)。
余洪春(撫琴煮酒),《構(gòu)建高性能的Linux服務(wù)器》一書作者,一拍網(wǎng)系統(tǒng)架構(gòu)師、資深項(xiàng)目管理工程師,ChinaUnix集群和高可用版版主。
【51CTO.com獨(dú)家特稿,非經(jīng)授權(quán)謝絕轉(zhuǎn)載!合作媒體轉(zhuǎn)載請(qǐng)注明原文出處及出處!】