Haproxy實現反向代理+負載均衡(訪問控制,動靜分離,讀寫分離)

一.Haproxy簡介

HAProxy是一個使用C語言編寫的自由及開放源代碼軟件[1],其提供高可用性、負載均衡,以及基於TCP和HTTP的應用程序代理。
HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行在當前的硬件上,完全可以支持數以萬計的併發連接。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中,同時可以保護你的web服務器不被暴露到網絡上。
HAProxy實現了一種事件驅動,單一進程模型,此模型支持非常大的併發連接數。多進程或多線程模型受內存限制 、系統調度器限制以及無處不在的鎖限制,很少能處理數千併發連接。事件驅動模型因爲在有更好的資源和時間管理的用戶空間(User-Space) 實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程序通常擴展性較差。這就是爲什麼他們必須進行優化以使每個CPU時間片(Cycle)做更多的工作。 包括 GitHub、Bitbucket[3]、StackOverflow、Reddit、Tumblr、Twitter和 Tuenti在內的知名網站,及亞馬遜網絡服務系統都使用了HAProxy。

二.HAProxy實驗

實驗環境:rhel7.5

主機名 作用
server1(172.25.16.1) Haproxy
server2(172.25.16.2) 後端httpd
server3(172.25.16.3) 後端httpd

1.haproxy實現反向代理

1.server1安裝haproxy

yum install -y haproxy.x86_64
rpm -qa | grep haproxy
haproxy-1.5.18-7.el7.x86_64
rpm -ql haproxy-1.5.18-7.el7.x86_64			##查看相關文件

在這裏插入圖片描述
在這裏插入圖片描述
2.修改haproxy的配置文件

vim /etc/haproxy/haproxy.cfg

在這裏插入圖片描述
3.在server2和server3上安裝httpd,並編寫測試文件

yum install httpd -y
vim /var/www/html/index.html
systemctl start httpd
curl localhost

在這裏插入圖片描述在這裏插入圖片描述
4.開啓server1的haproxy的服務
在這裏插入圖片描述
5.在物理機上測試:

訪問server1實現輪詢訪問
在這裏插入圖片描述

6.爲haproxy添加訪問日誌

vim /etc/rsyslog.conf
systemctl restart rsyslog.service

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
7.再次在物理機上測試:訪問server1

發現生成日誌
在這裏插入圖片描述
8.配置文件中添加下面參數,可以實現web監控,和返回狀態碼。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
返回狀態碼:
在這裏插入圖片描述

9.haproxy設置黑名單,實現訪問控制。

yum install httpd -y
vim /var/www/html/index.html
systemctl restart haproxy
vim /etc/http/conf/http.conf

systemctl start httpd
systemctl restart httpd


在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
測試:
在這裏插入圖片描述

2.haproxy實現動靜分離

  1. 在server3上安裝php,編輯動態頁面,完成後重啓服務
    在這裏插入圖片描述

2.編輯haproxy的配置文件

在這裏插入圖片描述
在這裏插入圖片描述
測試:
靜態訪問
在這裏插入圖片描述
動態訪問
在這裏插入圖片描述

3.讀寫分離

sever1的配置:
vim /etc/haproxy/haproxy.cfg			##修改配置文件
systemctl restart haproxy.service		##重啓服務

在這裏插入圖片描述

server2和server3的配置:
yum install php -y				##安裝php圖形化服務
systemctl restart httpd			##重啓服務
mkdir /var/www/html/upload		##建立一個目錄用來寫入文件
chmod 777 /var/www/html/upload	##給這個存儲目錄可寫的權限

再編寫兩個文件,一個用配置讀頁面,一個用來設置存儲路徑
vim index.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";
  }
?>

測試:在瀏覽器輸入172.25.16.1/index.php來查看
在這裏插入圖片描述
在這裏插入圖片描述

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