HA-Proxy 組件圖
HA-Proxy配置中分成四部分內(nèi)容,當(dāng)然這些組件不是必選的,可以根據(jù)需要選擇部分作為配置。Defaults組件是配置默認(rèn)參數(shù)的,這些參數(shù)可以被利用配置到frontend,backend,listen組件中(當(dāng)這些組件某些參數(shù)沒有被配置而在Defaults中配置了)。Frontend組件是接收請求的前端虛擬節(jié)點(diǎn),就類似于LVS中配置了VIP的Load Balancer,Frontend可以直接指定后端指向那一個(gè)backend(可動(dòng)態(tài)選擇)。Backend是后端服務(wù)集群的配置,類似于LVS中的那些Real Server,一個(gè)Backend對應(yīng)一個(gè)或者多個(gè)實(shí)體服務(wù)器。Listen是Frontend和Backend的組合體,可以直接定義一個(gè)類似于JBoss的 Server Farm。還有一些默認(rèn)的配置可以通過在配置文件中配置或者在命令行中作為參數(shù)輸入。
HA-Proxy安裝和使用
安裝HA-Proxy:
1. 下載HA-Proxy安裝包。
2. 解壓執(zhí)行make TARGET=linux26(注意,TARGET后面根據(jù)本機(jī)操作系統(tǒng)內(nèi)核版本來填寫)
3. Make install
4. 目錄下執(zhí)行haproxy,如果有使用說明出現(xiàn)表示已經(jīng)安裝正常。
5. 使用方式haproxy –f 配置文件地址。(例如 haproxy –f haproxy.cfg)
HA-Proxy日志配置說明:
HA-Proxy可以收集本機(jī)及其他后端服務(wù)器日志,但是需要在Load Balancer上作一些配置。
首先修改/etc/sysconfig/syslog文件,將SYSLOGD_OPTIONS="-m 0” 修改為SYSLOGD_OPTIONS="-m 0 -r -x",支持收集遠(yuǎn)程服務(wù)器日志。
然后修改/etc/syslog.conf,增加如下語句:
#add by haproxy
local0.* /home/admin/tools/haproxy-1.3.17/haproxy.log // haproxy.log地址代表了需要存儲(chǔ)日志的地址
執(zhí)行service syslog restart,重新啟動(dòng)系統(tǒng)日志器
最后就是在HA-Proxy的配置中增加日志輸出(具體可以參考后面的配置文件說明)
HA-Proxy配置文件說明:
下面的配置文件簡單來說就是配置了根據(jù)請求參數(shù)的不同,將請求分別定向到后端的淘寶集群和阿里軟件集群。具體配置文件(haproxy.cfg)如下:
log 127.0.0.1 local0 info //日志輸出配置,所有的日志都記錄在本機(jī),通過local0的系統(tǒng)日志器輸出,這關(guān)系到前面我們做的配置
daemon //以后臺(tái)進(jìn)程方式啟動(dòng)Ha-proxy
nbproc 2 //啟動(dòng)兩個(gè)ha-proxy進(jìn)程實(shí)例
pidfile /home/admin/tools/haproxy-1.3.17/haproxy.pid // pid記錄的文件
defaults //默認(rèn)配置
mode http //默認(rèn)采用http模式,可以配置tcp來做4層消息轉(zhuǎn)發(fā)
option httplog //采用http日志格式
retries 3 //三次連接失敗就認(rèn)為是服務(wù)器不可用,主要是通過后面的check配置來實(shí)現(xiàn)服務(wù)器狀態(tài)檢查
maxconn 2000 //最大連接數(shù)
contimeout 5000 //連接超時(shí)時(shí)間
clitimeout 50000 //客戶端連接超時(shí)時(shí)間
srvtimeout 50000 //服務(wù)端連接超時(shí)時(shí)間
stats uri /admin?stats //服務(wù)器狀態(tài)統(tǒng)計(jì)查看頁面
stats auth wenchu:wenchu //服務(wù)器狀態(tài)查看授權(quán)的用戶名和密碼設(shè)置,可以不設(shè)置
option httpchk HEAD /welcome.html HTTP/1.0 //服務(wù)器狀態(tài)檢查設(shè)置,這里是向每一個(gè)后端服務(wù)器請求/welcome.html頁面來檢查服務(wù)端健康狀況。
frontend http-in //前端節(jié)點(diǎn)定義
bind :8181 //虛擬服務(wù)節(jié)點(diǎn)監(jiān)聽本地的8181端口
mode http
log global
option httplog
option httpclose //每次請求完畢后主動(dòng)關(guān)閉http通道,HA-Proxy不支持keep-alive模式,只能夠模擬這種模式的實(shí)現(xiàn)
option forwardfor //如果后端服務(wù)器需要獲得客戶端的真實(shí)IP需要配置次參數(shù),將可以從Http Header中獲得客戶端IP
capture request header Host len 20 //此配置和一下的類似配置都是抓取Http請求中的參數(shù)記錄到日志中。
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錯(cuò)誤,當(dāng)前表示如果不滿足策略invalid_req,同時(shí)也不滿足策略stat_req,則阻止請求。(就是要求URL中必需有參數(shù)sip_apiname,除非是查看服務(wù)器狀態(tài)的URL)。
use_backend alisoft_server if api_alisoft //如果是滿足策略api_alisoft的情況,則使用alisoft_server作為后端服務(wù)集群。
use_backend taobao_server if api_taobao //如果是滿足策略api_taobao的情況,則使用taobao_server作為后端服務(wù)集群。
default_backend alisoft_server //使用alisoft_server作為默認(rèn)后端服務(wù)集群。
backend alisoft_server //后端節(jié)點(diǎn)定義
mode http
balance roundrobin //負(fù)載均衡策略配置
cookie SERVERID //允許插入serverid到cookie中,serverid后面可以定義
server app1 10.2.225.139:80 cookie 1 check fall 5 weight 1 //真實(shí)服務(wù)器配置定義cookie 1表示serverid為1,check表示需要狀態(tài)檢查,fall 5表示失敗五次就認(rèn)為服務(wù)器狀態(tài)不可用(不在接受請求),weight 1表示權(quán)重
server app2 10.2.225.136:80 cookie 2 check fall 5 weight 2
backend taobao_server //后端節(jié)點(diǎn)定義
mode http
server app3 10.2.226.41:80 check fall 5
完成配置后,執(zhí)行haproxy –f haproxy.cfg,后臺(tái)進(jìn)程就可以啟動(dòng)了,然后在瀏覽器中輸入剛才定義的狀態(tài)檢查地址可以看到如下內(nèi)容: