开发者学堂课程【企业集群平台架构设计与实现:lvs/haproxy/keepalived:企业集群平台架构设计与实现 haproxy 篇3】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/391/detail/5015
企业集群平台架构设计与实现 haproxy 篇3
目录:
一、HAProxy 负载均衡器算法与使用技巧
二、通过 HAProxy 的 ACL 规则实现智能负载均衡
一、HAProxy 负载均衡器算法与使用技巧
1、HAProxy 支持的负载均衡算法
(1)roundrobin, 表示简单的轮询,负载均衡基础算法公
(2)static-rr, 表示根据权重
(3)leastconn, 表示最少连接者先处理
(4)source, 表示根据请求源IP
(5)uri, 表示根据请求的URI;
(6)url__param,表示根据请求的 URI 参数来进行调度
(7)hdr(name), 表示根据 HTTP 请求头来锁定每一次 HTTP 请求;
(8)rdp-cookie(name), 表示根据据 cookie(name) 来锁定并哈希每一次TCP请求。
2、常用的负载均衡算法
(1)轮询算法: roundrobin
(2)根据请求源IP算法: source
(3)最少连接者先处理算法: lestconn
前边已经对192.168.81.236这个主机做了一个负载均衡。通过这个主机192.168.81.236去访问192.168.81.237和192.168.81.234这两个主机地址实现负债均衡。237和234都是8080端口,现在看是否实现负载均衡。
在192.168.81.237页面编辑路径:
[ root@237server ~]# cd /usr/ local/ tomcat1
在192.168.81.234编辑路径:
[ root@iivey ~]# cd /usr/ local/ tomcat
tomcat1. tar . gz tomcat2 ,
[ root@i ivey~ ]# cd /usr/ local/tomcat 2
现在两个主机都已经启动8080端口。浏览器操作,访问一个地址http://192.168.81.236/,刷新,进入192.168.81.236/index.jsp,
看本地路径:本文件路径 /usr/loca1/ tomcat1 /webapps/ ROOT/ :
index.jsp
可以看到两个路径237和234状态值一直在变化的,tomcat1和2刷新是一直在相互变化。这里是通过 HAProxy 实现客户端两个节点的访问,表示已经实现了负载均衡。
或者还可以看 左下角 服务器环境变量 的内容,下拉,找到
SSH_ CONNECTION=' 192. 168. 81.30 49664 192.168. 81.237 22"
的探针,这里客户端的 IP 刷新是 237 和 234相互变化。
负载均衡的算法
算法Static-rr根据权重实现负载均衡。237server 的权重是6。iivey234 的权重是3。前者是后者的两倍。刷新 jsp 探针可看出。
二、通过 HAProxy 的 ACL 规则实现智能负载均衡
由于 HAProxy 可以工作在七层模型下,因此, 要实现 HAProxy的强大功能,一定要使用强大灵活的 ACL 规则,通过 ACL 规则可以实现基于 HAProxy 的智能负载均衡系统。 HAProxy 通过 ACL 规则完成两种主要的功能,分别是:
1)通过设置的 ACL 规则检查客户端请求是否合法。如果符合 ACL 规则要求,那么就将放行,反正,如果不符合规则,则直接中断请求。
2)符合 ACL 规则要求的请求将被提交到后端的 backend 服务器集群,进而实现基于 ACL 规则的负载均衡。
HAProxy 中的 ACL 规则经常使用在 frontend 段中,使用方法如下:
acl 自定义的 acl 名称 acl方法 -i [四配的路径或文件]
其中:
acl: 是一个关键字,表示定义 ACL 规则的开始。后面需要跟上自定义的 ACL 名称.
acl 方法:这个字段用来定义实现 ACL 的方法, HAProxy 定义了很多 ACL 方法,经常使用的方法有hdr_ reg(host)、 hdr_ dom(host)、hdr_ beg(host)、 url_sub、url_dir、path_ beg、path_ end等。
-i:表示忽略大小写,后面需要跟上匹配的路径或文件或正则表达式。
与 ACL 规则一起使用的 HAProxy 参数还有use_backend,use_backend 后面需要跟上一个 backend 实例名,表示在满足ACL规则后去请求哪个 backend 实例,与use_backend 对应的还有 default_ backend 参数,它表示在没有满足ACL 条件的时候默认使用哪个后端backend。
下面列举几个常见的ACL规则例子:
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
这段代码就是实现 ACL 规则
acl host_ www hdr_ dom(host) -i www. zb. com
acl host_ img hdr_ dom(host) -i img. zb. com
use_ backend htmpool if host_ www
use_ backend imgpool if host_ img
通过这个规则可以去判断、实现。根据不同域名去访问不同客户端节点,这个功能在 HAProxy 里实现是比较轻松、灵活的。
比如:
acl host_ www 通过 acl 命令,后边跟上名称 host-www , hdr_ dom(host)是根据浏览器的域名来进行区分判断,-i表示忽略大小写, 后边跟上 www. zb. Com 这样一个域名。
当访问 www.zb.com 的时候,默认的 acl 规则是 host_ www, 如果是 host_ www ,就把请求交给 htmpool 后端服务器处理。
同理,当访问 img.zb.com 的时候,会把请求发给 imgpool 后端服务器处理。
default_ backend htmpool 如果上边的规则都不满足,会默认走 htmpool 后端服务器。
通过 www.zb.com 域名,把请求转交到237 server 或者 iivey234 这两个主机实现负载均衡。当访问 img.zb.com 这个域名的时候,直接通过 host236 192. 168.81.236: 8080 实现调度。
检验是否实现,在 192.168.81.236 里编辑:
[ root@localhost conf ]# /etc/ init. d/haproxy restart
Stopping haproxy : [ OK ]
Starting haproxy : [ OK ]
[ root@loca 1host conf] #
可以看到已经实现,也可以到浏览器里观看实现。