一、HAProxy简介
-
(1)HAProxy是一个使用C语言编写的自由及开放源代码软件,是提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
-
(2)HAProxy 实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space)实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作。
-
(3)HAProxy 支持连接拒绝:因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点,这个优点也是其它负载均衡器没有的。
DDOS攻击:分布式拒绝服务攻击(英文意思是Distributed Denial of Service,简称DDoS)是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击,其中的攻击者可以有多个。
分布式拒绝服务攻击原理:分布式拒绝服务攻击DDoS是一种基于DoS的特殊形式的拒绝服务攻击,是一种分布的、协同的大规模攻击方式。单一的DoS攻击一般是采用一对一方式的,它利用网络协议和操作系统的一些缺陷,采用欺骗和伪装的策略来进行网络攻击,使网站服务器充斥大量要求回复的信息,消耗网络带宽或系统资源,导致网络或系统不胜负荷以至于瘫痪而停止提供正常的网络服务。与DoS攻击由单台主机发起攻击相比较,分布式拒绝服务攻击DDoS是借助数百、甚至数千台被入侵后安装了攻击进程的主机同时发起的集团行为。
- (4)HAProxy 支持全透明代理(已具备硬件防火墙的典型特点): 可以用客户端IP地址或者任何其他地址来连接后端服务器.这个特性仅在Linux 2.4/2.6内核打了cttproxy补丁后才可以使用。这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。
二.Haproxy实现负载均衡
实验过程如下:
实验环境:
主机 | ip | 服务 |
---|---|---|
meng1 | 172.25.11.1 | Haproxy |
meng2 | 172.25.11.2 | apache |
meng3 | 172.25.11.3 | apache |
物理机 | 172.25.11.250 | 测试 |
以前的haproxy可以打包为rpm包,现在不行(因为没有.spec文件,有就可以打包)
为了纯净的实验环境,最好重新创建快照,名字跟之前的一样,可以将之前的覆盖
第一步:安装和配置haproxy,并启动服务
[root@meng1 ~]# yum install -y haproxy.x86_64
[root@meng1 ~]# cd /etc/haproxy/
[root@meng1 haproxy]# ls
haproxy.cfg
[root@meng1 haproxy]# vim haproxy.cfg
63 frontend main
64
65 bind *:80
66
67 default_backend webserver
68 #---------------------------------------------------------------------
69 # static backend for serving up images, stylesheets and such
70 #---------------------------------------------------------------------
71 backend webserver
72 balance roundrobin
73 server web1 172.25.11.2:80 check
74 server web2 172.25.11.3:80 check
[root@meng1 haproxy]# systemctl start haproxy
[root@meng1 haproxy]# systemctl status haproxy