Haproxy的实现(负载均衡、访问控制、读写分离)

1.Haproxy的介绍与安装

1.1 Haproxy的介绍

1.2 Haproxy的安装

实验环境:
server:192.168.43.11 提供haproxy
server2:192.168.43.20 后端1
server3:192.168.43.30 后端2
rhel7:用户端

yum install haproxy.x86_64 -y
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:启动haproxy后需要查看日志是否有报错


在server2与server3中安装httpd
在这里插入图片描述
在这里插入图片描述


2.Haproxy的功能实现

2.1 Haproxy的负载均衡

vim /etc/haproxy/haproxy.cfg

global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    stats socket /var/lib/haproxy/stats

frontend  main *:80
    default_backend             static

backend static
    balance     roundrobin
    server      web1   192.168.43.20:80 check
    server      web2   192.168.43.30:80 check

systemctl restart haproxy.service
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


测试
在这里插入图片描述


2.2 Haproxy查看后端服务器的状态

vim /etc/haproxy/haproxy.cfg
systemctl restart haproxy.service

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    retries                 3
    timeout connect         5s
    timeout client          1m
    timeout server          1m
    maxconn                 3000

    stats uri               /admin/stats##查看后端服务器状态
    monitor-uri             /monitoruri##监控页面
    status auth             admin:123##设置查看权限(用户:密码)
    status refresh          5s##自动更新时间间隔

在这里插入图片描述


测试:
http://192.168.43.11/admin/stats
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://192.168.43.11/monitoruri
在这里插入图片描述


2.3 Haproxy的日志配置

vim /etc/rsyslog.conf

#### MODULES ####
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

#### RULES ####
local2.*                                                /var/log/haproxy.log

systemctl restart rsyslog.service
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


2.4 Haproxy的访问控制

vim /etc/haproxy/haproxy.cfg

frontend  main *:80
    acl blacklist src 192.168.43.100 ##设置访问黑名单
    http-request deny if blacklist ##黑名单请求拒绝
    errorloc 403 http://192.168.43.11:8080/index.html##对黑名单设置访问报错页面
    default_backend             static

yum install -y httpd在server中安装httpd
vim /etc/httpd/conf/httpd.conf修改httpd的端口

Listen 8080

systemctl restart httpd
systemctl restart haproxy.service


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试:
指定黑名单访问:
在这里插入图片描述


其他用户访问:
在这里插入图片描述


2.5 Haproxy的请求精确定位(动静分离)

vim /etc/haproxy/haproxy.cfg

frontend  main *:80
    default_backend             static
    use_backend dynamic if { path_end .php } ##访问以.php结尾访问动态数据后端


backend static ##静态数据后端
    balance     roundrobin
    server      web1   192.168.43.20:80 check
backend dynamic ##动态数据后端
    balance     roundrobin
    server      web2   192.168.43.30:80 check

systemctl restart haproxy.service

在server3中:
yum install -y php在server3中安装php
vim /var/www/html/index.php设置php发布页面

<?php
phpinfo()
?>

systemctl restart httpd.service重启服务


在这里插入图片描述在这里插入图片描述
在这里插入图片描述
测试:在这里插入图片描述
在这里插入图片描述


2.6 Haproxy的读写分离

在server2中
yum install -y php
vim /var/www/html/index.php读的php页面

mkdir /var/www/html/upload建立用户写的目录
chmod 777 /var/www/html/upload

<html>
<body>

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

</body>
</html>

vim /var/www/html/upload_file.php写的php页面

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

systemctl restart httpd.service


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


在server3中
yum install -y php
vim /var/www/html/index.php读的php页面
vim /var/www/html/upload_file.php写的php页面
systemctl restart httpd.service

mkdir /var/www/html/upload建立用户写的目录
chmod 777 /var/www/html/upload


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在server中
``

backend static
    balance     roundrobin
    server      web1   192.168.43.20:80 check

backend dynamic
    balance     roundrobin
    server      web2   192.168.43.30:80 check

``

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


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述总结:用户读的内容为server2中的内容,写的内容为server3.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章