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.

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