跳至內容跳至頁面導覽:上一頁 [access key p]/下一頁 [access key n]
documentation.suse.com / SUSE Enterprise Storage 7.1 文件 / 管理和操作指南 / 存取叢集資料 / 叢集檔案系統
適用範圍 SUSE Enterprise Storage 7.1

23 叢集檔案系統

本章介紹通常應在完成叢集設定與輸出 CephFS 後執行的管理任務。如需有關設定 CephFS 的詳細資訊,請參閱第 8.3.3 節 「部署中繼資料伺服器」

23.1 掛接 CephFS

建立檔案系統後,如果 MDS 處於使用中狀態,您便可以從用戶端主機掛接檔案系統。

23.1.1 準備用戶端

如果用戶端主機執行的是 SUSE Linux Enterprise 12 SP2 或更新版本,系統無需額外設定即可掛接 CephFS。

如果用戶端主機執行的是 SUSE Linux Enterprise 12 SP1,您需要套用所有最新的修補程式,才能掛接 CephFS。

無論是哪一種情況,SUSE Linux Enterprise 中都包含了掛接 CephFS 需要的所有項目。不需要 SUSE Enterprise Storage 7.1 產品。

若要支援完整的 mount 語法,在嘗試裝載 CephFS 之前,應該先安裝 ceph-common 套件 (隨附於 SUSE Linux Enterprise 中)。

重要
重要

如果不安裝 ceph-common 套件 (因而也就未安裝 mount.ceph 輔助程式),將需要使用監控程式的 IP 而非其名稱。因為核心用戶端將無法執行名稱解析。

基本掛接語法如下:

# mount -t ceph MON1_IP[:PORT],MON2_IP[:PORT],...:CEPHFS_MOUNT_TARGET \
MOUNT_POINT -o name=CEPHX_USER_NAME,secret=SECRET_STRING

23.1.2 建立機密金鑰檔案

Ceph 叢集執行時預設會開啟驗證功能。您應該建立一個可用於儲存您的機密金鑰 (不是金鑰圈自身) 的檔案。請執行以下操作,以獲取特定使用者的機密金鑰並建立該檔案:

程序 23.1︰ 建立機密金鑰
  1. 在金鑰圈檔案中檢視特定使用者的金鑰:

    cephuser@adm > cat /etc/ceph/ceph.client.admin.keyring
  2. 複製要使用所掛接 Ceph FS 檔案系統的使用者的金鑰。金鑰的格式通常類似下方所示:

    AQCj2YpRiAe6CxAA7/ETt7Hcl9IyxyYciVs47w==
  3. 為使用者 admin 建立一個檔案名稱包含使用者名稱的檔案,例如 /etc/ceph/admin.secret

  4. 將金鑰值貼至上一步中建立的檔案中。

  5. 設定對該檔案的適當存取權限。該使用者應該是唯一有權讀取該檔案的使用者,其他人不能有任何存取權限。

23.1.3 掛接 CephFS

可以使用 mount 指令掛接 CephFS。您需要指定監控程式的主機名稱或 IP 位址。由於 SUSE Enterprise Storage 中預設會啟用 cephx 驗證,因此,您還需要指定一個使用者名稱及其相關的機密:

# mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \
 -o name=admin,secret=AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==

由於上一個指令會保留在外圍程序歷程中,因此更安全的做法是從檔案讀取機密:

# mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \
 -o name=admin,secretfile=/etc/ceph/admin.secret

請注意,機密檔案應該僅包含實際的金鑰圈機密。因此,在本範例中,該檔案僅包含下行:

AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==
提示
提示:指定多個監控程式

最好能在 mount 指令行中指定多個監控程式並以逗號分隔,以避免某個監控程式在掛接時剛好發生停機的情況。每個監控程式的位址採用主機[:連接埠] 格式。如果未指定連接埠,預設會使用連接埠 6789。

在本地主機上建立掛接點:

# mkdir /mnt/cephfs

掛接 CephFS:

# mount -t ceph ceph_mon1:6789:/ /mnt/cephfs \
 -o name=admin,secretfile=/etc/ceph/admin.secret

如果要掛接檔案系統的某個子集,可以指定子目錄 subdir

