欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux运维之HAProxy实现web页面的动静分离、读写分离

程序员文章站 2024-03-21 18:19:58
...

前言:

本章的内容环境承接上一篇博客:
Linux运维之HAProxy实现负载均衡(日志、监控、acl访问控制的配置)

一、实验环境

实验环境: rhel6.5 selinux and iptables disabled

实验主机:

172.25.75.1 (server1)            haproxy

172.25.75.2 (server2)            web1

172.25.75.3(server3)             web2

172.25.75.250					 客户端

二、动静分离

1、动静分离的实用性

实际应用环境中,往往需要根据业务请求将相关不同请求跳转到指定的后端server,比如客户静态资源请求交给静态资源server处理,php请求交给php server处理,jsp请求交给tomcat处理,即业务上的应用请求分离,而haproxy完全可以利用acl匹配规则实现这一目的

2、更改haproxy服务端的配置文件,并重启服务

vim /etc/haproxy/haproxy.cfg

global
        maxconn         65535
        stats socket    /var/run/haproxy.stat mode 600 level admin
        log             127.0.0.1 local0
        uid             200
        gid             200
        chroot          /var/empty
        daemon

defaults
        mode            http
        log             global
        option          httplog
        option          dontlognull
        monitor-uri     /monitoruri
        maxconn         8000
        timeout client  30s
        retries         2
        option redispatch
        timeout connect 5s
        timeout server  5s
        stats uri       /admin/stats

# The public 'www' address in the DMZ
frontend public
        bind            172.25.75.1: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     dynamic if { path_end .php }
        default_backend static

# The static backend backend for 'Host: img', /img and /css.
backend static
        balance         roundrobin
        server          web1 172.25.75.2:80 check inter 1000

backend dynamic
        balance         roundrobin
        server          web2 172.25.75.3:80 check inter 1000

Linux运维之HAProxy实现web页面的动静分离、读写分离

重启服务:

/etc/init.d/haproxy restart

Linux运维之HAProxy实现web页面的动静分离、读写分离

3、在server3上删除默认发布页,编辑index.php发布页,下载php插件

cd /var/www/html/
rm -rf index.html
vim index.php
<?php
        phpinfo();
?>

yum install php -y

Linux运维之HAProxy实现web页面的动静分离、读写分离
Linux运维之HAProxy实现web页面的动静分离、读写分离
Linux运维之HAProxy实现web页面的动静分离、读写分离

4、server3上重启httpd服务

/etc/init.d/httpd restart

Linux运维之HAProxy实现web页面的动静分离、读写分离

5、测试

静态:
在客户端浏览器输入:
172.25.75.1/index.html
Linux运维之HAProxy实现web页面的动静分离、读写分离
动态:
在客户端浏览器输入:
172.25.75.1/index.php
Linux运维之HAProxy实现web页面的动静分离、读写分离

三、读写分离

1、server1修改haproxy配置文件,并重启服务

vim /etc/haproxy/haproxy.cfg

更改:
 34 frontend public
 35         bind            172.25.75.1:80 name clear
 36         #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem
 37         #use_backend     static if { hdr_beg(host) -i img }
 38         #use_backend     static if { path_beg /img /css   }
 39 
 40         acl write method POST
 41         acl write method PUT
 42         
 43         acl read method GET
 44         acl read method HEAD
 45         
 46         use_backend     static if write
 47         default_backend dynamic
 48         
 49 # The static backend backend for 'Host: img', /img and /css.
 50 backend static
 51         balance         roundrobin
 52         server          web1 172.25.75.2:80 check inter 1000
 53         
 54 backend dynamic
 55         balance         roundrobin
 56         server          web2 172.25.75.3:80 check inter 1000

Linux运维之HAProxy实现web页面的动静分离、读写分离

/etc/init.d/haproxy restart

Linux运维之HAProxy实现web页面的动静分离、读写分离
此配置文件的目的为:默认进入web2的发布页面,也就是web2为读的服务器,write时为static服务,也就是web1写服务器,实现网页的读写分离。

2、在server3上发布网页内容,此文件为php语言编写,并重启服务

vim index.php

<html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>

</body>
</html>

Linux运维之HAProxy实现web页面的动静分离、读写分离
Linux运维之HAProxy实现web页面的动静分离、读写分离

/etc/init.d/httpd restart

Linux运维之HAProxy实现web页面的动静分离、读写分离

3、在server2上编写write时的web1发布内容,创建上传目录upload,重启服务

vim upload_file.php

<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 2000000))
  {
  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";
  }
?>

Linux运维之HAProxy实现web页面的动静分离、读写分离
创建upload目录,并重启服务:

mkdir upload
chmod 777 upload
/etc/init.d/httpd restart

Linux运维之HAProxy实现web页面的动静分离、读写分离

4、测试

在客户端浏览器输入:172.25.75.1
Linux运维之HAProxy实现web页面的动静分离、读写分离
分析:网页所展示的内容为web2(server3)的httpd服务发布的内容。

Linux运维之HAProxy实现web页面的动静分离、读写分离
点击Browse,选择一张图片上传。
Linux运维之HAProxy实现web页面的动静分离、读写分离
点击:Submit
Linux运维之HAProxy实现web页面的动静分离、读写分离
分析:上传图片后显示的页面为web1(server2)httpd发布的内容。

查看server2的upload目录:
Linux运维之HAProxy实现web页面的动静分离、读写分离
图片在web1(server2)的服务器中!实现了web页面的读写分离!!!