HAProxy + apache 负载均衡,动静分离,读写分离

实验环境:

操作系统: 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=0

haproxy软件下载链接:

http://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.cfg

配置haproxy负载均衡:

cd /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 start

server7:

echo server7 > /var/www/html/index.html

server8:

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 restart

设置acl权限:

vim 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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值