Haproxy:是一款基于TCP(第四层)和HTTP(第七层)的代理软件,支持双机热备和支持虚拟主机,具有良好的负载均衡能力,并且它的配置也是十分简单,拥有非常好的后端服务健康检查功能,当其代理的后端服务器出现故障时,HAproxy会自动将该服务器摘除,故障恢复后再自动匹配,其中的frontend、backend.非常灵活好用,fronten会根据HTTP请求头内容做规则匹配,然后再把请求定向到backend.
提供服务的真机:
Real-server1、2:
#yum install -y httpd
#echo realserver1、2.example.com>/var/www/html/iondex.html
#/etc/init.d/httpd start
做负载均衡的服务器:
Haproxy1/2:
#yum install -y haproxy.x86_64 直接安装haproxy红帽源里有
#vim /etc/haproxy/haproxy.cfg
60 stats uri /status :添加监控页面
61 stats auth admin:westos :监控页面添加认证
方式一:采用listen组件方式,相当于frontend 与backend的组合体
89listen liumin *:80 #采用监听的方式,监听80端口的Apache服务,ip为任意。
90 balance roundrobin #负载均衡采用的算法
91 server web1 172.25.45.55:80 check #添加提供Apache服务的真机real-server1/2 check提供健康检查
92 server web2 172.25.45.56:80 check
####将产生的日志额外放在一个haproxy.log文件里,进行日志服务设置:
#vim /etc/rsyslog.conf
13 $ModLoad imudp #打开udp模块
14 $UDPServerRun 514 #打开udp的514端口
62local2.* /var/log/haproxy.log
注意:haproxy生成的日志是通过udo协议进行传输的,所以一定要将udp模块和端口打开,切记。
进行测试:在FIREFOX上输入haproxy服务的ip:172.25.10.20,刷新网页,可以看到realserver提供的apache不同的页面,再验证监控页面及其认证,同样输入Ip:172.25.10.20/status ,最后验证产生的日志,使用命令:tail -f /var/log/haproxy.log ,不断刷新网页,就会产生很多日志内容。
方式二:使用frontend ,backend组件方式:
Frontend:接收请求的前端虚拟节点,frontend可以根据规则直接指定具体使用后端的backend(可动态选择);
Backend:后端服务集群的配置,是真实的服务器,一个backend对应一个或者多个实体服务器。
此试验需将前面的listen组件方式注销掉。
88 frontend westos *:80
89 acl bad src 172.25.10.250 #acl:访问控制权限列表
Bad 只是一个名字,src表示访问本服务器的client端地址。又称源地址 acl denyfile path /admin/ #目的就是不想让用户访问我的172.25.45.20/admin这个路径的页面。
90 block if bad :锁住页面,不让访问哈
91 errorloc 403 满足进行页面重定向。
92 http-request deny if bad denyfile 如果满足bad 和denyfile 则拒绝访问172.25.45.250/admin这个路径。
93 default_backend web 默认使用后端web服务。
94 backend web
95 balance roundrobin #调度算法 source共8种,回去一定要看好这些材料
96 server web1 172.25.45.15:80 check weight 1 #weight加权值,web1是起的名字。Ip就是提供服务的真机ip地址+端口号80,也就是httpd服务。Check进行后端健康检查
97 server web2 172.25.45.16:80 check weight 3
项目一:
Haproxy之动静分离:
frontend westos *:80
acl url_static path_beg -i /static /p_w_picpaths /javascript /stylesheets
#凡是以/static /p_w_picpath /javascript /stylesheets 开头的静态网页
acl url_static path_end -i .jpg .gif .png .css .js
#凡是以.jpg .gif .css .js 结尾的静态网页
use_backend static if url_static
#如果是静态网页,则访问后端static的服务器
default_backend dynamic #默认情况下访问动态的dynic服务器。
backend static
balance roundrobin
server web1 172.25.45.15:80 check weight 1
server backup 127.0.0.1:8080 backup
backend dynamic
server web2 172.25.45.16:80 check weight 1
#/etc/init.t/haproxy reload
前提要在ip为172.25.10.15这台主机上的/var/www/html里mkdirstatic 然后在里面放几张照片,然后通过FIREFOX输入网址:172.25.45.20/p_w_picpaths进行测试,如果是realserver的网页出来,就说明对着呢。
Haproxy之读写分离:
# vim /etc/haproxy/haproxy.cfg
acl read method GET 读的方法有:GET ,HEAD
acl read method HEAD
acl write method PUT 写的方法:PUT, POST
acl write method POST
use_backend static if read
use_backend upload if write
default_backend static
backend static
balance roundrobin
server web1 172.25.45.15:80 check weight 1
server backup 127.0.0.1:8080 backup
backend upload
server web2 172.25.45.16:80 check weight 1
在两台真机进行如下操作:realserver1 realserver2
# lftp --> upload 获得测试上传php页面到/var/www/html
# yum install -y php
#/etc/init.d/htpd restaart
在ip为172.25.45.16的realserver上:
#mkdir /var/www/html/upload/upload
#chmod 777 /var/www/html/upload/ -R :是用户有上传权限。
#mkdir /var/www/html/upload/upload 在提供上传的真机ip为172.25.10.16里面一定要新建一个upload目录,不然,上传的图片不知道传到哪里去了。此处需要down 一个上传的php测试页面