HAproxy七层负载均衡——访问控制、动静分离、读写分离实现过程详解

实验环境

主机名 IP 服务
虚拟机server1 172.25.6.1 haproxy,httpd,服务端
虚拟机server2 172.25.6.2 httpd,php,客户端
虚拟机server3 172.25.6.3 httpd,php,客户端
物理机 172.25.6.250 测试端

一、访问控制

1.用户密码访问

(1)编辑配置文件

设置用户和密码以及刷新时间

vim haproxy.cfg 
/etc/init.d/rsyslog restart

stats auth      admin:peng			##用户名为admin,密码为peng
stats refresh   5s					##刷新时间为5s

在这里插入图片描述
修改内容如下
在这里插入图片描述

(2)测试:浏览器访问需要输入密码,密码输入正确后可以访问

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

(3)查看日志看刷新时间

<1>编辑日志服务的配置文件,打开UDP接口,创建haproxy的日志文件,重启服务

vim /etc/rsyslog.conf 
/etc/init.d/rsyslog restart

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

<2>查看日志文件,可以看到5秒刷新一次

cat /var/log/haproxy.log

在这里插入图片描述

2.黑名单

(1)编辑配置文件,重启服务

vim haproxy.cfg 
/etc/init.d/haproxy reload

在这里插入图片描述

在这里插入图片描述

(2)物理机访问:出现403报错

curl 172.25.6.1

在这里插入图片描述

在这里插入图片描述

3.错误页面重定向

(1)编辑配置文件,重启服务

vim haproxy.cfg 
/etc/init.d/haproxy reload

在这里插入图片描述

(2)编辑httpd配置文件修改httpd端口,编辑测试页。开启服务

yum install -y httpd
vim /etc/httpd/conf/httpd.conf 

在这里插入图片描述

在这里插入图片描述

(3)物理机测试:物理机访问没有结果,浏览器访问错误页面重定向到server1

在这里插入图片描述

二、动静分离

在下面的实验中我们将server2设置为动态资源的服务器,server3设置为静态资源的服务器

(1)编辑配置文件

vim /etc/haproxy/haproxy.cfg 
/etc/init.d/haproxy restart

在这里插入图片描述

在这里插入图片描述

(2)编辑配置文件,设置动静分离,退出保存后重启服务

vim /etc/haproxy/haproxy.cfg 
/etc/init.d/haproxy restart

在这里插入图片描述

(3)server3安装php,编辑php默认测试页,重启httpd

yum install php -y

在这里插入图片描述
(4)打开浏览器测试:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三、读写分离

(1)编辑配置文件,部分内容如下:

vim /etc/haproxy/haproxy.cfg 
/etc/init.d/haproxy restart

在这里插入图片描述

在这里插入图片描述

(2)server2在/var/www/html目录下创建两个文件和一个upload目录(因为我们在设置时,规定写如static服务器,即server2),给他们满权限

chmod 777 upload

在这里插入图片描述

(3)在server2上重写发布文件

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

(4)server2安装php,并重启httpd服务

yum install -y php
/etc/init.d/httpd restart

(5)将这三个文件和目录传给server3

scp -r /var/www/html/* server3:/var/www/html/

在这里插入图片描述

(6)server3查看,并将其他的文件删除

在这里插入图片描述

(7)编辑index.php文件,方便观察给submit前添加内容,重启服务

vim index.php
/etc/init.d/httpd restart

在这里插入图片描述
在这里插入图片描述
(8)打开浏览器测试:

访问172.25.22.1出现的页面中出现【server3 172.25.6.3】,说明读到的是server3,上传图片,可以在server2的uopload目录下看到。

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

上传成功

在这里插入图片描述

在server3的upload目录里查看

在这里插入图片描述

在server2的upload目录里查看

在这里插入图片描述

通过上述的实验证实了,用户在访问时访问了server3(读操作),当进行资源上传时,内容上传到了server2(写操作),由此实现了读写分离

猜你喜欢

转载自blog.csdn.net/meltsnow/article/details/89846430
今日推荐