利用 EFS 快速搭建 NFS 文件系統

Amazon Elastic File System (Amazon EFS) 是AWS雲上一個全託管的彈性NFS文件系統服務。EFS具有簡單易用並可擴展的特性,與AWS的其他雲服務緊密集成,同時也可以被本地數據中心所使用。EFS設計爲可根據文件存儲變化而自動進行擴縮容,同時對應用不產生中斷。用戶無須手動去進行存儲空間的管理。EFS託管服務會自動管理文件存儲底層的基礎架構,用戶無須關心文件系統部署、補丁管理和配置維護的技術細節,相比以往自建NFS服務器的方式,運維效率得到提高,成本也相應下降。

目前EFS已在在西雲數據運營的 AWS 中國(寧夏)區域和光環新網運營的 AWS 中國(北京)區域上線。

EFS架構與基本概念

在控制檯實際操作前,我們可以先簡單瞭解一下EFS的架構和基本概念

在這裏插入圖片描述

上圖是一個AWS區域中EC2實例訪問EFS的架構示例,幾個常見的概念簡述如下:

文件系統(Filesystem)
EFS是一個區域性的服務,即託管文件系統的數據和元數據會自動存儲在AWS區域內的多個可用區,以實現跨可用區的數據保護。VPC內的EC2實例或用戶數據中心內的服務器均可通過網絡以Network File System version4(NFS v4.1和V4.0)協議對文件系統進行訪問。

掛載目標(Mount Target)
VPC中的EC2實例通過掛載目標來訪問文件系統。掛載目標提供了VPC內的一個IP地址,每個可用區可以配置一個掛載目標,以便作爲該可用區內的NFS服務器端點。掛載目標雖然是一個靜態IP,但本身是進行高可用設計的,後面對應的是冗餘的資源。EC2實例掛載時,可以直接指定一個對與文件系統一一對應的DNS域名,該域名會自動解析到EC2實例所在子網所對應的掛載目標上,從而簡化文件系統的掛載工作。如果通過掛載幫助程序,則可以直接指定文件系統ID。

權限控制
在網絡層面,每個掛載目標可以設定一個或多個安全組,即類似於防火牆,可以設定哪些EC2實例有權限訪問該掛載目標從而掛載文件系統。此外,用戶可以使用文件系統策略(File System Policy)和訪問點(Access Point)來進行更細粒度的權限控制。

接下來會以寧夏區爲例介紹如何快速部署一個EFS文件系統並掛載至EC2實例上

1 創建文件系統

1.1 配置網絡訪問

指定EFS文件系統所對應的VPC,及在對應的子網創建掛載目標並設置安全組。

在這裏插入圖片描述

一個文件系統僅對應一個VPC,但其他VPC的EC2實例可以通過VPC Peering打通VPC間的通道後再進行EFS文件系統掛載。
每個可用區建議對應創建一個掛載目標,這樣可以確保不同可用區的EC2實例均可掛載文件系統。如果該可用區中有多個子網,只需要選擇其中一個即可,該可用區下所有子網均可以訪問到對應的掛載目標。
如果後續文件系統需要更換VPC,可以先將掛載目標刪除後再進行更換。
本次演示會使用嚮導所指定的VPC默認安全組,同時後續EC2實例也會掛載該安全組以便與掛載目標進行通信。

1.2 配置文件系統設置

指定EFS文件系統的標籤、生命週期管理策略、與性能相關的模式設置和數據加密等
在這裏插入圖片描述

通過標籤(Tag)可以爲文件系統進行描述

通過生命週期管理策略, EFS可以自動將指定時間(如7或14天或至最長90天)未訪問的數據自動從EFS Standard轉換至EFS IA(Infrequent Access, 不常訪問)。該功能可以簡單的理解爲數據自動的冷熱分層。EFS IA對應的是冷存儲層,相比EFS Standard來說單位存儲成本更低,且不會犧牲可用性、持久性和彈性等EFS的存儲特性。需要注意到除了存儲成本,EFS IA會按照數據訪問量進行收費。簡單來說,對於不常訪問的數據,遷移至IA可以看到明顯的成本優化。通過生命週期管理策略可以自動進行不常訪問的數據的遷移,從而自動進行成本優化而無須人工干預。在這個演示中我們暫時不啓用生命週期管理策略。
在這裏插入圖片描述

