HA-Proxy
HA-Proxy相比LVS的使用要簡單很多,功能方面也很豐富。HA-Proxy可以在4,7兩層作負載均衡,4層大多用於郵件服務器、內部協議通信服務器等作負載均衡,7層用於Http分析負載轉發。
在HA-Proxy官方網站可以下載配置說明文檔(configuration.txt)和架構文件(architecture.txt)作爲參考。具體的使用細節不做太多介紹,這裏主要通過具體的配置來大致說一下HA-Proxy的結構。
HA-Proxy 組件圖
HA-Proxy配置中分成四部分內容,當然這些組件不是必選的,可以根據需要選擇部分作爲配置。Defaults組件是配置默認參數的,這些參數可以被利用配置到frontend,backend,listen組件中(當這些組件某些參數沒有被配置而在Defaults中配置了)。Frontend組件是接收請求的前端虛擬節點,就類似於LVS中配置了VIP的Load Balancer,Frontend可以直接指定後端指向那一個backend(可動態選擇)。Backend是後端服務集羣的配置,類似於LVS中的那些Real Server,一個Backend對應一個或者多個實體服務器。Listen是Frontend和Backend的組合體,可以直接定義一個類似於JBoss的 Server Farm。還有一些默認的配置可以通過在配置文件中配置或者在命令行中作爲參數輸入。
HA-Proxy安裝和使用
安裝HA-Proxy:
1. 下載HA-Proxy安裝包。
2. 解壓執行make TARGET=linux26(注意,TARGET後面根據本機操作系統內核版本來填寫)
3. Make install
4. 目錄下執行haproxy,如果有使用說明出現表示已經安裝正常。
5. 使用方式haproxy –f 配置文件地址。(例如 haproxy –f haproxy.cfg)
HA-Proxy日誌配置說明:
HA-Proxy可以收集本機及其他後端服務器日誌,但是需要在Load Balancer上作一些配置。
首先修改/etc/sysconfig/syslog文件,將SYSLOGD_OPTIONS="-m 0” 修改爲SYSLOGD_OPTIONS="-m 0 -r -x",支持收集遠程服務器日誌。
然後修改/etc/syslog.conf,增加如下語句:
#add by haproxy
local0.* /home/admin/tools/haproxy-1.3.17/haproxy.log // haproxy.log地址代表了需要存儲日誌的地址
執行service syslog restart,重新啓動系統日誌器
最後就是在HA-Proxy的配置中增加日誌輸出(具體可以參考後面的配置文件說明)
HA-Proxy配置文件說明:
下面的配置文件簡單來說就是配置了根據請求參數的不同,將請求分別定向到後端的淘寶集羣和阿里軟件集羣。具體配置文件(haproxy.cfg)如下:
log 127.0.0.1 local0 info //日誌輸出配置,所有的日誌都記錄在本機,通過local0的系統日誌器輸出,這關係到前面我們做的配置
daemon //以後臺進程方式啓動Ha-proxy
nbproc 2 //啓動兩個ha-proxy進程實例
pidfile /home/admin/tools/haproxy-1.3.17/haproxy.pid // pid記錄的文件
defaults //默認配置
mode http //默認採用http模式,可以配置tcp來做4層消息轉發
option httplog //採用http日誌格式
retries 3 //三次連接失敗就認爲是服務器不可用,主要是通過後面的check配置來實現服務器狀態檢查
maxconn 2000 //最大連接數
contimeout 5000 //連接超時時間
clitimeout 50000 //客戶端連接超時時間
srvtimeout 50000 //服務端連接超時時間
stats uri /admin?stats //服務器狀態統計查看頁面
stats auth wenchu:wenchu //服務器狀態查看授權的用戶名和密碼設置,可以不設置
option httpchk HEAD /welcome.html HTTP/1.0 //服務器狀態檢查設置,這裏是向每一個後端服務器請求/welcome.html頁面來檢查服務端健康狀況。
frontend http-in //前端節點定義
bind :8181 //虛擬服務節點監聽本地的8181端口
mode http
log global
option httplog
option httpclose //每次請求完畢後主動關閉http通道,HA-Proxy不支持keep-alive模式,只能夠模擬這種模式的實現
option forwardfor //如果後端服務器需要獲得客戶端的真實IP需要配置次參數,將可以從Http Header中獲得客戶端IP
capture request header Host len 20 //此配置和一下的類似配置都是抓取Http請求中的參數記錄到日誌中。
capture request header User-Agent len 16
capture request header Content-Length len 10
capture request header Referer len 20
capture response header Content-Length len 10
//控制策略的配置
acl api_taobao url_sub -i sip_apiname=taobao. //在請求url中包含sip_apiname=taobao,則此控制策略返回true,否則爲false
acl api_alisoft url_sub -i sip_apiname=alisoft. //在請求url中包含sip_apiname=alisoft,則此控制策略返回true,否則爲false
acl invalid_req url_sub -i sip_apiname= //在請求url中包含sip_apiname=,則此控制策略返回true,否則爲false
acl stat_req url_dir -i admin //在請求url中存在admin作爲部分地址路徑,則此控制策略返回true,否則返回false
block if !invalid_req !stat_req //block表示阻止請求,返回403錯誤,當前表示如果不滿足策略invalid_req,同時也不滿足策略stat_req,則阻止請求。(就是要求URL中必需有參數sip_apiname,除非是查看服務器狀態的URL)。
use_backend alisoft_server if api_alisoft //如果是滿足策略api_alisoft的情況,則使用alisoft_server作爲後端服務集羣。
use_backend taobao_server if api_taobao //如果是滿足策略api_taobao的情況,則使用taobao_server作爲後端服務集羣。
default_backend alisoft_server //使用alisoft_server作爲默認後端服務集羣。
backend alisoft_server //後端節點定義
mode http
balance roundrobin //負載均衡策略配置
cookie SERVERID //允許插入serverid到cookie中,serverid後面可以定義
server app1 10.2.225.139:80 cookie 1 check fall 5 weight 1 //真實服務器配置定義cookie 1表示serverid爲1,check表示需要狀態檢查,fall 5表示失敗五次就認爲服務器狀態不可用(不在接受請求),weight 1表示權重
server app2 10.2.225.136:80 cookie 2 check fall 5 weight 2
backend taobao_server //後端節點定義
mode http
server app3 10.2.226.41:80 check fall 5
完成配置後,執行haproxy –f haproxy.cfg,後臺進程就可以啓動了,然後在瀏覽器中輸入剛纔定義的狀態檢查地址可以看到如下內容:
可以看到定義的前端和後端節點的狀態。對於Ha-proxy很多配置這裏面都沒有使用,也沒有詳細講解,使用者可以通過查看官方的配置文檔瞭解細節。下面三個圖片分別說明了對於sip_apiname不同的訪問產生最後的結果。
上圖的sip_apiname爲alisoft.get.user,因此被定向到Alisoft集羣,也就是136或者139上(這裏是136處理了服務)。
上圖的sip_apiname爲taobao.get.user,因此被定向到Alisoft集羣,也就是41上。
上圖的sip_apiname沒有傳遞,因此被拒絕訪問,返回403錯誤。
轉自:http://blog.csdn.net/cenwenchu79/archive/2009/08/04/4409343.aspx