1、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补丁后才可以使用. 这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。
(5)包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter和 Tuenti在内的知名网站,及亚马逊网络服务系统都使用了HAProxy。
(6)配置文件格式
HAProxy的配置处理3类来主要参数来源:
——最优先处理的命令行参数;
——“global”配置段,用于设定全局配置参数;
——proxy相关配置段,如“defaults”、“listen”、“frontend”和“backend”;
2、搭建实验环境
实验环境:
主机 | ip | 服务 |
---|---|---|
server1 | 172.25.10.1 | haproxy |
server2 | 172.25.10.2 | apache |
server3 | 172.25.10.3 | apache |
物理机 | 172.25.10.250 | 测试 |
3、Haproxy实现负载均衡
实验步骤:
server1主机上:
1.安装haproxy服务,如下所示:
2.查看安装的服务版本,并查看是否有haproxy用户(此用户是安装服务后自动生成的)
3.编辑配置文件,让其实现负载均衡,如下所示:
4.开启haproxy的服务,并查看状态,如下所示:
server2主机上:
1.安装httpd服务,如下所示:
2.编辑测试页并开启服务,如下所示:
3.检测测试页,如下所示:
server3主机上:
1.安装httpd服务,如下所示:
2.编辑测试页并开启服务,如下所示:
3.检测测试页,如下所示:
真机测试:
从上图测试结果可以看出,利用haproxy成功实现了负载均衡,轮循访问server1和server2
4、给Haproxy服务器添加日志
1.编辑日志服务的配置文件,打开UDP接口,创建haproxy的日志文件,如下所示:
2.重启haproxy服务,如下所示:
3.客户端访问,如下所示:
4.查看日志(发现刚刚访问过的4条日志消息),如下所示:
5、在Haproxy服务器上添加监控页面
1.在配置文件中添加管理员监控页面,如下所示:
2.重启服务并查看服务的状态,如下所示:
3.在浏览器中输入172.25.10.1/admin/stats测试,如下所示:
刷新,发现数据发生变化,如下所示:
关闭server2的服务器
当我们关掉server2的服务器以后再次刷新立马发现监控页面只有一个服务器工作,另一个变红,如下所示:
测试管理员查看服务状态页面,如下所示:
一般情况,在一个公司中这样将监控页面裸露是不安全的,为了访问的安全性,接下来我们设置加密访问,并设置监控页面5s刷新一次
- 首先我们需要开启上一步实验的的httpd服务,如下所示:
- 进入配置文件设置加密访问和5s刷新,如下所示:
- 为了使配置生效,我们重启httpd服务并查看状态,如下所示:
- 进入浏览器测试,发现需要输入密码,如下所示:
- 当正确输入密码以后,显示结果如下所示:
- 5s自动刷新之后,如下所示:
6、在Haproxy服务器上设置访问权限
1.进入配置文件,编辑访问控制的权限(禁止172.25.10.250访问)
2.重启haproxy服务,如下所示:
3.测试(在物理机172.25.10.250上访问被拒绝),如下所示:
6、错误页面重定向
通常情况我们登陆一个网页时,如果出错,它会会自动帮助我们重定向到出现错误页面,从而便于我们知道出错的原因,下面我们模拟负载均衡出错时的页面重定向,下面的实验是在上面实验的基础上进行的,具体操作如下所示:
1.在配置文件中编辑错误页面重定向的信息,如下所示:
2.重启服务,如下所示:
3.安装httpd服务,如下所示:
4.修改httpd的端口(由于haproxy已经占用了80端口),如下所示:
5.进入发布目录,编辑错误重定向页面文件,如下所示:
6.开启httpd服务并重启haproxy服务,如下所示:
7.测试(在客户端输入172.25.10.250,自动调转到8080端口,从而出现报错),如下所示:
7、利用Haproxy实现动静分离
server1主机上:
1.编辑配置文件(如果客户端访问的是以.php结尾的动态页面,就去找server2,否则就去找server3),编辑文件如下所示:
注意:上面取消了上面实验的黑名单,随便写了一个不存在的ip(172.25.10.100)
2.重启haproxy服务并查看状态,如下所示:
server2主机上:
1.安装php服务,如下所示:
2.编辑php的发布页面,如下所示:
3.重启httpd服务,如下所示:
server3主机上:
1.安装php服务,如下所示:
2.编辑php的发布页面,如下所示:
3.重启httpd服务,如下所示:
物理机测试:
下面我们首先让客户机访问动态资源server2,如下所示:
接下来再去访问静态资源server3,如下所示:
8、利用Haproxy实现读写分离
server1主机上:
1.编辑配置文件(写操作在server2上,读操作在server3上),如下所示:
2.重启haproxy服务,如下所示:
server2主机上:
3.从真机上(提前已经下载好了)上传测试目录到server2的发布目录下,如下所示:
4.由于字符长度太小,所以进入发布文件,修改字符长度为200000,如下所示:
5.为了实验效果的明显,在php文件中添加访问服务器的名称,如下所示:
6.将server2上测试目录下的文件发送给server3,如下所示:
server3主机上:
7.在server3中查看测试文件是否发送过来,并进入测试文件添加主机名,如下所示:
物理机测试:
在浏览器输入172.25.10.1/index.php,出现如下界面:
点击brown,在客户端(server3)上传一个图片,如下所示:
接下来在server2主机上查看,发现成功上传到了server2的主机上,如下所示: