Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离

一.Haproxy的简介

(1)Haproxy是一个使用C语言编写的自由以及开放的源代软件,其提供高性能,负载均衡,以及基于TCP和HTTP应用程序代理。相较于Nginx,HAProxy更专注于反向代理,因此它可以支持更多的选项,更精细的控制,更多的健康检测机制的负载均衡算法。
(2)HAProxy特别适用于那些负载特别大的web站点,这些站点通常又需要会话保持或者七层处理,HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。
(3)HAProxy的运行模式使得它可以很简单安全的整合进当前的架构中,同时可以保护后台的web服务器不被暴露到网络上。

二.实验环境

本次实验需要三台虚拟机,server1作为haproxy代理服务器,server2和server3作为apache代理服务器

三.haproxy的部署及实现反向代理、负载均衡

在server1代理服务器
  • 1.获得资源包haproxy-1.7.3.tar.gz解压

      tar zxf haproxy-1.7.3.tar.gz
    

Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第1张图片

  • 2.将压缩包变成一个rpm包

注意: 有.spec文件,就可以把源码制作为rpm包,制作好后会生成rpmbuild的目录,看见makefile说明使用c语言写的

find . -name *.spec  #查看是否有.spec文件

Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第2张图片

yum install rpm-build -y  下载将rpm包打包的资源
yum install -y gcc  下载gcc源码编译
yum install pcre-devel -y
rpmbuild  -tb  haproxy-1.7.3.tar.gz  ##将压缩包变成rpm包

Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第3张图片

  • 3.安装rpm包
    会生成rpmbuild目录(安装包所在的目录)该目录下的子目录中有生成的安装包

      cd rpmbuild/RPMS/x86_64
      ls
      rpm -ivh haproxy-1.7.3-1.x86_64.rpm
    

Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第4张图片

  • 4.寻找配置文件(安装好后会生成配置目录/etc/haproxy但没有配置文件,可以去解压包里找)

      cd haproxy-1.7.3/examples
    

Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第5张图片

  • 5.将配置文件复制到配置目录

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

在这里插入图片描述

  • 6.编写配置文件实现负载均衡

      vim haproxy.cfg 
    
      10 global  ##全局定义
      11         maxconn         10000  #最大连接数
      12         stats socket    /var/run/haproxy.stat mode 600 level admin
      13         log             127.0.0.1 local0 #本机日志
       14         uid             200 #haproxy用户的uid
      15         gid             200  #haproxy的gid
      16         chroot          /var/empty
      17         daemon
      18 
      19 defaults   #默认条件
       20         mode            http #默认使用http的7层模式 tcp:4层
      23         log             global
      24         option          httplog
      25         option          dontlognull
      26         monitor-uri     /monitoruri
      27         maxconn         8000
      28         timeout client  30s
      29 
      30         stats uri       /admin/stats
      31         option prefer-last-server
      32         retries   2
      33         option redispatch
      34         timeout connect 5s
      35         timeout server 5s
       36 
      37 frontend public
      38         bind   *:80 name clear  #监听所有服务端口
      39 #       bind 192.168.1.10:443 ssl crt/etc/haproxy/haproxy.pem
       40 #       use_backend  static if { hdr_beg(host) -i img }
       41 #       use_backend  static if { path_beg/img/css }
      42 
      43        default_backend static  #默认实用static后端服务器集群
       44 
      45 #The static backend backend for 'Host:img',/img and /css.
      46 
      47 backend static
      48        balance   roundrobin  #负载均衡算法
      49        server    statsrv1  172.25.69.2:80 check inter 1000    #后端服务器server2
      50        server    statsrv2  172.25.69.3:80 check inter 1000  ##后端服务器server3                                                                   
    

Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第6张图片

/etc/init.d/haproxy   start
在server2和server3后端服务器上部署apache

在这里插入图片描述
在这里插入图片描述

在客户端测试

Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第7张图片
发现访问server1的IP,实际通过反向代理 在server2和server3之间轮循

访问监控窗口

Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第8张图片
按F5刷新,访问量是不断增加的:
Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第9张图片
停止server2的httpd服务:
在这里插入图片描述
增加自动更新时间和用户:
在这里插入图片描述
Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第10张图片
在这里插入图片描述

四.日志和黑名单及错误页面重定向

在server1代理服务器上
  • 设置日志文件

      vim /etc/rsyslog.conf
      local0.*                               /var/log/haproxy.log    ##local0.* 代表本机
      
      /etc/init.d/rsyslog restart
    

Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第11张图片
Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第12张图片
在haproxy日志中查看到haproxy更新内容显示为设置的每5s更新一次
Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第13张图片

  • 加入黑名单
    vim haproxy.cfg

      acl blacklist   src 172.25.3.250                                 ##设置黑名单
      http-request  deny   if blacklist
       errorloc  403  http://172.25.3.1:8080/index.html  if blacklist   ##访问页面重定向
    

在server1上编辑重定向页面
注意因为80端口已经被haproxy占据,所以http改用8080端口

在客户端测试
Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第14张图片

五.页面动静分离

在server1代理服务器上编辑配置文件

47         use_backend     dynamic if { path_end .php }
48         default_backend static
 51 backend static
 52         balance         roundrobin
 53         server          web1 172.25.3.2:80  check inter 1000
54 
 55 backend dynamic
 56         balance         roundrobin
 57         server          web2 172.25.3.3:80  check inter 1000

Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第15张图片
访问静态的访问的是server2的默认发布页,访问以.php结尾的时,访问的是php动态页面。

在server3上编辑一个php的默认发布文件
yum install php -y
vim /var/www/html/index.php


/etc/init.d/httpd restart

Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第16张图片

在客户端测试

Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第17张图片
Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第18张图片

六.读写分离

在server1代理服务器上编写配置文件
acl read method HEAD
acl read method GET
acl write method POST
acl write method PUT

    bind            *:80 name clear
    #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem
    #use_backend     static if { hdr_beg(host) -i img }
    #use_backend     static if { path_beg /img /css   }

    use_backend  static if write
    use_backend  dynamic if read

    default_backend dynamic

Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第19张图片

在server3上上传两个php文件:
cd /var/www/html/
ls
chmod 777 index.php upload_file.php 
vim upload_file.php 

($_FILES["file"]["size"] < 2000000)) #扩大文件接收的数据

/etc/init.d/httpd restart

有index.php(选择图片的页面)和uoload_file.php(上传图片的页面)存放图片的目录是uoload目录
在这里插入图片描述
upload_file.php文件内容:(上传图片的动态页面)
Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第20张图片
index.php文件的内容如下:

Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第21张图片

将编辑好的文件scp到server2上同时下载php

在这里插入图片描述

在客户端测试

Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第22张图片
此时选择一张图片上传
Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第23张图片
Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第24张图片
Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离_第25张图片
在这里插入图片描述
在这里插入图片描述
可以看到图片写入到了server2

你可能感兴趣的:(Linux企业级运维6——haproxy+apache的反向代理、负载均衡、动静分离、读写分离)