1.HAProxy簡介
HAProxy是一個開源的,高效能的,基於TCP(四層),HTTP(七層)應用的負載平衡軟體。那HAproxy作為一個專業的負載平衡軟體,它的優點如下:
.可靠性和穩定性非常好,可以與硬體級F5負載平衡裝置相媲美
.最高可同時維護40000-50000個並發串連,單位時間內最大請求數為20000個,最大資料處理能力可達10Gbps
.支援多於8種負載平衡演算法,同時支援會話保持
.支援虛擬機器主機功能
.從1.3版本後支援拒絕串連,全透明代理,這些功能是其它的負載平衡所不具備的
.HAPRoxy擁有一個強大的伺服器狀態監控頁面,通過此頁面可即時瞭解系統狀況
.HAproxy擁有功能強大的ACL支援,給使用上帶來很大方便
HAProxy是藉助於作業系統的技術特性來實現效能最大化的,因此,在使用haproxy時對作業系統的效能調優是非常重要的
2.安裝
前往HAProxy官網下載地址http://www.haproxy.org/
官網目前最新穩定版1.7.8版本下載地址
http://www.haproxy.org/download/1.7/src/haproxy-1.7.8.tar.gz
tar zxvf haproxy-1.7.8.tar.gzcd haproxy-1.7.8make TARGET=linux26 PREFIX=/usr/local/haproxymake install PREFIX=/usr/local/haproxymkdir /usr/local/haproxy/confcp examples/option-http_proxy.cfg /usr/local/haproxy/haproxy.cfg
3.為了大家能夠看懂整個設定檔,我將貼出我的設定檔內容,裡面會有注釋協助大家理解
## demo config for Proxy mode# global maxconn 20000#設定HAProxy進程可接受的最大並發數ulimit-n41000#linux命令列選項,等同於上參數 log 127.0.0.1 local0#全域的日誌中配置,local0 是日誌裝置 info(err,warnig,minfo,debug)為記錄層級,使用rsyslog uid 200 gid 200#使用者和組 ,可以用uid,gid代替 chroot /var/emptynbproc1#HAProxy啟動時可建立的進程數,配合daemon參數使用,預設只啟動一個進程,該值應小於cpu核心數。 daemon#進程後台運行,(推薦模式)defaultsmodehttp#執行個體的預設運行模式retries3#串連後端伺服器的失敗重試次數timeoutconnect10s#串連伺服器的最長等待時間,預設單位為毫秒,可使用其它時間單位timeoutclient20s#串連用戶端發送資料時最長等待時間,預設單位為毫秒,可使用其它時間單位timeoutserver30s#伺服器回應給用戶端資料發送的最長等待時間,預設單位為毫秒,可使用其它時間單位timeoutcheck5s#對後端伺服器的檢查逾時時間,預設單位為毫秒,可使用其它時間單位listenadmin_statsbind*:9188#設定監控頁面的訪問地址,該地址表示為監聽本機所有地址的9188連接埠modehttplogglobal#使用全域日誌statsrefresh 30s#監控頁面自動重新整理時間statsuri /haproxy-status#uri的訪問尾碼statsrealm welcome login\ Haproxy#文本提示資訊statsauthadmin:admin~!@#統計頁面的使用者名稱和地址,每行一個statshide-version#隱藏統計頁面的HAProxy的版本資訊statsadmin if TRUE#可手工啟動或禁用後端真實伺服器,僅在1.4.9版本後有效frontend test-proxybind*:80#定義監聽地址 mode http log global option httplog#啟用日誌記錄optionforwardfor#擷取用戶端真實ip。通過日誌“X-Forwarded-For”查看optionhttpclose#HAProxy在完成一次請教請求串連後,將主動關閉該串連,對效能非常有協助 option dontlognull option nolinger option http_proxy maxconn 8000 timeout client 30s# layer3: Valid users#acl allow_host src 192.168.200.150/32acl allow_host src 192.168.10.0/24#acl 控制,運行192.168.10.0/24網段的訪問請求#acl使用方法如下#acl 自訂acl名稱 acl方法 -i [ 匹配的路徑或檔案 ]#acl allow_host src 0.0.0.0/24http-request deny if !allow_host#拒絕串連請求除allow_host外# layer7: prevent private network relaying#acl forbidden_dst url_ip 192.168.0.0/24#acl forbidden_dst url_ip 172.16.0.0/12acl forbidden_dst url_ip 192.168.20.0/24http-request deny if forbidden_dstdefault_backend test-proxy-srvbackend test-proxy-srvmode httptimeout connect 5stimeout server 5sretries 2optionredispatch#應用於cookie保持的環境optionabortonclose#自動結束長時間串連option nolingeroption http_proxy#optionhttpchkGET /index.phpbalanceroundrobincookieSERVERIDserver web1192.168.10.101:8080cookieserver1 weight 6 check inter 2000 rise 2 fall 3#後端伺服器真真實位址server web2192.168.10.101:8888cookieserver2weight 6 check inter 2000 rise 2 fall 3# layer7: Only GET method is validacl valid_method method GETacl valid_methodmethod POSThttp-request deny if !valid_method# layer7: protect bad replyhttp-response deny if { res.hdr(content-type) audio/mp3 }
4.啟動
haproxy的啟動在安裝目錄下的sbin下
haproxy -f /usr/local/haproxy.cfg
5.啟動時遇到常見的錯誤
in multi-process mode, stats will be limited to process assigned to the current request.
listen需要運行在單個進程內,需要指定預設進程,如果想解決此問題,可將全域參數nbproc設定為1
Proxy 'admin_stats': stats admin will not work correctly in multi-process mode.
[./haproxy.main()] FD limit (16384) too low for maxconn=20000/maxsock=40014. Please raise 'ulimit-n' to 40014 or more to avoid any trouble.
請設定參數ulimit-n 的值等於maxconn的2倍
6.到此haproxy的簡單負載平衡配置就設定完畢了,可通過ACL來控制7層的請求控制。