吞吐量模式:分爲突增(Bursting)和預置(Provisioned)兩種。在突增模式下,文件系統的吞吐性能隨着存儲容量增加而增長。典型文件系統的負載通常會猛增,在短時間內吞吐量較高,而其餘時間吞吐量較低。因此,突增模式下EFS可在一段時間內突增到高吞吐量。對於存儲容量較小但又需要較高吞吐量的場景,則可以使用預置模式,直接設定EFS文件系統的吞吐量上限。在這個演示我們使用默認的突增模式
性能模式:分爲通用(General Purpose)和最大I/O(Max I/O)兩種。通用模式適合於絕多數的EFS文件系統使用場景,特別是對延時較爲敏感的應用。如果希望有更高的吞吐量和IOPS要求,則可以考慮最大I/O模式,但該模式下元數據的操作延時會相對較高。在這個演示我們使用默認的通用模式。
加密:EFS可以與KMS結合,從而實現對存儲在EFS文件系統內的數據進行加密。在這個演示中我們暫時不開啓加密功能。

1.3 配置客戶端訪問

通過文件系統策略(File System Policies)可以指定NFS客戶端對EFS文件系統所具有的權限, 包括讀寫權限,是否要求傳輸加密等。而訪問點(Access Points)是 EFS文件系統中特定於應用程序的入口點,以管理應用程序對共享數據集的訪問。通過訪問點發出的所有文件系統請求可以被強制執行用戶身份(包括用戶組)。訪問點還可以爲文件系統強制執行不同的根目錄,客戶端只能訪問指定目錄或之下目錄中的數據。
在這裏插入圖片描述

在這個演示中我們暫時不對文件系統權限和訪問點進行配置,僅使用前面配置的安全組來做訪問權限的控制。

1.4 審覈與創建

最後我們檢查一下配置是否正確 ,沒問題的話就可以開始創建文件系統了
在這裏插入圖片描述

文件系統成功創建後,可以在控制檯查看文件系統狀態,掛載目標狀態等信息。注意到此時文件系統還沒有數據寫入,目前的容量顯示只有6KB(文件系統相關元數據的存儲開銷)
在這裏插入圖片描述

2. 掛載文件系統

2.1 部署EC2實例並配置安全組

接下來我們在剛纔創建的文件系統對應的VPC中部署一臺EC2實例,需要關聯EFS文件系統掛載目標所對應的安全組,在這個演示中我們使用了VPC默認的安全組
在這裏插入圖片描述

可以看到這個默認安全組放通所有的流量,但是來源僅限於這個安全組。也就是說只要掛載了這個安全組的EC2實例,就可以與EFS掛載目標進行通信而不受限制。生產環境可以根據實際需要進一步縮小放通的端口範圍等
在這裏插入圖片描述

2.2 安裝EFS掛載幫助程序(Mount Helper)並掛載文件系統

EFS文件系統支持NFS協議,可以直接使用原有的NFS客戶端來進行NFS文件系統掛載。另外EFS也提供了一個掛載幫助程序,以簡化文件系統掛載,同時提供對EFS獨特功能(如IAM認證,TLS傳輸加密和訪問點等)。在文件系統狀態頁面,會有相應的鏈接和說明告訴用戶如何來進行文件系統掛載:

在這裏插入圖片描述

這裏我們以安裝了Amazon Linux 2且類型爲m5.large的EC2實例,演示如何從本地VPC用EFS掛載幫助程序來掛載文件系統:

首先登錄EC2實例,安裝EFS掛載程序:

sudo yum -y install amazon-efs-utils

接着創建掛載點目錄:

sudo mkdir /mnt/efs

然後通過EFS掛載程序進行文件系統掛載

sudo mount -t efs fs-c4f11721:/ /mnt/efs

