haproxy的部署 - 七層負載均衡

實驗環境:
物理機 用於測試訪問 172.25.254.67
haproxy服務器 172.25.254.1
後端 server2 172.25.254.2
後端 server3 172.25.254.3

haproxy的部署

rhel 7.6的系統中有自帶的haproxy,我們也可以去官網下載:
https://www.haproxy.org/

 yum install haproxy -y
 [root@server1 ~]# id haproxy
uid=188(haproxy) gid=188(haproxy) groups=188(haproxy)
會自動生成haproxy用戶。

它的配置文件在 /etc/haproxy/haproxy.cfg
大致有一下幾個模塊,global,defaults,frontend main *:5000,backend。

我們做一下更改:
在這裏插入圖片描述
將請求轉發給兩臺後端。
物理機測試訪問:
在這裏插入圖片描述
實現了反向代理和負載均衡。

haproxy的配置

查看狀態和監控;
在這裏插入圖片描述
訪問:
在這裏插入圖片描述
可以看到我們兩臺後端的狀態,相當於我們的後臺。

在這裏插入圖片描述
200OK 可以知道這個服務是正常的,用於監控。

後臺訪問權限控制

    stats auth          admin:westos               用戶認證,帳號爲admin  密碼爲westos
    stats refresh       5s						頁面刷新間隔 5s

在這裏插入圖片描述
在這裏插入圖片描述
這樣的話就會需要輸入密碼才能登陸,且5s刷新一次。

日誌

在這裏插入圖片描述
每個應用都有自己的日誌.我們配置haproxy時它告訴我們要去配置系統的日誌。

vim /etc/

打開udp模式:
在這裏插入圖片描述
設置地址:
在這裏插入圖片描述
重啓rsyslog服務.
在這裏插入圖片描述
發現裏面已經記錄了訪問的信息,系統就會把haproxy的日誌信息記錄到 /var/log/haproxy.log 。

黑名單

在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
可見我們的物理機被拒絕,用其他的ip地址訪問可以。
我們也可以把 block 替換爲 http-request deny,效果相同:
在這裏插入圖片描述
我們還可以將403錯誤頁面轉接至本機的8080端口:
安裝apache,修改配置文件端口爲8080端口,啓動httpd,並配置一個index.html頁面:
在這裏插入圖片描述
重啓haproxy,測試訪問:
在這裏插入圖片描述
剛纔的403頁面就變成了8080端口的頁面。

請求分發

設置一個動態頁面的資源組,上面的static爲靜態組:

vim /etc/haproxy/haproxy.cfg

在這裏插入圖片描述
當訪問以php結尾的頁面使用dynamic 資源組,默認使用static資源組.

在server3 主機安裝php,並配置一個php頁面

yum install php -y

在這裏插入圖片描述
測試訪問:
在這裏插入圖片描述
在這裏插入圖片描述
可見默認訪問到了server2上,當訪問以php結尾的頁面時訪問的時dynamic 的主機組,就是server3.

讀寫分離

給server2 頁安裝php。
在server2 和server3 的/var/ww/html 目錄下建立兩個php頁面.
在這裏插入圖片描述
upload 的權限爲777 不然 haproxy 用戶不可寫。

index.php:
在這裏插入圖片描述
upload_file.php:
在這裏插入圖片描述
index.php 會讀取upload_file.php的動作,會把上傳的文件上傳到 upload目錄下。

更改server1 的haproxy 配置:

vim /etc/haproxy/haproxy.cfg
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  main *:80
    acl read method HEAD
    acl read method GET                定義讀的兩種方法
    acl write method POST
    acl write method PUT				定義寫的兩種方法,都可以。

#    acl url_static       path_beg       -i /static /images /javascript /stylesheets
#    acl url_static       path_end       -i .jpg .gif .png .css .js
#
#    use_backend static          if url_static
    #acl blacklist src 172.25.254.99
    #http-request deny if blacklist 
    #errorloc 403 http://172.25.254.1:8080/index.html

    use_backend dynamic if write            寫的時候使用dynamic資源組
    use_backend static if read				讀的時候使用static資源組
    default_backend             static

在這裏插入圖片描述
讀的時候讀的是 static 組。
我們可以測試該server2的index.php;
在這裏插入圖片描述
在測試訪問:
在這裏插入圖片描述
可見讀取的就是server2 主機。

我們選擇上傳daolian.jpg ,然後點擊submit提交,
在這裏插入圖片描述
這時 server3 的upload目錄下出現了圖片,而server2 沒有
在這裏插入圖片描述
在這裏插入圖片描述

這樣就實現了讀寫分離。

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