# mount -t ceph ceph_mon1:6789:/subdir /mnt/cephfs \
 -o name=admin,secretfile=/etc/ceph/admin.secret

可在 mount 指令中指定多個監控程式主機:

# mount -t ceph ceph_mon1,ceph_mon2,ceph_mon3:6789:/ /mnt/cephfs \
 -o name=admin,secretfile=/etc/ceph/admin.secret
重要
重要:對根目錄的讀取存取權

如果使用實施了路徑限制的用戶端,則 MDS 功能需要包含對根目錄的讀取存取權。例如,金鑰圈的格式可能如下所示:

client.bar
 key: supersecretkey
 caps: [mds] allow rw path=/barjail, allow r path=/
 caps: [mon] allow r
 caps: [osd] allow rwx

allow r path=/ 部分表示路徑受限的用戶端能夠查看根磁碟區,但無法寫入資料至其中。在要求完全隔離的使用情況下,這可能會造成問題。

23.2 卸載 CephFS

若要卸載 CephFS,請使用 umount 指令:

# umount /mnt/cephfs

23.3 /etc/fstab 中掛接 CephFS

若要在用戶端啟動時自動掛接 CephFS,請在其檔案系統表 /etc/fstab 中插入相應的行:

mon1:6790,mon2:/subdir /mnt/cephfs ceph name=admin,secretfile=/etc/ceph/secret.key,noatime,_netdev 0 2

23.4 多個使用中 MDS 精靈 (主動/主動 MDS)

依預設,CephFS 是針對單個使用中 MDS 精靈設定的。若要調整大規模系統的中繼資料效能,您可以啟用多個使用中 MDS 精靈,以便互相分擔中繼資料工作負載。

23.4.1 使用主動/主動 MDS

如果依預設設定使用單個 MDS 時中繼資料效能出現瓶頸,可考慮使用多個使用中 MDS 精靈。

增加精靈數量並不會提高所有工作負載類型的效能。例如,增加 MDS 精靈的數量不會讓單個用戶端上執行的單個應用程式受益,除非該應用程式在同時執行大量中繼資料操作。

一般而言,能夠因大量使用中 MDS 精靈受益的工作負載是使用許多用戶端的工作負載,也許是在許多獨立目錄中運作的工作負載。

23.4.2 增加 MDS 使用中叢集的大小

每個 CephFS 檔案系統都有一項 max_mds 設定,用於控制將要建立的階層數。僅當某個備用精靈可用於承擔新階層時,檔案系統中的實際階層數才會增加。例如,如果只有執行一個 MDS 精靈,而 max_mds 設定為兩個,則將不會建立另一個階層。

在下面的範例中,我們將 max_mds 選項設定為 2,以便在保留預設階層的情況下再建立一個新階層。若要查看變更,請在設定 max_mds 之前和之後執行 ceph status,然後觀察包含 fsmap 的行:

cephuser@adm > ceph status
  [...]
  services:
    [...]
    mds: cephfs-1/1/1 up  {0=node2=up:active}, 1 up:standby
    [...]
cephuser@adm > ceph fs set cephfs max_mds 2
cephuser@adm > ceph status
  [...]
  services:
    [...]
    mds: cephfs-2/2/2 up  {0=node2=up:active,1=node1=up:active}
    [...]

新建立的階層 (1) 會經歷「正在建立」狀態,然後進入「使用中」狀態。

重要
重要:待命精靈

即使具有多個使用中 MDS 精靈,當任何在執行使用中精靈的伺服器發生故障時,高可用性系統也仍會要求待命精靈接管工作。

因此,高可用性系統的 max_mds 合理最大值比系統中的 MDS 伺服器總數小 1。若要在發生多次伺服器故障時保持可用性,可增加系統中待命精靈的數量,使之與不會導致失去可用性的伺服器故障數相符。

23.4.3 減小階層數

所有階層 (包括要移除的階層) 首先必須是使用中的。這表示至少需要有 max_mds 個 MDS 精靈可用。

首先,將 max_mds 設為一個較小的數字。例如,我們重新使用單個使用中 MDS:

cephuser@adm > ceph status
  [...]
  services:
    [...]
    mds: cephfs-2/2/2 up  {0=node2=up:active,1=node1=up:active}
    [...]
