l14haproxy负载均衡介绍

 
 
yum -y install haproxy

haproxy提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。haproxy特别适用于那些负载特别大的web站点,这些站点通常又需要会话保持或七层处理。haproxy运行在时下的硬件上,完全可以支持数以万计的并发连接,并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

haproxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。

事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space)实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作。

(1)免费开源,稳定性也是非常好。单haproxy也跑得不错,稳定性可以与硬件级的F5相媲美。

(2)根据官方文档,haproxy可以跑满10Gbps,这个数值作为软件级负载均衡器是相当惊人的。

(3)haproxy支持连接拒绝:因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点,这个优点也是其它负载均衡器没有的。

(4)haproxy支持全透明代理(已具备硬件防火墙的典型特点):可以用客户端IP地址或者任何其他地址来连接后端服务器。这个特性仅在Linux 2.4/2.6内核打了tcp proxy补丁后才可以使用。这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。

(5)haproxy现多于线上的Mysql集群环境,我们常用于它作为MySQL(读)负载均衡。

(6)自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警。

(7)HAProxy支持虚拟主机,许多朋友说它不支持虚拟主机是错误的,通过测试我们知道,HAProxy是支持虚拟主机的。

域名跳转

客户端访问http://dg.test.com时,要把请求分发到192.168.5.171:8080、192.168.5.174:8080、192.168.5.178:8080,这三台服务器上。客户端访问http://ilanni.test.com时,要把请求分发到ilanni.com,这台服务器上。

IP地址跳转

客户端访问http://192.168.5.171时,要把请求分发到192.168.5.174:80、192.168.5.178:80这两台服务器上。同时还要求客户端每一次访问,都跳转到不同的服务器上。

端口跳转

客户端访问http://dg.test.com:8090和http://ilanni.test.com:8090这两个地址时,要把请求分发到192.168.5.174:8090、192.168.5.178:8090,这两台服务器上。

默认跳转

如果客户端访问的不是dg.test.com与192.168.5.171,这两个地址的话,要把请求全部分发到192.168.5.178:8080上。

多ACL匹配

如果客户端的IP是192.168.5.140,同时访问的是http://192.168.5.171时,要把请求分发到www.ilanni.com上。

有关haproxy配置文件我们先简单介绍,如下:

global配置段,用于设定全局配置参数。

代理配置段中,主要是使用defaults、frontend、backend、listen关键词。

defaults配置段用于为所有其它配置段提供默认参数,这配置默认配置参数可由下一个“defaults”所重新设定。

frontend配置段用于定义一系列监听的套接字,这些套接字可接受客户端请求并与之建立连接。

backend配置段用于定义一系列“后端”服务器,代理将会将对应客户端的请求转发至这些服务器。

listen配置段通过关联“前端”和“后端”定义了一个完整的代理,通常只对TCP流量有用。

在上述haproxy配置文件中,我们主要讲解ACL的匹配规则。

acl is_dg hdr_beg(host) dg.test.com

该行定义一个is_dg规则,如果客户端请求的是dg.test.com这个域名,则定义该规则为is_dg。

use_backend dgserver if is_dg

该定义一个dgserver服务器组,如果客户端请求符合is_dg定义的规则,则把该客户端的请求分发到dgserver服务器组。

acl is_ip src 192.168.5.140

该行定义一个is_ip规则,如果客户端的IP地址是192.168.5.140,则定义该规则为is_ip。

use_backend acl if is_171 is_ip

该定义一个acl服务器组,如果客户端请求同时符合is_ip和is_171定义的规则,则把该客户端的请求分发到acl服务器组。

default_backend backend_default

该行定义一个默认服务器组,如果客户端请求不符合上述定义的任何一个规则,则把该客户端的请求分发到backend_default服务器组。


负载均衡.1 测试域名跳转

使用如下命令测试域名跳转:

curl http://dg.test.com

clip_image027

clip_image028

通过上图,我们可以看到当我们使用dg.test.com这个域名访问时,haproxy确实为我们进行跳转了,而且跳转到了192.168.5.174这台服务器上。

因为考虑到客户端session会话的问题,所以我们在配置haproxy负载均衡没有使用roundrobin轮询的方法,而是使用source方法。所以haproxy目前没有把请求分发到192.168.5.171:8080、192.168.5.178:8080这两台服务器上。

现在我们访问ilanni.test.com,如下:

通过上图,我们可以看到访问不同的域名,haproxy把请求分发到不同的服务器上。

负载均衡.2 测试IP地址跳转

使用如下命令测试IP地址跳转:

curl http://192.168.5.171

clip_image030

通过上图,我们可以很明显的看到,第一次使用curl http://192.168.5.171访问时,haproxy是把请求分发171server组的192.168.5.174这台机器上。而第二次访问时,把请求分发171server组的192.168.5.178这台机器上。

因为在haproxy配置中,我们使用的是roundrobin轮询方法,所以客户端的每一次请求,haproxy会把请求分发到不同的服务器上。

负载均衡.3 测试端口跳转

使用如下命令测试IP地址跳转:

curl http://dg.test.com:8090

curl http://ilanni.test.com:8090

clip_image031

通过上图,我们可以很明显的看到客户端在通过dg.test.com:8090和ilanni.test.com:8090进行访问时,haproxy确实把请求分发到了8090组服务器上的192.168.5.178:8090上。

负载均衡.4 测试默认跳转

要测试默认跳转,我们可以随便使用一个域名进行测试。如下:

curl http://test.test.com

clip_image032

通过上图,我们可以很明显的看出haproxy把test.test.com的请求转发到了默认服务器组的192.168.5.178:8080上。

负载均衡.5 测试多ACL匹配

要测试默认跳转,我们先切换到192.168.5.140这台机器上,然后访问http://192.168.5.171。如下:

clip_image033

通过上图,我们可以很明显的看到在192.168.5.171这台机器上访问http://192.168.5.171时,haproxy确实把请求分发到www.ilanni.com这台机器上。

详细配置说明

 
  
 
 




转载于:https://www.cnblogs.com/guominggigi/p/5413305.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值