HAProxy负载均衡

一、HAProxy简介

(1)HAProxy

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

(2)HAProxy 实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制
、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space)
实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以
使每个CPU时间片(Cycle)做更多的工作。

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

了很多站点,这个优点也是其它负载均衡器没有的。

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

(2)HAProxy支持的算法

1.roundrobin 动态加权轮询算法,支持权重的运行时调整及慢启动机制;最大支持4095个后端主机;在服务器的处理时间平均分配的情况下这是最流畅和公平的算法。该算法是动态的,对于实例启动慢的服务器权重会在运行中调整。
2.leastconn 最小连接数算法,连接数最少的服务器优先接收连接。建议用于长会话场景中使用,例如LDAP、SQL等协议,而不适合短会话协议。如HTTP.该算法是动态的,对于实例启动慢的服务器权重会在运行中调整。

3.static-rr 静态轮询算法,不支持权重的运行时调整和慢启动机制。每个服务器根据权重轮流使用,类似roundrobin。另外,它对服务器的数量没有限制。
4、source 源地址哈希算法,对请求源IP地址进行哈希;

取模法:将源地址hash计算后除以服务器总权重,服务器变动会影响全局调度效果;根据结果进行分配。只要服务器正常,同一个客户端IP地址总是访问同一个服务器。如果哈希的结果随可用服务器数量而变化,那么客户端会定向到不同的服务器;该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。

该算法一般用于不能插入cookie的Tcp模式。它还可以用于广域网上为拒绝使用会话cookie的客户端提供最有效的粘连;

一致性hash:服务器变动仅影响局部调度;动态调度;

5、uri
表示根据请求的URI左端(问号之前)或整个URI做hash进行哈希计算,并与服务器的总权重相除后根据结果派发至某挑选出的后端主机。只要服务器正常,以最大限度的提高缓存的命中率。

作用是能够将对同一个uri的请求始终发往一个后端主机;适用于后端为缓存服务器和反病毒代理的场景;
该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。该算法只能用于HTTP后端。

6、url_param 在HTTP
GET请求的查询串中查找中指定的URL参数的值做hash计算,并与服务器的总权重相除后派发至某挑选出的后端主机;基本上可以锁定使用特制的URL到特定的负载均衡器节点的要求;

此算法常用来追踪请求中的用户标识,以确保来自同一个用户的请求始终发往同一个后端主机;

该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。

7、hdr(name)
对于每个http请求,此处由指定的http首部会被取出;如果此首部没有有效值,则用roundrobin代替;否则,对其值进行hash计算,并与服务器的总权重相除后派发至某挑选出的后端主机;

该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。

8、rdp-cookie(name) 为每个进来的TCP请求查询并哈希RDPcookie;

该机制用于退化的持久模式,可以使同一个用户或者同一个会话ID总是发送给同一台服务器。如果没有cookie,则使用roundrobin算法代替;

该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。

二 .安装haproxy

yum install haproxy -y

编辑配置文件

cd /etc/haproxy
vim haproxy.cfg 

在这里插入图片描述
在这里插入图片描述
开启:

systemctl start haproxy.service

在这里插入图片描述

在浏览器中访问

http://172.25.19.1/status

在这里插入图片描述
当我们停掉server2的httpd
在这里插入图片描述

三 HAProxy配置

1. 日志管理

编辑日志配置文件

vim /etc/rsyslog.conf

UDP
在这里插入图片描述

在这里插入图片描述

重启

systemctl restart rsyslog.service 
systemctl start haproxy.service

可以查看到访问日志
在这里插入图片描述

2.身份认证

编辑haproxy配置文件,添加用户名及密码
在这里插入图片描述
重启haproxy ,访问管理页面会要求输入账号密码
在这里插入图片描述

3.自定义路由监控器

将设置的符合监控条件的url转发到指定服务器
编haproxy配置文件,当访问路径以path_beg 后面自定义的内容开头,并且以path_end 后自定义的结尾的路径时,执行static模块,访问server3

vim haproxy.cfg 
systemctl reload haproxy.service

在这里插入图片描述
在server3的默认发布目录中添加一张符合你所填写的策略的目录及文件。

[root@server3 images]# ls
8023.jpg
[root@server3 images]# pwd
/var/www/html/images

当在1上访问指定路径时会跳转由3响应
在这里插入图片描述

编辑配置文件,添加acl策略
把来源为172.25.19.250的访问拒绝
在这里插入图片描述
重启haproxy,用19.250主机访问
在这里插入图片描述
也可以添加错误代码,把相应错误代码转发至其他路径
在这里插入图片描述
重载haproxy后进行访问测试systemctl reload haproxy.service
在浏览器中即可访问到重定向的页面

4.读写分离

当外部访问进来时,使读和写分别由不同的服务器提供
把server3作为存储服务器,在server3.的httpd服务中创建上传页面,并赋予写入权限
把server2作为只读服务器,提供读页面。

编辑haproxy文件,写入acl策略
在这里插入图片描述

在server3.的httpd服务中创建上传页面,并赋予写入权限
在这里插入图片描述
在server3 安装php重启httpd
yum install php -y
systemctl restart httpd
在server 2的httpd中也把两个上传和下载php页面也复制过来,并安装php
systemctl restart httpd
在这里插入图片描述

用浏览器访问测试
在这里插入图片描述

在本地选择一个文件上传
在这里插入图片描述

此时,我们在server3的httpd中的upload目录中可以看到上传的文件
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值