注意:
目前通過yum安裝的EFS掛載程序對國內區域的文件系統域名處理有問題,會導致掛載文件系統時出現類似如下報錯:

Failed to resolve "fs-c4f11721.efs.cn-northwest-1.amazonaws.com" - check that your file system ID is correct.
See https://docs.aws.amazon.com/console/efs/mount-dns-name for more detail.

目前解決方法是通過下面的命令修改配置文件:

echo -e '\n[mount.cn-north-1]\ndns_name_suffix = 
amazonaws.com.cn\n\n[mount.cn-northwest-1]\ndns_name_suffix = 
amazonaws.com.cn' | sudo tee -a /etc/amazon/efs/efs-utils.conf

再重新進行掛載即可。
該問題已經在最新的efs-utils版本上得到修復,很快新版本會更新至Amazon Linux RPM Repository中,目前用戶也可以從Github上直接下載最新版本的EFS掛載程序以規避該問題,具體可查看參考資料中的相關鏈接

3. 檢查文件系統

至此我們已經完成了文件系統的創建,接下來我們可以進行寫入測試,並檢查文件系統的狀態。
通過dd往EFS文件系統寫入一個20G的文件

sudo time dd if=/dev/zero of=/mnt/efs/20G-dd-$(date +%Y%m%d%H%M%S.%3N) bs=1M count=20480 conv=fsync


20480+0 records in 
20480+0 records out 
21474836480 bytes (21 GB) copied, 203.763 s, 105 MB/s 
0.06user 10.66system 3:23.81elapsed 5%CPU (0avgtext+0avgdata 3040maxresident)k 
0inputs+41943040outputs (0major+340minor)pagefaults 0swaps

可以看到這裏統計的吞吐量是105MB/s。根據EFS官方文檔提到的突增吞吐量的說明,小於1TB的文件系統,均可突增到100MB/s;而對於超過1TB的文件系統,存儲在EFS標準上每1TB數據則可以突增100MB/s。另外需要注意到的是,EFS文件系統的性能實際上與上文提到性能模式、EC2實例網絡帶寬、併發壓力和IO類型等等許多因素都有關,如果需要進行壓力測試,可以查看參考資料裏關於性能的文檔鏈接

此時檢查文件系統狀態,此時可以看到文件系統的實際大小已更新爲20GB:

在這裏插入圖片描述

小結

從這個演示我們可以看到EFS是一個託管的NFS文件服務, 用戶只需要進行簡單的配置就可以快速部署出一個高可用並可無限擴展的NFS文件系統。結合EFS的生命週期管理策略,數據可以實現冷熱分層,從而降低存儲成本。通過文件系統策略和訪問點,用戶還可以實現更爲細粒度的權限控制。相關的技術細節可以參考EFS官方文檔。

現在就開始動手測試起來吧!

參考資料

EFS介紹:https://docs.amazonaws.cn/efs/latest/ug/whatisefs.html
EFS性能詳細文檔:https://docs.amazonaws.cn/efs/latest/ug/performance.html
EFS常見問答: https://aws.amazon.com/cn/efs/faq/
EFS掛載幫助程序Github鏈接:https://github.com/aws/efs-utils
EFS教程: https://github.com/aws-samples/amazon-efs-tutorial/
關於EFS性能測試的博客:https://aws.amazon.com/blogs/storage/how-to-test-drive-amazon-elastic-file-system/
關於EFS IAM認證與訪問點的博客:https://aws.amazon.com/blogs/aws/new-for-amazon-efs-iam-authorization-and-access-points/
關於EFS IA的博客:https://aws.amazon.com/blogs/aws/optimize-storage-cost-with-reduced-pricing-for-amazon-efs-infrequent-access/
本篇作者

林俊
AWS解決方案架構師,主要負責企業客戶的解決方案諮詢與架構設計優化,同時致力於AWS雲存儲及IoT類服務的應用和推廣。

原文鏈接:https://aws.amazon.com/cn/blogs/china/quickly-build-nfs-file-system-with-efs/

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