CEPH-3:cephfs功能詳解


ceph集群cephfs使用詳解

一個完整的ceph集群,可以提供塊存儲、文件系統和對象存儲。

本節主要介紹文件系統cephfs功能如何靈活的使用,集群背景:

$ 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工作流程

  1. 創建cephfs時會指定兩個存儲池,一個專門來存儲元數據,一個專門來存儲實際文件;
  2. 客戶端在寫(讀)文件時,首先寫(讀)mds服務緩存中文件的元數據信息,當然保存在mds的元數據最終還是要落盤到osd pool中的;
  3. mds和rados之間通過journal metadate交互,這個journal是記錄文件寫入日志的,這個也是存放到OSD當中;
  4. 最終客戶端得到元數據信息,獲取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/

cephfs功能介紹就到此為止了,后續會繼續介紹ceph對象存儲的具體使用,及mds如何實現雙主雙備高可用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM