首頁 > 軟體

Ceph叢集CephFS檔案儲存核心概念及部署使用詳解

2022-10-20 14:01:22

1.CephFS檔案儲存核心概念

1.1.CephFS檔案儲存簡介

官方檔案:docs.ceph.com/en/pacific/…

傳統的檔案儲存通常使用的是NAS儲存,通過NFS協定來實現,NFS型別的檔案儲存可以同時共用給多個使用者端使用,傳輸協定簡單,只要有網路就可以實現。

對於儲存而言,高可用性是必須具備的,一旦儲存宕機,就會影響應用程式的使用,而NAS儲存最典型的缺點就是單點故障。

在Ceph分散式儲存系統中有關於檔案儲存的儲存型別,稱之為CephFS,CephFS是一個符合POSIX的檔案系統,構建在Ceph物件儲存Rados之上,CephFS可以為各種應用程式提供最先進的、多用途、高可用性和高效能的檔案儲存。

CephFS檔案系統至少需要一個MDS(Metadata Server元件)來儲存檔案系統的後設資料資訊,因此在使用CephFS檔案儲存之前,首先要在叢集中部署MDS元件,我們希望CephFS檔案儲存具備高可用性,所以MDS元件一般都會在叢集中部署多個,大多數情況下都是三個MDS元件。

CephFS支援使用者級別和核心級別的掛載使用,可延伸性極高,並且可以同時讓多個Client使用者端進行讀寫。

簡而言之:CephFS檔案儲存就是提供類似NFS服務的共用儲存系統,相當於基於NFS的分散式檔案儲存系統,多個使用者端可以同時去掛載這個檔案儲存系統,並且還可以提供高可靠服務。

1.2.CephFS檔案儲存架構

CephFS檔案系統的核心元件有:

MDS:MDS元件主要用於儲存檔案的後設資料資訊,會單獨存放在一個Pool資源池中。

MDS支援高可用性,預設採用主備模式,也可以設定成多主模式。

Client:使用者端。

RADOS:CephFS也是基於RADOS來實現檔案儲存的,CephFS檔案儲存中的檔案資料與檔案的後設資料都是單獨在不同的Pool資源池中儲存的。

Ceph叢集如果想要實現CephFS檔案儲存,首先需要在叢集中準備MDS元件,MDS元件主要是來儲存檔案儲存中檔案的後設資料資訊,一般會部署三個MDS元件,形成高可用模式,其中一個MDS的Active狀態提供服務,另外兩個都是Standby的狀態,當Active狀態的MDS掛掉後,Standby狀態的MDS之間會就進行選舉,選舉成功的MDS節點就會成為叢集中的Active。

MDS元件會將檔案的後設資料資訊寫在Journal紀錄檔中,最終Journal紀錄檔中的檔案後設資料資訊會寫入到一個Metadata的Pool資源池中,所有的MDS節點都會連線這個Pool資源池,並且MDS各節點之間會交換後設資料資訊,當Active狀態的MDS元件掛掉了,選舉出來的MDS會從Metadata Pool資源池獲取整個叢集中所有檔案的後設資料資訊。

CephFS會將使用者寫入的檔案資料與檔案的後設資料分開存放在不同的Pool資源池中,將資料與後設資料分開儲存。

Client使用者端可以直接在存放資料的Pool資源池中寫入檔案資料,寫入的檔案依舊會被拆分成多個Object物件檔案,這些Object物件檔案寫入到PG中,最後通過CRUSH演演算法儲存在多個OSD中。

1.3.CephFS檔案系統的應用場景與特性

應用場景:

  • 為K8S叢集Pod資源提供持久化儲存。
  • 多個伺服器同時掛載一個檔案系統,同時進行讀寫。

CephFS檔案系統多MDS的優勢及特點:

  • 當後設資料預設的單個MDS成為瓶頸時,設定多個活躍的MDS守護行程,提升叢集效能。
  • 多個活躍的MDS有利於效能提升。
  • 多個活躍的MDS可以實現MDS負載均衡。
  • 多個活躍的MDS可以實現多租戶資源隔離。
  • 它能夠將檔案系統樹分割成子樹,每個子樹可以交給特定的MDS進行權威管理,從而達到了隨著後設資料伺服器數量的增加,叢集效能線性地擴充套件。
  • 每個子樹都是基於後設資料在給定目錄樹中的熱動態建立的。
  • 一旦建立了子樹,它的後設資料就被遷移到一個未載入的MDS。
  • 後續使用者端對先前授權的MDS的請求被轉發。

