(1)Haproxy是一个使用C语言编写的自由以及开放的源代软件,其提供高性能,负载均衡,以及基于TCP和HTTP应用程序代理。相较于Nginx,HAProxy更专注于反向代理,因此它可以支持更多的选项,更精细的控制,更多的健康检测机制的负载均衡算法。
(2)HAProxy特别适用于那些负载特别大的web站点,这些站点通常又需要会话保持或者七层处理,HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。
(3)HAProxy的运行模式使得它可以很简单安全的整合进当前的架构中,同时可以保护后台的web服务器不被暴露到网络上。
本次实验需要三台虚拟机,server1作为haproxy代理服务器,server2和server3作为apache代理服务器
1.获得资源包haproxy-1.7.3.tar.gz解压
tar zxf haproxy-1.7.3.tar.gz
注意: 有.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
发现访问server1的IP,实际通过反向代理 在server2和server3之间轮循
按F5刷新,访问量是不断增加的:
停止server2的httpd服务:
增加自动更新时间和用户:
设置日志文件
vim /etc/rsyslog.conf
local0.* /var/log/haproxy.log ##local0.* 代表本机
/etc/init.d/rsyslog restart
在haproxy日志中查看到haproxy更新内容显示为设置的每5s更新一次
加入黑名单
vim haproxy.cfg
acl 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端口
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动态页面。
yum install php -y
vim /var/www/html/index.php
/etc/init.d/httpd restart
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
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文件的内容如下: