haproxy詳解(上)

參考文件http://cbonte.github.io/haproxy-dconv

軟件負載均衡一般通過兩種方式來實現:基于操作系統的軟負載實現和基于第三方應用的軟負載實現。LVS就是基于Linux操作系統實現的一種軟負載,HAProxy就是開源的并且基于第三應用實現的軟負載。HAProxy相比LVS的使用要簡單很多,功能方面也很豐富。當前,HAProxy支持兩種主要的代理模式:"tcp"也即4層(大多用于郵件服務器、內部協議通信服務器等),和7層(HTTP)。在4層模式 下,HAProxy僅在客戶端和服務器之間轉發雙向流量。7層模式下,HAProxy會分析協議,并且能通過允許、拒絕、交換、增加、修改或者***請求 (request)或者回應(response)里指定內容來控制協議,這種操作要基于特定規則。(新版本引入了frontend,backend指令;frontend根據任意 HTTP請求頭內容做規則匹配,然后把請求定向到相關的backend.)

現在用HAProxy主要在于它有以下優點,這里我總結下:

1、HAProxy是支持虛擬主機的,通過frontend指令來實現

2、能夠補充Nginx的一些缺點比如Session的保持,Cookie的引導等工作

3、支持url檢測后端的服務器出問題的檢測會有很好的幫助。

4、它跟LVS一樣,本身僅僅就只是一款負載均衡軟件;單純從效率上來講HAProxy更會比Nginx有更出色的負載均衡速度,在并發處理上也是優于Nginx的。

5、HAProxy可以對Mysql讀進行負載均衡,對后端的MySQL節點進行檢測和負載均衡,不過在后端的MySQL slaves數量超過10臺時性能不如LVS,所以我向大家推薦LVS+Keepalived。

6、能對請求的url和header中的信息做匹配,有比lvs有更好的7層實現

7、HAProxy的負載均衡算法現在也越來越多了,具體有如下8種:

①roundrobin,表示簡單的輪詢,這個不多說,這個是負載均衡基本都具備的;

②static-rr,表示根據權重,建議關注;

③leastconn,表示最少連接者先處理,建議關注;

④source,表示根據請求源IP,這個跟Nginx的IP_hash機制類似,我們用其作為解決session問題的一種方法

⑤ri,表示根據請求的URI;

⑥rl_param,表示根據請求的URl參數'balance url_param' requires an URL parameter name;

⑦hdr(name),表示根據HTTP請求頭來鎖定每一次HTTP請求;

⑧rdp-cookie(name),表示根據據cookie(name)來鎖定并哈希每一次TCP請求。

HAProxy配置中分五大部分:

global:全局配置參數,進程級的,用來控制Haproxy啟動前的一些進程及系統設置

defaults:配置一些默認的參數,可以被frontend,backend,listen段繼承使用

frontend:用來匹配接收客戶所請求的域名,uri等,并針對不同的匹配,做不同的請求處理

backend:定義后端服務器集群,以及對后端服務器的一些權重、隊列、連接數等選項的設置,我將其理解為Nginx中的upstream塊

listen:frontend和backend的組合體

haproxy在默認情況不會記錄日志,除了在haproxy.conf中的global段指定日志的輸出外,還需要配置系統日志的配置文件

1.在haproxy中global

log127.0.0.1local3 ? ? ? ??#local3是設備,對應于 /etc/rsyslog.conf中的配置,默認回收info的日志級別

2.編輯系統日志配置?

vim? /etc/rsyslog.conf ?

local3.*/var/log/haproxy.log#如果不加下面的的配置則除了在/var/log/haproxy.log中寫入日志外

3.配置rsyslog的主配置文件,開啟遠程日志

# vim /etc/sysconfig/rsyslog

SYSLOGD_OPTIONS=”-c2-r-m0″

#-c 2 使用兼容模式,默認是 -c 5

#-r 開啟遠程日志

#-m 0 標記時間戳。單位是分鐘,為0時,表示禁用該功能

重啟 haproxy和rsyslog?


haproxy中的session保持實現

1.在client增加cookie

8backend?backend_www

option?forwardfor

cookie?SERVERID?insert?indirect?nocache#插入session信息

option?????redispatch#當后端rs掛了,可立即切換,不會出現503錯誤

option?httpchk?HEAD?/?HTTP/1.0

balance?roundrobin

server?www1?192.168.1.198:80?cookie?www1check?inter?2000?rise?30?fall?15

server?www2?192.168.1.52:80?cookie?www2?checkinter?2000?rise?30?fall?15

2.balance source根據原ip,經過hash計算后,指定后端固定的rs

6backend?backend_www

option?forwardfor

option?httpchk?HEAD?/?HTTP/1.0

balancesource

server?www1?192.168.1.198:80?check?inter2000?rise?30?fall?15

server?www2?192.168.1.52:80check?inter?2000?rise?30?fall?15

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容