一、HAproxy簡介
HAproxy是高性能的代理服務器,其可以提供Lay4、Lay7代理,具有Healthcheck,負載均衡,訪問控制特性,完全可以支持數以萬計的併發連接,性能卓越。而且HAproxy的運行模式使得它可以很簡單安全的整合進當前的架構中,同時可以保護後臺的web服務器不被暴露到網絡上。
二、實驗環境及配置
1.環境
系統環境:centos6.4-i386
haproxy:1.4.22-3-i686
安裝:yum-yinstallhaproxy
2.配置文件
global #全局段 log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon defaults #默認配置(全局有效) mode http # 基於那種模式工作(http 、tcp、health) log global #定義日誌 option httplog #詳細記錄http日誌 option dontlognull #不記錄健康檢查的日誌信息 option http-server-close option forwardfor except 127.0.0.0/8 option redispatch retries 3 option httplog option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch #ServerID對應的服務器宕機後,強制定向到其他運行正常的服務器 retries 3 #三次連接服務失敗認爲服務不可用 timeout http-request 10s #回覆報文超時時間 timeout queue 1m #排超隊超時時間 timeout connect 10s #連接超時時間 timeout client 1m #客戶端超時時間 timeout server 1m #服務器端超時時間 timeout http-keep-alive 10s #長連接超時時間 timeout check 10s #健康檢測超時時間 maxconn 3000 #最大連接數 frontend webserver #前端配置 backend appservers #後端服務器 listen stats #listen段(可以單獨使用,相當於frontend+backend)
三、反向代理
全局配置和默認配置同上
frontend webserver #定義前端服務 bind *:80 default_backend appserver backend appserver#定義後端服務 server yxm23 172.16.15.23:80 check #服務名 IP:PORT 健康檢測
使用listen段實現反向代理
listen webserver bind *:80 server yxm23 172.16.15.23:80 check
定義兩組服務(listen和frontend、backend混合使用)bind端口不能相同
訪問:172.16.15.18:8080安裝haproxy服務器的IP
frontend webserver bind *:80 default_backend appserver backend appserver server yxm23 172.16.15.23:80 check listen staticserver bind *:8080 server yxm14 172.16.15.14:80 check
四、提供狀態頁面
listen stats bind *:8088(定義任意端口) stats enable #啓動狀態頁面 默認路徑http://172.16.15.18:8080/haproxy?stats stats hide-version #隱藏版本號(B(backend) D(defaults) L(listen)) stats realm Haproxy\ yxm #提供認證(要訪問需要提供用戶密碼)B D L stats auth yxm:yxm #認證用戶名密碼 B D L stats admin if TRUE #提供管理功能(前提是需要先通過認證)L B stats url /hyxm 修改默認路徑 D L B
五、實現負載均衡
1.調度算法
roundrobin:加權輪調
static-rr:輪調,靜態調度算法
sourceuri
hash-type:map-based靜態
hash-type:consistent動態
2.動態調度算法支持的特性
<1>權重在服務運行時調整
<2>支持慢速啓動
靜態調度算法實現負載均衡
frontend webserver bind *:80 default_backend appservers backend appservers server yxm23 172.16.15.23:80 check #後端兩臺服務 server yxm14 172.16.15.14:80 check
動態調度算法實現負載均衡
backend appservers balance source #調度算法 (source、 uri:適用於緩存服務器) hash-type consistent #哈希類型,一致性哈希算法 server yxm23 172.16.15.23:80 check weight 2 #默認服務,服務宕掉後,後續服務啓動,服務修復後重新奪回服務 server yxm14 172.16.15.14:80 check weight 3 #
六、使用ACL實web動靜分離
1.ACL語法解析
ACL(fronedlistenbackend)使用範圍
語法acl<aclname><criterior>[flags][operator]<value>
aclacl名稱標準標誌位操作符值
標誌位:-i:忽略字符大小寫
值類型:ranges:範圍、數字1024:65535#端口1024到65535
operators:ge、eq、lt、le、gt
strings字符串
regularexpression正則表達式
IPaddressesandnetworksIP地址或者網絡地址
Criterior:標準
dst<IP>、dst_port、src、src_port
path:訪問路徑
path_beg:路徑以#####開頭
eg:aclstaticpath_end.html以.html結尾
path_end:路徑以#####結尾
path_reg:匹配正則表達式(與字符串匹配相比速度較慢)
Url、url_beg、url_end
hdr_beg(host):主機名以#####開頭
2.web動靜分離
frontend webserver bind *:80 acl static path_beg -i /static /images /javascript /stylesheets acl static path_end -i .jpg .png .jpeg .gif .swf .css .js use_backend staticserve if static default_backend appservers backend static banlance roundrobin server yxm14 172.16.15.14:80 check weight 1 maxconn 2000#後端服務器 server yxm18 127.0.0.1 check weight 1 backup #本地主機作爲備用主機 backend appservers banlance roundrobin server yxm23 172.16.15.23:80 check weight 1 maxconn 1000#後端服務器 server yxm18 127.0.0.1 check weight 1 backup #本地主機作爲備用主機