1. 程式人生 > >003.HAProxy ACL規則的智慧負載均衡

003.HAProxy ACL規則的智慧負載均衡

一 簡介

HAProxy可以工作在第七層模型,可通過ACL規則實現基於HAProxy的智慧負載均衡系統,HAProxy通過ACL規則完成以下兩種主要功能:
  • 通過ACL規則檢查客戶端請求是否合法,如果符合ACL規則,則放行;不符合ACL規則,則中斷請求;
  • 符合ACL規則的請求被提交到後端伺服器叢集,進而實現基於ACL規則的負載均衡。

二 使用方法

2.1 語法

通常ACL規則在frontend部分使用,語法如下: acl 自定義acl名稱 acl方法 -i [匹配的路徑或檔案] 選項含義: acl:一個關鍵字,表示定義acl規則的開始,後面需要帶上自定義的acl名稱;
acl方法:定義實現acl的方法,常見的有:hdr_reg、hdr_dom、hdr_beg、url_sub、url_dir、path_beg、path_end等; -i:表示忽略大小寫,之後帶上匹配的路徑或正則表示式。 與ACL規則一起使用的HAProxy引數還有use_backend,use_backend帶上一個backend例項名,表示在滿足ACL規則後去請求哪個backend例項。

2.2 舉例

acl www_policy hdr_reg(host) -i ^(www.z.cn|z.cn) acl bbs_policy hdr_dom(host) -i bbs.z.cn
acl url_policy url_sub -i buy_sid=   use_backend server_www if www_policy use_backend server_app if url_policy use_backend server_bbs if bbs_policy default_backend server_cache 解釋:定義了www_policy、bbs_policy、url_policy三個ACL規則。
  • 第一條:表示如果客戶端以www.z.cn或z.cn開頭的域名傳送請求,則此規則返回true;
  • 第二條:表示如果客戶端以bbs.z.cn開頭的域名傳送請求,則此規則返回true;
  • 第三條:表示如果客戶端在請求的RUL中包含“buy_sid=”字串,則此規則返回true。
  • 第4-6條規則定義了當www_policy、bbs_policy、url_policy三個ACL規則返回true時需要排程到哪個後端。
  • 第四條:當用戶的請求滿足www_policy時,HAProxy會將使用者請求直接發往名為server_www的後端;
  • 以此類推,當用戶的請求不滿足任何一條ACL規則時,HAProxy會把請求發往由default_backend選項指定的server_cache後端。

2.3 舉例2

acl url_static path_end .gif .png .jpg .css .js acl host_www hdr_deg(host) -i www acl host_static hdr_deg(host) -i img. video. download. ftp.   use_backend static if host_static || host_www url_static use_backend www if host_www default_backend server_cache 解釋:定義了url_static、host_www、host_static三個ACL規則。
  • 第一條:表示如果客戶端在請求的URL中以.gif或.png或.jpg或.css或.js結尾,則此規則返回true;
  • 第二條:表示如果客戶端以www開頭的域名傳送請求,則此規則返回true;
  • 第三條:表示如果客戶端在請求的URL中以img.或video.或download.或ftp.結尾,則此規則返回true;
  • 第4-6條規則定義了當www_policy、bbs_policy、url_policy三個ACL規則返回true時需要排程到哪個後端。
  • 第四條:如使用者的請求同時滿足host_static+url_static規則或滿足host_www+url_static規則,HAProxy會把請求直接發往名為static的後端。
  • 以此類推,當用戶的請求不滿足任何一條ACL規則時,HAProxy會把請求發往由default_backend選項指定的server_cache後端。