haproxy負載均衡

 雖然我們看HAProxy的官方文檔確實配置內容比較多,但其實我們用於線上環境,僅此幾條就夠用了,這也是大家說HAProxy簡單的原因,HAProxy的對應配置文件如下所示:

  1. global  
  2.         log 127.0.0.1   local0  
  3.         maxconn 4096  
  4.         chroot /usr/local/haproxy  
  5.         uid 99   
  6.         gid 99  
  7.         daemon  
  8.         nbproc 1  
  9.         pidfile /usr/local/haproxy/logs/haproxy.pid  
  10.         debug  
  11.  
  12. defaults  
  13.         log     127.0.0.1       local3  
  14.         mode    http  
  15.         option httplog  
  16.         option httpclose  
  17.         option dontlognull  
  18.         option forwardfor  
  19.         option redispatch  
  20.         retries 2  
  21.         maxconn 2000  
  22.         balance source  
  23.         stats   uri     /haproxy-stats  
  24.         contimeout      5000  
  25.         clitimeout      50000  
  26.         srvtimeout      50000  
  27.  
  28.  frontend http-in
  29. bind *:81
  30. default_backend pool1
  31. backend pool1
  32. option httpchk GET /test.php
  33. stats refresh 2
  34. server server1 192.168.12.191:80 weight 3 maxconn 32
  35. server server2 192.168.12.197:80 weight 3 maxconn 32
  36.  

加上日誌支持,如下所示:

  1. #vim /etc/syslog.conf  
  2.  
  3. 添加:  
  4.  
  5. local3.*        /var/log/haproxy.log  
  6. local0.*        /var/log/haproxy.log  
  7.  
  8. #vim /etc/sysconfig/syslog  
  9.  
  10. 修改:  
  11.  
  12. SYSLOGD_OPTIONS="-r -m 0" 
  13. service syslog restart
  14.  
  15. 因爲我用得是cent os6,所以需要:
  16. vi /etc/rsyslog.conf
  17. $Modload imudp.so
  18. $UDPServerRUN 514
  19. service rsyslogd 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高可用架構,後來幾個朋友說用手機測試時,轉發很慢,有時打不開,甚有的電腦也是這樣,我嘗試了以下確實如此;所以用了Nginx+Keepalived以後發現轉發速度確實快多了,手機上一拍網也沒有這個問題了,由於Nginx+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)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章