ceph叢集cephfs使用詳解
一個完整的ceph叢集,可以提供塊儲存、檔案系統和物件儲存。
本節主要介紹檔案系統cephfs功能如何靈活的使用,叢集背景:
[cephadmin@yq01-aip-aikefu10.yq01.baidu.com ~]$ ceph -s
cluster:
id: f0a8789e-6d53-44fa-b76d-efa79bbebbcf
health: HEALTH_OK
services:
mon: 1 daemons, quorum a (age 24h)
mgr: a(active, since 14h)
mds: cephfs:1 {0=cephfs-a=up:active} 1 up:standby-replay
osd: 1 osds: 1 up (since 24h), 1 in (since 26h)
rgw: 1 daemon active (my.store.a)
data:
pools: 10 pools, 200 pgs
objects: 719 objects, 1.3 GiB
usage: 54 GiB used, 804 GiB / 858 GiB avail
pgs: 200 active+clean
io:
client: 852 B/s rd, 1 op/s rd, 0 op/s wr
cephfs檔案系統介紹
cephfs介紹
cephfs即ceph filesystem,是一個基於ceph叢集且相容POSIX標準的檔案共享系統,建立cephfs檔案系統時需要在ceph叢集中新增mds服務。cephfs支援以核心模組方式載入也支援fuse方式載入。無論是核心模式還是fuse模式,都是通過呼叫libcephfs庫來實現cephfs檔案系統的載入。
fuse使用者態和kernel核心態兩種掛載cephfs的優劣式:
- fuse 客戶端最容易與伺服器做到程式碼級的同步,但是核心客戶端的效能通常更好。
- 這兩種客戶端不一定會提供一樣的功能,如 fuse 客戶端可支援客戶端強制配額,但核心客戶端卻不支援。
- 遇到缺陷或效能問題時,最好試試另一個客戶端,以甄別此缺陷是否特定於客戶端
mds元件介紹
mds是該服務負責處理POSIX檔案系統中的metadata部分,實際的資料部分交由ceph叢集中的OSD處理,mds提供了一個帶智慧快取層的共享型連續檔案系統,可以大大減少 OSD 讀寫操作頻率。
cephfs後設資料使用的動態子樹分割槽,把後設資料劃分名稱空間下對應到不同的mds,寫入後設資料的時候將後設資料按照名稱儲存到不同主mds上,類似於nginx中的快取目錄分層。
cephfs工作流程
- 建立cephfs時會指定兩個儲存池,一個專門來儲存後設資料,一個專門來儲存實際檔案;
- 客戶端在寫(讀)檔案時,首先寫(讀)mds服務快取中檔案的後設資料資訊,當然儲存在mds的後設資料最終還是要落盤到osd pool中的;
- mds和rados之間通過journal metadate互動,這個journal是記錄檔案寫入日誌的,這個也是存放到OSD當中;
- 最終客戶端得到後設資料資訊,獲取rados對某個檔案的IO操作,實現檔案讀寫。
cephfs狀態檢視
$ ceph fs status
cephfs - 0 clients
======
+------+----------------+----------+---------------+-------+-------+
| Rank | State | MDS | Activity | dns | inos |
+------+----------------+----------+---------------+-------+-------+
| 0 | active | cephfs-a | Reqs: 0 /s | 30 | 25 |
| 0-s | standby-replay | cephfs-b | Evts: 0 /s | 24 | 17 |
+------+----------------+----------+---------------+-------+-------+
+-----------------+----------+-------+-------+
| Pool | type | used | avail |
+-----------------+----------+-------+-------+
| cephfs-metadata | metadata | 289k | 760G |
| cephfs-data0 | data | 805 | 760G |
+-----------------+----------+-------+-------+
+-------------+
| Standby MDS |
+-------------+
+-------------+
$ ceph mds stat
cephfs:1 {0=cephfs-a=up:active} 1 up:standby-replay
cephfs使用演示
cephfs安裝步驟已經通過上節部署文件中演示過,此處不再贅述,僅介紹本次演示所涉及到的pool名稱:
$ ceph fs ls
name: cephfs, metadata pool: cephfs-metadata, data pools: [cephfs-data0 ]
$ ceph osd lspools
cephfs-metadata #用來存放mds資料
cephfs-data0 #用來存放data資料
先通過第一種方法:以核心模組方式掛載(一般都用此種方式)
首先要確認核心模組是否載入
# lsmod | grep ceph
ceph 363016 0
libceph 306750 2 rbd,ceph
dns_resolver 13140 1 libceph
libcrc32c 12644 4 xfs,libceph,nf_nat,nf_conntrack
先建立用來專門掛載的ceph使用者
## 建立 client.mfan 使用者,並授權可讀 MON、可讀寫mds 和 可讀寫執行名稱cephfs-data0的OSD
$ ceph auth add client.mfan mon 'allow r' mds 'allow rw' osd 'allow rwx pool=cephfs-data0'
added key for client.mfan
## 輸出金鑰
$ ceph auth get client.mfan -o /etc/ceph/ceph.client.mfan.keyring
exported keyring for client.mfan
## 測試訪問叢集
$ ceph -s --user mfan
cluster:
id: f0a8789e-6d53-44fa-b76d-efa79bbebbcf
health: HEALTH_OK
services:
mon: 1 daemons, quorum a (age 42h)
mgr: a(active, since 33h)
mds: cephfs:1 {0=cephfs-a=up:active} 1 up:standby-replay
osd: 1 osds: 1 up (since 42h), 1 in (since 44h)
rgw: 1 daemon active (my.store.a)
data:
pools: 10 pools, 200 pgs
objects: 719 objects, 1.3 GiB
usage: 55 GiB used, 803 GiB / 858 GiB avail
pgs: 200 active+clean
io:
client: 852 B/s rd, 1 op/s rd, 0 op/s wr
獲取使用者名稱和金鑰
$ ceph auth get client.mfan
exported keyring for client.mfan
[client.mfan]
key = AQD600NibhPBJxAAzKeTOcQ17xaPhEdZ8npehg==
caps mds = "allow rw"
caps mon = "allow r"
caps osd = "allow rwx pool=cephfs-data0"
命令列掛載cephfs,有兩種方式:
第一種:
## 掛載
# mount -t ceph 10.153.204.13:6789:/ /home/cephfs-data/ -o name=mfan,secret=AQD600NibhPBJxAAzKeTOcQ17xaPhEdZ8npehg==
引數說明:
-o:指定掛載引數
name:認證使用者
secret:使用者金鑰
# df -h | grep 'ceph-data'
10.153.204.13:6789:/ 760G 0 760G 0% /home/cephfs-data
我這裡只有一臺mon,如果多臺mon,可以並寫如:10.153.204.13:6789,10.153.204.14:6789,10.153.204.15:6789:/
第二種:
## 建立使用者secret檔案
# ceph auth get-key client.mfan > /etc/ceph/mvfan.secret
## 使用secret檔案掛載
# mount -t ceph 10.153.204.13:6789:/ /home/cephfs-data2/ -o name=mfan,secretfile=/etc/ceph/mvfan.secret
測試讀寫
## 測試寫
# dd if=/dev/zero of=/home/ceph-data/test.dbf bs=8k count=200000 conv=fdatasync
200000+0 records in
200000+0 records out
1638400000 bytes (1.6 GB) copied, 4.93594 s, 332 MB/s
## 測試讀
# dd if=/home/ceph-data/test.dbf of=/dev/null bs=4k count=100000000
400000+0 records in
400000+0 records out
1638400000 bytes (1.6 GB) copied, 1.18977 s, 1.4 GB/s
加入fstab中
echo "10.153.204.13:6789:/ /home/ceph-data ceph \
name=mfan,secret=AQD600NibhPBJxAAzKeTOcQ17xaPhEdZ8npehg==,_netdev,noatime 0 0" >> /etc/fstab
_netdev: 檔案系統居於需要網路連線的裝置上,系統聯網時才掛載
noatime: 不更新檔案系統的inode存取時間
再通過第二種方法:以fuse方式方式掛載
需要先安裝ceph-fuse包
yum install -y ceph-fuse
執行掛載
# ceph-fuse -m 10.153.204.13:6789 /home/cephfs-data
ceph-fuse[9511]: starting ceph client2022-03-30T17:25:00.938+0800 7fc7431f7f80 -1 init, newargv = 0x55d4924a7b60 newargc=9
ceph-fuse[9511]: starting fuse
# ps -ef | grep fuse
root 9511 1 0 17:25 pts/1 00:00:00 ceph-fuse -m 10.153.204.13:6789 /home/cephfs-data
# df -Th | grep cephfs-data
ceph-fuse fuse.ceph-fuse 759G 2.2G 757G 1% /home/cephfs-data
解除安裝命令
fusermount -u /home/cephfs-data/