LNMP 分散式叢集(二):NFS檔案伺服器的搭建與檔案緩衝上傳的配置

dfface發表於2020-03-18

前言

LNMP 分散式叢集的部署實踐 系列文章:


dfface 的版權宣告:所有文章除特別宣告外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明出處,嚴禁商業用途!

這一篇接著上文《LNMP 分散式叢集的部署實踐(一):Nginx+PHP平臺搭建與負載均衡配置》,我們現在需要搭建NFS伺服器。

回顧一下基本的架構:

架構(序號代表IP地址:192.168.177.1X)

配置

安裝和啟動NFS服務

yum -y install nfs-utils
vi /etc/sysconfig/nfs # 配置固定埠 MOUNTD_PORT=892
service rpcbind start # NFS  服務依賴於 rpcbind 服務
sevice nfs start
chkconfig nfs on
# 配置 iptables 允許遠端主機訪問
iptables -I INPUT -p udp --dport 111 -j ACCEPT
iptables -I INPUT -p udp --dport 892 -j ACCEPT
iptables -I INPUT -p tcp --dport 2049 -j ACCEPT
複製程式碼

可以修改/etc/sysconfig/iptables-config 將裡面IPTABLES_SAVE_ON_STOP="no"改為"yes"。這樣每次服務在停止之前會自動將現有的規則儲存在 /etc/sysconfig/iptables 這個檔案中去。

NFS 依賴埠:

埠號 服務 說明
111 portmapper 埠對映
892 rpc.mountd 管理NFS
2049 nfs NFS服務本身的埠

配置共享目錄

利用 NFS 將制定目錄配置為共享目錄,允許外部計算機訪問,對6號機進行設定:

mkdir /share
chmod 777 /share
echo '/share *(rw)' > /etc/exports # 路徑 IP段(許可權)
service nfs reload
複製程式碼

完成上述配置後,在2號機掛載NFS共享目錄:

yum -y install nfs-utils
showmount -e 192.168.177.16 # 檢視 NFS 伺服器中的共享目錄
mkdir /data/share
mount 192.168.177.16:/share /data/share # 掛載NFS伺服器共享目錄到本地目錄 ,重啟後失效
echo '192.168.177.16:/share /data/share nfs defaults 0 0' >> /etc/fstab # 在 /etc/fstab 檔案中配置開機是自動讀取的檔案系統資訊,第一個0表示是不備份,第二個0是不自檢, defaults  使用預設設定。等於rw,suid,dev,exec,auto,nouser,async
複製程式碼

Server 2

配置檔案快取伺服器(2號機)

許多網站都有檔案的上傳和下載功能,當網站的規模和訪問量增大時,對經常訪問的檔案進行快取就非常重要,下面是在2號機中配置Nginx的快取功能,通過部署檔案快取伺服器降低後端檔案儲存伺服器的壓力

Web快取技術7的基本思想是時間區域性性原理,Web伺服器首先根據客戶端的請求從後端伺服器獲取響應資料並傳給客戶端,同時Web伺服器將該響應資料在本地建立副本儲存。當下次有相同的客戶端請求時,Web伺服器直接使用本地的副本響應訪問請求,而不是像後端伺服器再次傳送請求。

Nginx 快取機制基本原則

Buffer(緩衝) 和 Cache(快取) 都是用於提高IO吞吐效率的,但他們是不同的概念。Buffer,主要用於傳輸效率不同步或優先順序不同的裝置間傳遞資料,一般通過對一方資料進行臨時存放,再統一發給另一方,以降低程式間等待時間,臨時資料一旦傳送給另一方,這些資料本身就沒用了;Cache,主要用於將硬碟上已有的資料在記憶體中建立快取資料,提高資料的訪問效率,對於國企不同的快取可以隨銷燬,但不會銷燬硬碟上的資料。Proxy Buffer實現了Web伺服器相應資料的非同步傳輸,Proxy Cache 實現Nginx伺服器對客戶端資料請求的快速響應。Proxy Cache依賴於Proxy Buffer,在Nginx中還有一種快取機制Proxy Store,它對來自Web伺服器的相應資料,尤其是靜態資料只進行簡單的快取,不支援快取過期更新、記憶體建立索引等,但支援設定使用者或使用者組對快取資料的訪問許可權。——Nginx高效能Web伺服器詳解,2013,電子工業出版社