2.在Ceph叢集中部署MDS元件

 1.在叢集所有節點都安裝mds元件
 yum -y install ceph-mds
 2.將所有的ceph節點都部署mds元件形成高可用叢集
 [root@ceph-node-1 ~]# cd /data/ceph-deploy/
 [root@ceph-node-1 ceph-deploy]# ceph-deploy mds create ceph-node-1 ceph-node-2 ceph-node-3

 3.檢視叢集狀態
 [root@ceph-node-1 ceph-deploy]# ceph -s
   cluster:
     id:     a5ec192a-8d13-4624-b253-5b350a616041
     health: HEALTH_OK
   services:
     mon: 3 daemons, quorum ceph-node-1,ceph-node-2,ceph-node-3 (age 19h)
     mgr: ceph-node-1(active, since 19h), standbys: ceph-node-2, ceph-node-3
     mds:  3 up:standby
     osd: 6 osds: 6 up (since 18h), 6 in (since 18h)
     rgw: 1 daemon active (ceph-node-1)
   task status:
   data:
     pools:   7 pools, 320 pgs
     objects: 252 objects, 161 KiB
     usage:   6.1 GiB used, 54 GiB / 60 GiB avail
     pgs:     320 active+clean

可以看到叢集中已經有3個MDS元件了,但是狀態都處於standby,那是因為叢集中還沒有建立CephFS檔案系統,導致MDS元件無法選舉。

3.在Ceph叢集中建立一個CephFS檔案儲存系統

一個Cephfs檔案儲存系統至少需要兩個Rados資源池,一個資源池用於存放檔案資料,另一個資源池用於存放檔案的後設資料資訊,如果後設資料資源池中的任何資料丟失,都有可能導致整個檔案系統無法存取。

對後設資料資源池建議使用較低延遲的OSD,例如可以使用SSD硬碟的OSD,後設資料資源池的延遲直接會影響在使用者端中檔案系統操作的延遲。

3.1.為CephFS檔案儲存系統建立Pool資源池

建立好這兩個Pool資源池後,只能為一個cephfs檔案儲存系統使用,如果叢集中需要建立多個cephfs檔案系統,則需要建立多個後設資料池和資料池,一個後設資料資源池和資料資源池只能為一個Cephfs檔案系統提供使用。

 1.建立後設資料資源池
 [root@ceph-node-1 ~]# ceph osd pool create cephfs_metadata 16 16
 pool 'cephfs_metadata' created
 2.建立資料資源池
 [root@ceph-node-1 ~]# ceph osd pool create cephfs_data 16 16
 pool 'cephfs_data' created
 3.檢視建立的資源池
 [root@ceph-node-1 ~]# ceph osd lspools
 1 ceph-rbd-data
 2 .rgw.root
 3 default.rgw.control
 4 default.rgw.meta
 5 default.rgw.log
 6 default.rgw.buckets.index
 7 default.rgw.buckets.data
 8 cephfs_metadata
 9 cephfs_data

3.2.建立CephFS檔案系統

命令格式:ceph fs new {cephfs_name} {metadata_pool} {data_pool}

 1.建立cephfs檔案儲存
 [root@ceph-node-1 ~]# ceph fs new cephfs-storage cephfs_metadata cephfs_data
 new fs with metadata pool 8 and data pool 9
 2.檢視建立的cephfs檔案儲存
 [root@ceph-node-1 ~]# ceph fs  ls
 name: cephfs-storage, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
 [root@ceph-node-1 ~]# ceph fs volume ls
 [
     {
         "name": "cephfs-storage"
     }
 ]

3.3.再次觀察Ceph叢集的狀態

 [root@ceph-node-1 ~]# ceph -s
   cluster:
     id:     a5ec192a-8d13-4624-b253-5b350a616041
     health: HEALTH_OK
   services:
     mon: 3 daemons, quorum ceph-node-1,ceph-node-2,ceph-node-3 (age 24h)
     mgr: ceph-node-1(active, since 24h), standbys: ceph-node-2, ceph-node-3
     mds: cephfs-storage:1 {0=ceph-node-1=up:active} 2 up:standby                    #當建立完cephfs檔案系統後,mds元件自動選舉一個mds元件為active狀態,其餘為standby狀態
     osd: 6 osds: 6 up (since 23h), 6 in (since 23h)
     rgw: 1 daemon active (ceph-node-1)
   task status:
   data:
     pools:   9 pools, 352 pgs
     objects: 274 objects, 164 KiB
     usage:   6.1 GiB used, 54 GiB / 60 GiB avail
     pgs:     352 active+clean