cephuser@adm > ceph fs set cephfs max_mds 1
cephuser@adm > ceph status
  [...]
  services:
    [...]
    mds: cephfs-1/1/1 up  {0=node2=up:active}, 1 up:standby
    [...]

23.4.4 手動將目錄樹關聯到階層

在多個使用中中繼資料伺服器組態中,將會執行一個平衡器,用於在叢集中均衡分配中繼資料負載。這種模式通常足以符合大多數使用者的需求,但有時,使用者需要使用中繼資料到特定階層的明確對應來覆寫動態平衡器。這樣,管理員或使用者便可以在整個叢集上均衡地分攤應用程式負載,或限制使用者的中繼資料要求對整個叢集的影響。

針對此目的提供的機制稱為「輸出關聯」。它是目錄的延伸屬性。此延伸屬性名為 ceph.dir.pin。使用者可以使用標準指令來設定此屬性:

# setfattr -n ceph.dir.pin -v 2 /path/to/dir

延伸屬性的值 (-v) 是要將目錄子樹指定到的階層。預設值 -1 表示不關聯該目錄。

目錄輸出關聯從設定了輸出關聯的最近的父級繼承。因此,對某個目錄設定輸出關聯會影響該目錄的所有子項。但是,可以透過設定子目錄輸出關聯來覆寫父級的關聯。例如:

# mkdir -p a/b                      # "a" and "a/b" start with no export pin set.
setfattr -n ceph.dir.pin -v 1 a/  # "a" and "b" are now pinned to rank 1.
setfattr -n ceph.dir.pin -v 0 a/b # "a/b" is now pinned to rank 0
                                  # and "a/" and the rest of its children
                                  # are still pinned to rank 1.

23.5 管理容錯移轉

如果 MDS 精靈停止與監控程式通訊,監控程式會等待 mds_beacon_grace 秒 (預設為 15 秒),然後將精靈標示為 laggy。可以設定一或多個「待命」精靈,用於在 MDS 精靈容錯移轉期間接管工作。

23.5.1 設定待命重播

可以設定每個 CephFS 檔案系統,以新增待命重播精靈。這些待命精靈會追蹤使用中 MDS 的中繼資料記錄,以減少使用中 MDS 變為無法使用時的容錯移轉時間。每個使用中 MDS 只能有一個追隨它的待命重播精靈。

您可以使用以下指令在檔案系統上設定待命重播:

cephuser@adm > ceph fs set FS-NAME allow_standby_replay BOOL

設定待命重播後,監控程式將會指定該檔案系統中可用於追隨使用中 MDS 的待命精靈。

當某個 MDS 進入待命重播狀態後,將只用做其所追隨階層的待命精靈。如果另一個階層發生故障,系統不會使用此待命重播精靈來取代前者,即使沒有其他可用的待命精靈也是如此。因此,如果使用了待命重播,則建議每個使用中 MDS 都應有一個待命重播精靈。

23.6 設定 CephFS 定額

您可以對 Ceph 檔案系統的任何子目錄設定定額。定額可限制目錄階層中指定點下所儲存的位元組檔案數。

23.6.1 CephFS 定額限制

CephFS 的定額設定具有以下限制:

定額是合作性而非競爭性的。

達到限制時,Ceph 定額依賴於掛接檔案系統的用戶端來停止向其寫入資料。伺服器端無法阻止惡意用戶端寫入所需數量的資料。在用戶端完全不受信任的環境中,請勿使用定額來阻止填入檔案系統。

定額並不精確。

在達到定額限制不久後,系統便會停止向檔案系統寫入資料的程序。這樣便會不可避免地允許這些程序在超出設定的限制後又寫入一定數量的資料。系統將會在超出所設定限制後的十分之一秒內停止用戶端寫入程序。

自 4.17 版本起,即在核心用戶端中實作了定額。

定額受使用者空間用戶端 (libcephfs、ceph-fuse) 支援。4.17 及更新版本的 Linux 核心用戶端支援 SUSE Enterprise Storage 7.1 叢集上的 CephFS 定額。核心用戶端 (甚至最近的版本) 無法處理較舊叢集的定額,即使它們可以設定定額延伸屬性也是如此。SLE12-SP3 (及更新版本) 核心永遠包含所需的向後移植能力,以處理定額。

