• 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后端。
  • 相关阅读:
    java——注解Annotation
    java——maven
    sklearn——回归评估指标
    java——单例模式
    java——极简handler机制
    java——为什么要有接口?和抽象类有什么不一样?
    java——cmd命令编译带包名的源程序
    [loj 2478][luogu P4843]「九省联考 2018」林克卡特树
    「线性基」学习小结
    FOI 冬令营 Day6
  • 原文地址:https://www.cnblogs.com/itzgr/p/10163639.html
Copyright © 2020-2023  润新知