一、Haproxy简介:
- HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
- HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
- HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
二、实验环境(rhel6.5版本)
主机环境:rhel6.5 selinux 和iptables 都必须是disabled状态
各主机信息
主机名 | IP | 服务 |
server1 | 172.25.8.1 | Haproxy+http |
server2 | 172.25.8.2 | http |
server3 | 172.25.8.3 | http |
物理机 | 172.25.8.250 | 用于测试nginx |
三、Haproxy相关配置
1、负载均衡
配置server1:
(1)官网下载haproxy软件包,并解压
(2)安装编译依赖包,并进行编译
#自动生成rpmbuil目录
(3)安装haproxy服务
(4)拷贝配置文件到/etc/haproxy目录下,并进行编辑
#拷贝配置文件
#编辑配置文件
(5)创建haproxy用户和组,实现对haproxy服务的控制
#这里200是由haproxy.cfg该配置文件决定的
(6)开启haproxy服务
#haproxy服务的监听端口为80,这是由haproxy.cfg该配置文件决定的
server2和server3配置(安装apache,默认发布目录下编写发布文件):
测试:
(1)网页输入172.25.8.1/monitoruri,查看haproxy服务的状态
(2)网页输入172.25.8.1/admin/stats,对haproxy负载均衡的后端服务器进行监控
(3)如何对监控页面进行加密呢?
编辑haproxy配置文件:
#在指定行写入
#修改完配置文件之后,重启haproxy服务
刷新web界面
第一种情况:server2和server3中任意一端的httpd服务挂掉(这里以关闭server3上的httpd服务为例)
第二种情况:server2和server3端的httpd服务都挂掉(因为第一种情况挂掉了server3端的httpd服务,所以这里只需要挂掉server2端的httpd服务就可以了)
启动server2和server3端的httpd服务,以免影响后续的实验
2、修改haproxy日志路径
(1)修改日志配置文件(存储位置),并重启rsyslog服务
#添加local0.none
#将日志放在haproxy日志文件
(2)测试:
网页访问server1后查看日志:
3、访问控制
访问控制的配置方法一:
(1)修改haproxy配置文件,并重载haproxy服务
#修改完配置文件之后,重载haproxy服务
(2)server1安装apache,修改端口为8080,编辑默认发布文件,并启动httpd服务
#将默认监听端口80改为8080(因为80端口被haproxy服务占用)
(3)测试:
server2端可以访问
server3端可以访问
物理机不能访问(访问的必须是172.25.8.1:8080,输入172.25.8.1没有任何输出)
网页输入172.25.8.1,自动跳转到172.25.8.1:8080的页面
访问控制的配置方法二:
(1)修改haproxy配置文件,并重载haproxy服务
(2)server1安装apache,修改端口为8080,编辑默认发布文件,并启动httpd服务——上面一经做过,这里不需要再做
(3)测试:
server2端可以访问
server3端可以访问
物理机不能访问(访问的必须是172.25.83.1:8080,输入172.25.83.1是403报错的默认输出)
总结:这两种方法所起的作用是相同的,都是禁止172.25.8.250这个主机访问172.25.8.1。差别就在172.25.8.250主机访问172.25.8.1时的访问方法,以及结果。
4、动静分离
(1)在server2中编辑默认发布目录下的index.html文件——前面一经做过这一步,这里不需要再做
配置完之后,web界面进行测试,以确保配置的是成功的
(2)在server3上编辑默认发布目录下的index.php文件,并安装php,安装完php之后要重启httpd服务
配置完之后,web界面进行测试,以确保配置的是成功的
(3)server1上haproxy配置文件中添加动静分离配置,并重载haproxy服务
#将之前编写的访问控制的内容,进行注释(因为之前访问控制设置的是172.25.8.250主机不能访问,而我们现在的测试需要在172.25.8.250主机上进行测试)
#修改完配置文件之后,重载haproxy服务
(4)测试:
网页访问,静态访问到server2的页面内容
动态访问到server3的php动态页面(配置文件中设定的以.php结尾的访问是动态访问)
5、读写分离
(1)编辑haproxy配置文件,并重载haproxy服务
(2)在server2端和server3端的httpd默认发布目录,放进去两个文件
- index.php(选择图片的静态页面)
- upload_file.php(上传图片的动态页面)
#为了安全,应使index.php文件和upload_file.php文件的权限为644
(3)在server2端和server3端的httpd的默认发布目录下建立upload目录,并修改该目录的权限为777,该目录用来存放上传图片
(4)在server2端和server3端修改上传的大小限制(以免产生因大小受限所导致的错误)
(5)在server2端安装php软件(以使得其支持php语言),安装完该软件之后重启httpd服务
#安装完php软件之后重启httpd服务
(6)测试:
浏览器输入:172.25.8.1/index.php
点击Browse,选择上传的图片(我这里选择的图片是之前在网上下载好的redhat.jpg图片),在点击Submit提交
查看,上传图片保存在server3上的/var/www/html/upload目录下,server2没有