與基於路徑的掛接限制配合使用時,需謹慎設定定額。

用戶端需要有權存取設定了定額的目錄 Inode,才能強制執行這些定額。如果依據 MDS 功能,用戶端對特定路徑 (例如 /home/user) 的存取受到限制,並且對其無權存取的上階目錄 (/home) 設定了定額,則用戶端將無法強制執行該定額。使用基於路徑的存取限制時,請務必對用戶端可以存取的目錄 (例如 /home/user/home/user/quota_dir) 設定定額。

23.6.2 設定 CephFS 定額

您可以使用虛擬延伸屬性來設定 CephFS 定額:

ceph.quota.max_files

設定檔案限制。

ceph.quota.max_bytes

設定位元組限制。

如果某個目錄 Inode 存在這些屬性,即表示對該位置設定了定額。如果不存在,則表示未對該目錄設定定額 (即使可能對父目錄設定了定額)。

若要設定 100 MB 的定額,請執行以下指令:

cephuser@mds > setfattr -n ceph.quota.max_bytes -v 100000000 /SOME/DIRECTORY

若要設定 10,000 個檔案的定額,請執行以下指令:

cephuser@mds > setfattr -n ceph.quota.max_files -v 10000 /SOME/DIRECTORY

若要檢視定額設定,請執行以下指令:

cephuser@mds > getfattr -n ceph.quota.max_bytes /SOME/DIRECTORY
cephuser@mds > getfattr -n ceph.quota.max_files /SOME/DIRECTORY
注意
注意:未設定定額

如果延伸屬性的值為「0」,則表示未設定定額。

若要移除定額,請執行以下指令:

cephuser@mds > setfattr -n ceph.quota.max_bytes -v 0 /SOME/DIRECTORY
cephuser@mds > setfattr -n ceph.quota.max_files -v 0 /SOME/DIRECTORY

23.7 管理 CephFS 快照

在建立 CephFS 快照時,快照會建立此時間點檔案系統的唯讀檢視。您可以在任何目錄中建立快照。快照將涵蓋檔案系統中指定目錄下的所有資料。建立快照後,系統會從各用戶端非同步衝洗緩衝區資料。因此,建立快照的速度十分快。

重要
重要:多個檔案系統

如果您有多個 CephFS 檔案系統在共用一個池 (透過名稱空間),則這些檔案系統的快照將會發生衝突,並且刪除其中一個快照將會導致共用同一個池的其他快照遺失檔案資料。

23.7.1 建立快照

對於新檔案系統,系統預設會啟用 CephFS 快照功能。若要對現有檔案系統啟用該功能,請執行以下指令:

cephuser@adm > ceph fs set CEPHFS_NAME allow_new_snaps true

啟用快照後,CephFS 中的所有目錄都將包含一個特殊的 .snap 子目錄。

注意
注意

這是個虛擬子目錄。它不會出現在父目錄的目錄清單中,但您不能使用 .snap 名稱做為檔案或目錄名稱。若要存取 .snap 目錄,需要採用明確存取方式,例如:

> ls -la /CEPHFS_MOUNT/.snap/
重要
重要:核心用戶端限制

CephFS 核心用戶端有一個限制:一旦檔案系統中所含快照數量超過 400 個,它們將無法處理。快照的數量應永遠低於此上限,無論使用哪個用戶端均如此。如果使用較舊的 CephFS 用戶端 (例如 SLE12-SP3),請記住,快照數量超過 400 個對運作十分有害,因為這會導致用戶端當機。

提示
提示:自訂快照子目錄名稱

您可以透過進行 client snapdir 設定來為快照子目錄設定其他名稱。

若要建立快照,請以自訂名稱在 .snap 目錄下建立子目錄。例如,若要建立目錄 /CEPHFS_MOUNT/2/3/ 的快照,請執行以下指令:

> mkdir /CEPHFS_MOUNT/2/3/.snap/CUSTOM_SNAPSHOT_NAME

23.7.2 刪除快照

若要刪除某個快照,請在 .snap 目錄中刪除該快照的子目錄:

> rmdir /CEPHFS_MOUNT/2/3/.snap/CUSTOM_SNAPSHOT_NAME