4.核心級別掛載CephFS檔案系統

掛載的操作檔案:docs.ceph.com/en/pacific/…

4.1.無需認證的方式掛載CephFS檔案系統

1)在使用者端中建立掛載目錄

 [root@ceph-node-1 ~]# mkdir /cephfs_data

2)使用核心級別掛載Cephfs檔案系統

CephFS系統可以理解為也是一個磁碟,型別是ceph的型別,直接可以通過mount命令進行掛載。

命令格式:mount -t ceph {monitor_addr}:/ /{path} -o name=admin

掛載時最好指定所有monitor元件的地址,否則當有一個monitor元件產生問題,就會影響掛載。

 1.首先確認mount是否支援ceph型別的檔案系統,如果不支援則去安裝ceph-common包
 [root@ceph-node-1 ~]# which mount.ceph
 /usr/sbin/mount.ceph
 2.掛載cephfs檔案系統
 [root@ceph-node-1 ~]# mount -t ceph 192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/ /cephfs_data/ -o name=admin
 #這個admin使用者是ceph叢集預設的使用者,不需要指定secret key
 3.檢視是否掛載成功
 [root@ceph-node-1 ~]# df -hT /cephfs_data/
 檔案系統                                                   型別  容量  已用  可用 已用% 掛載點
 192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/ ceph   17G     0   17G    0% /cephfs_data
 4.此時就可以在掛載目錄中寫入資料了。

4.2.使用認證方式掛載CephFS檔案系統

1.獲取admin使用者的Key

 [root@ceph-node-1 ~]# cat /etc/ceph/ceph.client.admin.keyring 
 [client.admin]
     key = AQBIWUhiEmaFOBAA6Jr6itUeHiLVVOeYFVpRog==
     caps mds = "allow *"
     caps mgr = "allow *"
     caps mon = "allow *"
     caps osd = "allow *"

2.通過認證方式掛載CephFS檔案系統

[root@ceph-node-1 ~]# mount -t ceph 192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/ /cephfs_data/ -o name=admin,secret=AQBIWUhiEmaFOBAA6Jr6itUeHiLVVOeYFVpRog==

3.檢視是否掛載成功

[root@ceph-node-1 ~]# df -hT /cephfs_data/
檔案系統                                                   型別  容量  已用  可用 已用% 掛載點
192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/ ceph   17G     0   17G    0% /cephfs_data

4.設定開機自動掛載

[root@ceph-node-1 ~]# vim /etc/fstab 
192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/      /cephfs_data    ceph    name=admin,secret=AQBIWUhiEmaFOBAA6Jr6itUeHiLVVOeYFVpRog== 0 0

也可以將使用者的Key寫入到一個檔案中,然後參照這個檔案,如下所示:

1.將key寫入到一個檔案中
[root@ceph-node-1 ~]# ceph-authtool -p /etc/ceph/ceph.client.admin.keyring > admin.key
[root@ceph-node-1 ~]# chmod 600 admin.key 
2.掛載時參照這個Key檔案
[root@ceph-node-1 ~]# mount -t ceph 192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/ /cephfs_data/ -o name=admin,secretfile=/root/admin.key
3.開機自動掛載
192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/      /cephfs_data    ceph    name=admin,secretfile=/root/admin.key 0 0

5.使用者空間掛載CephFS檔案系統

1.安裝ceph-fuse使用者端
[root@ceph-node-1 ~]# yum -y install ceph-fuse
2.建立掛載點
[root@ceph-node-1 ~]# mkdir /cephfuse-data
3.使用fuse掛載
[root@ceph-node-1 ~]# ceph-fuse -n client.admin -m 192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789 /cephfuse-data/
2022-04-03 23:37:18.794 7f5574ca7f80 -1 init, newargv = 0x5615fadddb50 newargc=9ceph-fuse[31903]: starting ceph client
ceph-fuse[31903]: starting fuse
4.檢視掛載的檔案系統
ceph-fuse[31903]: starting fuse
[root@ceph-node-1 ~]# df -HT /cephfuse-data/
檔案系統       型別            容量  已用  可用 已用% 掛載點
ceph-fuse      fuse.ceph-fuse   19G     0   19G    0% /cephfuse-data

6.檢視CephFS的狀態

[root@ceph-node-1 ~]# ceph fs status cephfs-storage

以上就是Ceph叢集CephFS檔案儲存核心概念及部署使用詳解的詳細內容,更多關於Ceph CephFS檔案儲存部署的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com