一.Haproxy的简介
(1)Haproxy是一个使用C语言编写的自由以及开放的源代软件,其提供高性能,负载均衡,以及基于TCP和HTTP应用程序代理。相较于Nginx,HAProxy更专注于反向代理,因此它可以支持更多的选项,更精细的控制,更多的健康检测机制的负载均衡算法。
(2)HAProxy特别适用于那些负载特别大的web站点,这些站点通常又需要会话保持或者七层处理,HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。
(3)HAProxy的运行模式使得它可以很简单安全的整合进当前的架构中,同时可以保护后台的web服务器不被暴露到网络上。
二.实验环境
本次实验需要三台虚拟机,server1作为haproxy代理服务器,server2和server3作为apache代理服务器
三.haproxy的部署及实现反向代理、负载均衡
在server1代理服务器
-
1.获得资源包haproxy-1.7.3.tar.gz解压
tar zxf haproxy-1.7.3.tar.gz
- 2.将压缩包变成一个rpm包
注意: 有.spec文件,就可以把源码制作为rpm包,制作好后会生成rpmbuild的目录,看见makefile说明使用c语言写的
find . -name *.spec #查看是否有.spec文件
yum install rpm-build -y 下载将rpm包打包的资源
yum install -y gcc 下载gcc源码编译
yum install pcre-devel -y
rpmbuild -tb haproxy-1.7.3.tar.gz ##将压缩包变成rpm包
-
3.安装rpm包
会生成rpmbuild目录(安装包所在的目录)该目录下的子目录中有生成的安装包cd rpmbuild/RPMS/x86_64 ls rpm -ivh haproxy-1.7.3-1.x86_64.rpm
-
4.寻找配置文件(安装好后会生成配置目录/etc/haproxy但没有配置文件,可以去解压包里找)
cd haproxy-1.7.3/examples
-
5.将配置文件复制到配置目录
cp content-sw-sample.cfg /etc/haproxy/haproxy.cfg
-
6.编写配置文件实现负载均衡
vim haproxy.cfg 10 global ##全局定义 11 maxconn 10000 #最大连接数 12 stats socket /var/run/haproxy.stat mode 600 level admin 13 log 127.0.0.1 local0 #本机日志 14 uid 200 #haproxy用户的uid 15 gid 200 #haproxy的gid 16 chroot /var/empty 17 daemon 18 19 defaults #默认条件 20 mode http #默认使用http的7层模式 tcp:4层 23 log global 24 option httplog 25 option dontlognull 26 monitor-uri /monitoruri 27 maxconn 8000 28 timeout client 30s 29 30 stats uri /admin/stats 31 option prefer-last-server 32 retries 2 33 option redispatch 34 timeout connect 5s 35 timeout server 5s 36 37 frontend public 38 bind *:80 name clear #监听所有服务端口 39 # bind 192.168.1.10:443 ssl crt/etc/haproxy/haproxy.pem 40 # use_backend static if { hdr_beg(host) -i img } 41 # use_backend static if { path_beg/img/css } 42 43 default_backend static #默认实用static后端服务器集群 44 45 #The static backend backend for 'Host:img',/img and /css. 46 47 backend static 48 balance roundrobin #负载均衡算法 49 server statsrv1 172.25.69.2:80 check inter 1000 #后端服务器server2 50 server statsrv2 172.25.69.3:80 check inter 1000 ##后端服务器server3
/etc/init.d/haproxy start
在server2和server3后端服务器上部署apache
在客户端测试
发现访问server1的IP,实际通过反向代理 在server2和server3之间轮循
访问监控窗口
按F5刷新,访问量是不断增加的:
停止server2的httpd服务:
增加自动更新时间和用户:
四.日志和黑名单及错误页面重定向
在server1代理服务器上
-
设置日志文件
vim /etc/rsyslog.conf local0.* /var/log/haproxy.log ##local0.* 代表本机 /etc/init.d/rsyslog restart
在haproxy日志中查看到haproxy更新内容显示为设置的每5s更新一次
-
加入黑名单
vim haproxy.cfgacl blacklist src 172.25.3.250 ##设置黑名单 http-request deny if blacklist errorloc 403 http://172.25.3.1:8080/index.html if blacklist ##访问页面重定向
在server1上编辑重定向页面
注意因为80端口已经被haproxy占据,所以http改用8080端口
在客户端测试
五.页面动静分离
在server1代理服务器上编辑配置文件
47 use_backend dynamic if { path_end .php }
48 default_backend static
51 backend static
52 balance roundrobin
53 server web1 172.25.3.2:80 check inter 1000
54
55 backend dynamic
56 balance roundrobin
57 server web2 172.25.3.3:80 check inter 1000
访问静态的访问的是server2的默认发布页,访问以.php结尾的时,访问的是php动态页面。
在server3上编辑一个php的默认发布文件
yum install php -y
vim /var/www/html/index.php
<?php
phpinfo();
?>
/etc/init.d/httpd restart
在客户端测试
六.读写分离
在server1代理服务器上编写配置文件
acl read method HEAD
acl read method GET
acl write method POST
acl write method PUT
bind *:80 name clear
#bind 192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem
#use_backend static if { hdr_beg(host) -i img }
#use_backend static if { path_beg /img /css }
use_backend static if write
use_backend dynamic if read
default_backend dynamic
在server3上上传两个php文件:
cd /var/www/html/
ls
chmod 777 index.php upload_file.php
vim upload_file.php
($_FILES["file"]["size"] < 2000000)) #扩大文件接收的数据
/etc/init.d/httpd restart
有index.php(选择图片的页面)和uoload_file.php(上传图片的页面)存放图片的目录是uoload目录
upload_file.php文件内容:(上传图片的动态页面)
index.php文件的内容如下:
将编辑好的文件scp到server2上同时下载php
在客户端测试
此时选择一张图片上传
可以看到图片写入到了server2