在http塊中新增:

proxy_temp_path proxy_temp; # 響應資料的臨時存放目錄
proxy_cache_path proxy_cache levels=1:2 keys_zone=one:80m inactive=7d max_size=5g; # 快取資料存放路徑和Proxy Cache使用的記憶體空間
複製程式碼

proxy_cache包含兩級hash目錄,快取總量不超過5GB,如果快取在7天內沒有被訪問則強制更新,也即自動清理7天內未被訪問的快取檔案。記憶體Cache空間的名字為one,大小不超過80MB。

在server塊中新增:

server {
    listen 80;
    server_name file.itshop.test;
    add_header X-Cache $upstream_cache_status;  # 使用add_header指令來設定response header
    location / {
        proxy_pass http://web_server;
        proxy_http_version 1.1;  # 長連線設定
        proxy_set_header Connection "";  # 長連線設定
        procy_cache one;  # 配置使用 one 這個key_zone
        proxy_cache_key $host$uri$is_args$args;  # 設定建立索引時使用的關鍵字
        proxy_cache_valid 200 304 2d; # 配置200和304狀態的響應快取2天
        proxy_cache_valid any 1m; # 配置其他狀態的響應資料快取1分鐘
    }
}
upstream web_server {
    server localhost:81;
    keepalive 32;  # 設定到upstream伺服器的空閒keepalive連線的最大數量
}
server {
    listen 81;
    server_name localhost;
    root /data/share/;  # 後面加不加/無所謂,詳見[Nginx靜態服務配置---詳解root和alias指令](https://www.jianshu.com/p/4be0d5882ec5)
    index index.html index.htm;
}
複製程式碼

關於Nginx長連線的優化,你可能需要閱讀nginx優化——包括https、keepalive等

快取測試

配置檔案上傳伺服器(3號機)

檔案上傳伺服器,實現接收使用者上傳的檔案儲存到共享目錄中。

  1. 掛載 NFS 共享目錄
yum -y install nfs-utils
showmount -e 192.168.177.16
mkdir /data/share
mount 192.168.177.16:/share /data/share
echo '192.168.177.16:/share /data/share nfs defaults 0 0' >> /etc/fstab # 開機自動掛載
複製程式碼
  1. 配置Nginx對請求資料請求量的限制

Nginx 在預設情況下只允許客戶端請求時傳送最大 1MB 的資料,超過了就會返回413錯誤(請求實體過大),在server塊中配置:client_max_body_size 20m;,也可配置於http、location塊。

另外還要注意 php.ini 中對於上傳檔案的限制,將限制增加到10M:

vi /usr/local/php/lib/php.ini  # 直接敲命令,儲存之後就會新建 php.ini
post_max_size=20M # 通過 POST 提交的最大限制
file_uploads=On 
upload_max_filesize=10M # 上傳檔案最大限制
;upload_tmp_dir = # 上傳檔案臨時儲存目錄,預設/tmp
複製程式碼

在站點目錄(我這裡是/data/www)編寫 upload.php 進行檔案上傳測試:

vi /usr/local/nginx/html/upload.php

<form method="post" enctype="multipart/form-data">
    <input type="file" name="up">
    <input type="submit">
</form>
<?php
if (isset($_FILES['up']) && $_FILES['up']['error'] == 0){
    $savepath = 'uploads/'.time().'.dat';
    if(move_uploaded_file($_FILES['up']['tmp_name'], "/data/share/$savepath")){
        echo "File: <a href=\"http://file.itshop.com/$savepath\">Download</a>";
    }
}

cd /data/share
mkdir -m 777 uploads
複製程式碼

大檔案返回413

LNMP 分散式叢集的部署實踐 系列文章:


dfface 的版權宣告:所有文章除特別宣告外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明出處,嚴禁商業用途!

相關文章