操作系统: redhat EL 6.5 机器及软件: server9: 172.25.12.9 haproxy server8: 172.25.12.8 apache(httpd) php server7: 172.25.12.7 apache(httpd) php
HAProxy 提供高可用 负载均衡 以及基于 TCP 和 HTTP 应用的代理 是轻量级的 擅长处理并发 但与nginx不同的是 Haproxy 并不是 Http服务器。很多带反向代理均衡负载的产品,如nginx,apacheproxy,都清一色是 WEB 服务器。简单说,就是他们能自个儿提供静态(html,jpg,gif..)或动态(PHP,cgi..)文件的传输以及处理。而Haproxy仅仅,而且专门是一款的用于均衡负载的应用代理。其自身并不能提供http服务 它自带健康检测,1.3版本后还自带一些简单的规则匹配
动静分离,读写分离主要使用了acl函数,haproxy支持acl函数
server9先配置yum 源:
[root@server9 ~]# cat /etc/yum.repos.d/rhel-source.repo [Server] name=Red Hat Enterprise Linux $releasever - $basearch - Source baseurl=http://172.25.12.250/rhel6.5/Server enabled=1 gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [HighAvailability] name=HighAvailability baseurl=http://172.25.12.250/rhel6.5/HighAvailability gpgcheck=0 [LoadBalancer] name=LoadBalancer baseurl=http://172.25.12.250/rhel6.5/LoadBalancer gpgcheck=0 [ResilientStorage] name=ResilientStorage baseurl=http://172.25.12.250/rhel6.5/ResilientStorage gpgcheck=0 [ScalableFileSystem] name=ScalableFileSystem baseurl=http://172.25.12.250/rhel6.5/ScalableFileSystem gpgcheck=0http://www.haproxy.org/download/1.6/src/haproxy-1.6.11.tar.gz
http://www.haproxy.org/download/
下载完后进行解压安装: 安装方式: rpm包安装(用rpmbuild制作工具制作rpm包)
#我的安装包放在了root家目录下 #解压 tar zxf haproxy-1.6.11.tar.gz cd haproxy-1.6.11 #进入 examples目录 查看有没有haproxy.spec文件,这个可以用来制作rpm包 cd examples/ #安装rpmbuild软件(安装完之后会在当前用户家目录下生成一个rpmbuild目录) yum install rpm-build -y #将安装包放进 ~/rpmbuild/SOURCES/下 cp ~/haproxy-1.6.11.tar.gz ~/rpmbuild/SOURCES/ #制作rpm包 rpmbuild -bb haproxy.spec #制作完成的rpm包会放在下面的目录中 cd ~/rpmbuild/RPMS/x86_64/ #rpm安装 rpm -ivh haproxy-1.6.11-1.x86_64.rpm #查看rpm安装后的文件存放目录 rpm -qpl haproxy-1.6.11-1.x86_64.rpm #rpm安装不会有配置文件(rpm -qpl 后没有显示有配置文件存在) #拷贝一份配置文件 cd ~/haproxy-1.6.11/examples cp content-sw-sample.cfg /etc/haproxy/haproxy.cfgcd /etc/haproxy/ vim haproxy.cfg
global maxconn 10000 stats socket /var/run/haproxy.stat mode 600 level admin log 127.0.0.1 local0 #日志输出配置,所有日志都记录在本机,通过local0输出 uid 200 gid 200 chroot /var/empty daemon #以后台形式运行haproxy defaults mode http #默认模式 tcp是4层 http是7层 log global option httplog #日志级别 option dontlognull #不记录健康检查日志信息 monitor-uri /monitoruri maxconn 8000 timeout client 30s timeout connect 5s timeout server 30s timeout queue 30s stats uri /status frontend public bind 0.0.0.0:80 #开启占用80端口 default_backend static #默认访问后端为 static backend static balance roundrobin #轮询 server server8 172.25.12.8:80 check inter 1000 server server7 172.25.12.7:80 check inter 1000 #两个后台的主机,check inter 1000 检测心跳频率检测haproxy是否配置成功: server7 server8上安装apache 并启动服务:
yum install -i httpd /etc/init.d/httpd startserver7:
echo server7 > /var/www/html/index.htmlserver8:
echo server8 > /var/www/html/index.html负载均衡结果:
将server7上的apache down掉
vim /etc/rsyslog.conf
13 $ModLoad imudp 14 $UDPServerRun 514 42 *.info;mail.none;authpriv.none;cron.none;local0.none /var/log /messages 62 local0.*重启日志服务:
/etc/init.d/rsyslog restart查看日志文件是否添加上了:
ll /var/log/haproxy.log重启haproxy:
/etc/init.d/haproxy restartvim haproxy.cfg
frontend public acl badhost src 172.25.12.250 #将172.25.12.250的访问全部设为badhost http-request deny if badhost #拒绝badhost 状态下的ip default_backend static这种情况下,172.25.12.250不能通过80端口访问这台主机(我设置haproxy开启的是80端口)
vim haproxy.cfg 将访问后缀为.php文件的请求全部丢给server7 其他丢给server8
frontend public acl url_dynamic path_end -i .php bind 0.0.0.0:80 use_backend dynamic if url_dynamic default_backend static backend dynamic balance roundrobin server server7 172.25.12.7:80 check inter 1000 backend static server server6 172.25.12.8:80 check inter 1000测试:
server7: yum install php -y vim /var/www/html/index.php
<?php phpinfo() ?>/etc/init.d/httpd restart
浏览器访问172.25.12.9/index.php 弹出的界面是server7下的index.php界面
vim haproxy.cfg 将读的请求交给server7处理 将写的请求交给server8处理
frontend public acl read method GET acl read method HEAD acl write method PUT acl write method POST bind 0.0.0.0:80 use_backend dynamic if write use_backend static if read backend dynamic balance roundrobin server server7 172.25.12.7:80 check inter 1000 backend static server server6 172.25.12.8:80 check inter 1000