haproxy

HAProxy

HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,
同时可以保护你的web服务器不被暴露到网络上。

安装

tar zxf haproxy-1.6.11.tar.gz

find -name *.spec(若存在说明可以将其打为二进制包进行安装)
这里写图片描述

安装rpmbuild命令被用于创建rpm的二进制软件包和源码软件包

yum install -y rpm-build

打包并安装

rpmbuild -tb haproxy-1.6.11.tar.gz
cd rpmbuild/RPMS/x86_64/
rpm -qlp haproxy-1.6.11-1.x86_64.rpm      #查看安装文件
rpm -ivh haproxy-1.6.11-1.x86_64.rpm

拷贝配置文件到指定目录

cp haproxy-1.6.11/examples/content-sw-sample.cfg /etc/haproxy/haproxy.cfg

创建haproxy指定用户

groupadd -g 200 haproxy
useradd -u 200 -g 200 haproxy

添加最大限制文件数

vim /etc/security/limits.conf
    haproxy - nofile 65535

sysctl -a | grep file 可查看系统最大文件数

修改配置文件,实现负载均衡

vim /etc/haproxy/haproxy.cfg
    defaults
        mode            http
        log             global
        option          httplog
        option          dontlognull
        monitor-uri     /monitoruri
        maxconn         8000
        timeout client  30s

        option prefer-last-server
        retries         2
        option redispatch
        timeout connect 5s
        timeout server  5s

        stats uri       /admin/stats
.........................................................
# The public 'www' address in the DMZ
frontend public
        bind            *:80 name clear
        #use_backend     static if { hdr_beg(host) -i img }
        #use_backend     static if { path_beg /img /css   }
    default_backend static
........................................................
# The static backend backend for 'Host: img', /img and /css.
backend static
        balance         roundrobin
        server          web1 172.25.40.2:80 check inter 1000
    server          web2 172.25.40.3:80 check inter 1000

开启server2 server3http服务 端口80
测试:1.物理机 curl 172.25.40.1,实现负载均衡
2.浏览器输入网址:172.25.40.1/admin/stats/ ,可查看其stats状态页

这里写图片描述

自定义用户密码(编辑配置文件)

这里写图片描述

创建指定日志文件

vim /etc/rsyslog.conf 
    # Provides UDP syslog reception(使UDP端口接收生效)
    $ModLoad imudp
    $UDPServerRun 514
    *.info;mail.none;authpriv.none;cron.none;local0.none                /var/log/messages (/var/log/messages下不保存)
    local0.*    /var/log/haproxy.log                                       

/etc/init.d/rsyslog restart  #重启日志

acl列表(编辑haproxy配置文件)

1).建立acl黑名单,指定ip

acl blacklist src 172.25.40.250
http-request deny if blacklist

测试403报错

2).错误重定向,这里更改配置文件将错误重定向到本机的apache服务默认发布目录里的写入内容(记得将httpd的端口改为8080避免和haproxy服务冲突将403报错给客户没实际作用)

acl blacklist src 172.25.40.250
http-request deny if blacklist
errorloc 403 http://172.25.40.1:8080/index.html

3)指定ip重定向

acl blacklist src 172.25.40.4
redirect location http://172.25.40.1:8080/index.html if blacklist

测试:
这里写图片描述

实现动静分离

server3安装php 编辑动态页面 完成后restart httpd服务

vim index.php
    <?php
    phpinfo()
    ?>

编辑haproxy配置文件

use_backend dynamic if { path_end .php }
..........................................................
# The static backend backend for 'Host: img', /img and /css.
backend static
        balance         roundrobin
        #balance        source
        server          web1 172.25.40.2:80 check inter 1000

#the application servers go here
backend dynamic
        balance         roundrobin
        #balance        source
        server          web2 172.25.40.3:80 check inter 1000

动态访问server3,静态访问server2

实现读写分离

server2 server3 编写php文件如下

cd /var/www/html/
cd upload/
mv * ..
chmod 777 upload
vim upload_file.php
<?php
if ((($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 2000000000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
    {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

修改haproxy配置文件

    acl read method GET
        acl read method HEAD
        acl write method POST
        acl write method PUT

    use_backend dynamic if write

测试:

这里写图片描述

这里写图片描述

server3实现写 图片实际保存在server3上 读的时候访问的是server2;server3查看可以看到图片保存在server3上;实现读写分离

这里写图片描述

paceaker

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值