【51CTO.com 獨家特稿】雖然我們看HAProxy的官方文件確實配置內容比較多,但其實我們用於線上環境,僅此幾條就夠用了,這也是大家說HAProxy簡單的原因,HAProxy的對應配置檔案如下所示:
- 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
這裡要注意的幾個地方是:
一、HAProyx採用的是balance source機制,它跟LVS的persistent和Nginx的ip_hash一樣,是讓客戶機訪問時始終訪問後端的某一臺真實的web伺服器;
二、203.93.236.149是我的網站通過Keepalived生成的VIP地址;
三、 option httpchk HEAD /index.jsp HTTP/1.0 是網頁臨近,如果HAProxy檢測不到Web的根目錄下沒有index.jsp,就會產生503報錯。
HAProxy+keepalived/Heartbeat是我網站的第二套方案,因為剛開始網站上的LVS+Keepalived高可用架構,後來幾個朋友說用手機測試時,轉發很慢,有時打不開,甚有的電腦也是這樣,我嘗試了以下確實如此;所以用了HAProxy+Keepalived以後發現轉發速度確實快多了,手機上一拍網也沒有這個問題了,由於HAProxy+Keepalived在東莞的客戶那裡已經部署得很成功了,所以後期我也考慮將此網站設計成HAProyx+Keepalived這種架構的。
HAProxy的演算法有如下8種:
一、roundrobin,表示簡單的輪詢,這個不多說,這個是負載均衡基本都具備的;
二、static-rr,表示根據權重,建議關注;
三、leastconn,表示最少連線者先處理,建議關注;
四、source,表示根據請求源IP,建議關注;
五、uri,表示根據請求的URI;
六、url_param,表示根據請求的URl引數`balance url_param` requires an URL parameter name
七、hdr(name),表示根據HTTP請求頭來鎖定每一次HTTP請求;
八、rdp-cookie(name),表示根據據cookie(name)來鎖定並雜湊每一次TCP請求。
其實這些演算法各有各的用法,我們平時應用得比較多的應該是roundrobin、source和lestconn,大家可以重點關注下。這裡我用HAProxy+Keepalived時沒有考慮HAProxy程式級別的高HA,一來是因為淘寶也在用它作為負載均衡器,穩定性肯定不需要懷疑;二來在測試時發現確實相當的穩定,殺掉HAProxy程式還必須用kill -9,所以沒有在這上面浪費時間了;在測試時也確實考慮過用HAProxy+Keepalived做雙主架構,後來發現不是太好維護就算了。
有一點要提醒大家,HAProxy是支援虛擬主機的,我以前看過有些朋友說它是不支援的,這個其實很好驗證,我們做個1+1的架構,後面隨便放臺Nginx或Aapceh的web伺服器就可能驗證這種說法了;另外,經過與Nginx的正則對比,我們也確實發現HAProxy的正則處理能力上不如Nginx的強大和靈活的,我們這裡也可以採取一個折衷的方案,後面的web伺服器我們都用Nginx來作,如果是jsp應用,可以用Nginx+tomat,如果是跑PHP的,可以用Nginx+FastCGI(PHP5)。