haproxy
Haproxy:是反向代理服务器的负载均衡,拥有不错的服务器健康检查功能,当其后端的的代理服务器出现故障时。Haproxy会自动去除该服务,故障服务后在自动运行该服务。HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、内部协议通信服务器等),和7层(HTTP)。在4层模式 下,HAProxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求 (request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。
可以用rpm安装方式,也可以源码编译。
软件下载:http://haproxy.1wt.eu/
rpm 包方式:
rpmbuild -tb haproxy-1.4.23.tar.gz
rpm -ivh /root/rpmbuild/RPMS/x86_64/haproxy-1.4.23-1.x86_64.rpm
此实验是用源码编译:
实验主机 server5 haproxy
Server6 web1
Server7 web2
需要的包:
haproxy-1.4.24.tar.gz
[root@server5 ~]# tar zxfhaproxy-1.4.24.tar.gz
编译成二进制文件包。发现找不到rpmbuild说明没有装rpmbuild
[root@server5 ~]# yum install rpm-build -y
[root@server5 ~]# rpmbuild -tbhaproxy-1.4.24.tar.gz 编译失败,缺什么程序就下什么程序
[root@server5 ~]# yum install pcre-devel -y
[root@server5 ~]# rpmbuild -tbhaproxy-1.4.24.tar.gz
这样就编译成功。
编译成的二进制文件一般都在 /root/rpmbuild/RPMS/x86_64里
[root@server5 x86_64]# rpm -ivhhaproxy-1.4.24-1.x86_64.rpm
[root@server5 x86_64]# cd /etc/haproxy/
[root@server5 haproxy]# ls 生成一个haproxy配置文件
Haproxy.cfg
[root@server5 haproxy]# vim haproxy.cfg
1 #this config needs haproxy-1.1.28 or haproxy-1.2.1
2
3global
4 log 127.0.0.1 local0
5 log 127.0.0.1 local1 notice
6 #log loghost local0 info
7 maxconn 4096
8 chroot/usr/share/haproxy
9 uid 99
10 gid 99
11 daemon
12 #debug
13 #quiet
14
15defaults
16 log global
17 mode http
18 option httplog
19 option dontlognull
20 retries 3
21 option redispatch
22 maxconn 2000
23 contimeout 5000 连接超时
24 clitimeout 50000 客户端连接超时
25 srvtimeout 50000 服务端连接超时
27listen westos *:80 监听的实例名称,地址和端口
28 balance roundrobin 负载均衡算法
29 server web1 172.25.137.6 check inter 2000 rise 2 fall 3
30 server web2 172.25.137.7 check inter 2000 rise 2 fall 3
check inter 检测心跳 rise 2连接2次正确认为服务器可用
fall 3 连接3次认为连接失败 web1只是一个名称
Server6和server7的阿帕奇服务要开
当haproxy启动失败是没有/usr/shre/haproxy这个目录
[root@server5 share]# mkdir/usr/share/haproxy
再次启动服务
这样一个负载均衡就做出来了。
在配置文件还可以加
26 stats uri /status haproxy监控页面
还要把阿帕奇的端口改为8080,因为haproxy用的是80端口
29 server web1 172.25.137.6 check inter 2000 rise 2 fall 3 weight 5
30 serverweb2 172.25.137.7 check inter 2000 rise 2 fall 3 weight 1
31 server backup 127.0.0.1:8080 backup
Weight 是权重,表现在页面上是server6上刷5次之后在刷server7上刷一次。
后台检测当web1和2的服务都停止的时候本地就开始接管,当web1和2正常运行时他就不会出现在前台页面
当web1和2服务停止时
28 acl badhost src 172.25.137.250 只要是通过这个ip访问都会被禁止。
29 block if badhost
Acl :访问控制列表是用来控制端口进出数据包,acl适用于所有的路由协议,例如:IP,IPX等。
30 errorloc 403 http://172.25.137.5:8080 就上述的错误重定向在本地的http服务
[root@server5 haproxy]# vim /var/www/html/index.htm
[root@server5 haproxy]# /etc/init.d/httpd restart
为了给用户呈现一个美感有必要写一个页面。
动静分离
Server6需要写一个php测试页(动态)
Vim /var/www/html/index.php
[root@server6 ~]# /etc/init.d/httpd restart
Server7 需要在/var/www/html/目录里见一个p_w_picpaths目录存照片文档之类的。
[root@server7 html]# mkdir p_w_picpaths
[root@server7 html]# ls
p_w_picpaths index.html
吴彦祖.jpeg
[root@server7 html]# cd p_w_picpaths/
[root@server7 p_w_picpaths]# ls
[root@server7 p_w_picpaths]# ls
32 acl url_static path_beg -i /p_w_picpaths
33 acl url_static path_end -i .jpg$ .png$ .jpeg$ .gif$ 静态服务器支持的图片类型
35 use_backend group2 if url_static 如果是静态就在group2上否则是group1
36 default_backend group1
[root@server5 haproxy]# /etc/init.d/haproxyreload
动态
静态
读写分离:
Server6
需要这两个php文件 在upload_file.php里有限定上传图片的大小
Server7
[root@server7 upload]# yum install php -y
[root@server7 html]# ls
p_w_picpaths index.html index.php upload_file.php 在upload_file.php里有限定上传图片的大小
[root@server7 html]# mkdir upload 这个目录是上传图片的保存位置
[root@server7 html]# chmod -R 777/var/www/html/upload
这是上传保存的位置