6.Ceph 基礎篇 - CephFS 文件系統


文章轉載自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485294&idx=1&sn=e9039504a93382a232b9274b49ccb538&chksm=e9fdd29ade8a5b8c4fb19f1c249ab40ac553dd9737c25ff874f43275a86751070069b7232cf5&scene=178&cur_album_id=1600845417376776197#rd

CephFS 文件系統

官網地址:https://docs.ceph.com/en/latest/cephfs/

概念

The Ceph File System, or CephFS, is a POSIX-compliant file system built on top of Ceph’s distributed object store, RADOS. CephFS endeavors to provide a state-of-the-art, multi-use, highly available, and performant file store for a variety of applications, including traditional use-cases like shared home directories, HPC scratch space, and distributed workflow shared storage.

Ceph 文件系統或 CephFS 是一個兼容 POSIX 的文件系統,它構建在 Ceph 的分布式對象存儲 RADOS 之上。CephFS 致力於為各種應用程序提供最新,多用途,高可用性和高性能的文件存儲,包括傳統用例(如共享主目錄,HPC 暫存空間和分布式工作流共享存儲)。

CephFS achieves these goals through the use of some novel architectural choices. Notably, file metadata is stored in a separate RADOS pool from file data and served via a resizable cluster of Metadata Servers, or MDS, which may scale to support higher throughput metadata workloads. Clients of the file system have direct access to RADOS for reading and writing file data blocks. For this reason, workloads may linearly scale with the size of the underlying RADOS object store; that is, there is no gateway or broker mediating data I/O for clients.

CephFS 實現這些目標,它是通過使用一些新穎的架構選擇。 尤其是,文件元數據與文件數據存儲在單獨的 RADOS 池中(從數據中分離元數據),並通過可調整大小的元數據服務器或 MDS 集群提供服務,該集群可擴展以支持更高吞吐量的元數據工作負載。文件系統的客戶端可以直接訪問 RADOS 來讀寫文件數據塊。因此,工作負載可能會隨着基礎 RADOS 對象存儲的大小線性擴展。也就是說,沒有網關或代理為客戶端中介數據I / O。

Access to data is coordinated through the cluster of MDS which serve as authorities for the state of the distributed metadata cache cooperatively maintained by clients and MDS. Mutations to metadata are aggregated by each MDS into a series of efficient writes to a journal on RADOS; no metadata state is stored locally by the MDS. This model allows for coherent and rapid collaboration between clients within the context of a POSIX file system.

通過集群中 MDS 協調對數據的訪問,該集群充當由客戶端和 MDS 協作維護的分布式元數據緩存狀態的授權機構。每個 MDS 都會將對元數據的突變匯總為對 RADOS 上日記的一系列有效寫入。MDS 不會在本地存儲任何元數據狀態。此模型允許在 POSIX 文件系統的上下文中客戶端之間進行連貫且快速的協作。

MDS:即 Metadata Servers,它主要存儲的是文件的元數據信息,為了高可靠,通常MDS會部署一個集群,一個 Active,多個 Standby。它是如何保證高可靠性呢?它是把文件的元數據信息通過日志的形式寫在 Metadata Pool 里面去;MDS 之間會對元數據信息進行交換,一個主的 Active MDS 宕機了,會有另外的 Standby MAD 來接管它,並且變為 Active MDS,因為數據都是寫到 Metadata Pool 里面的,所以剛剛變化 Active MDS 擁有整個集群的元數據信息。

CephFS 客戶端是直接向 Data Pool 池里面寫數據的,Data Pool 與 Metadata Pool 都是直接構建在 RADOS 上面。

CephFS is the subject of numerous academic papers for its novel designs and contributions to file system research. It is the oldest storage interface in Ceph and was once the primary use-case for RADOS. Now it is joined by two other storage interfaces to form a modern unified storage system: RBD (Ceph Block Devices) and RGW (Ceph Object Storage Gateway).

CephFS 成為很多學術論文的主題,因其新穎的設計和對文件系統的研究貢獻,它是最老的存儲接口在Ceph集群中,並且還是曾經 RADOS 的主要用例。 現在,它與另外兩個存儲接口結合在一起,形成了一個現代化的統一存儲系統:RBD(Ceph塊設備)和RGW(Ceph對象存儲網關)。

功能

  • POSIX-compliant semantics 兼容 POSIX 語法
  • Separates metadata from data 從數據中分離元數據
  • Dynamic rebalancing 動態再平衡
  • Subdirectory snapshots 子目錄快照
  • Configurable striping 可配置條帶化
  • Kernel driver support 內核驅動程序支持
  • FUSE support FUSE 支持
  • NFS/CIFS deployable 可部署NFS / CIFS
  • Use with Hadoop (replace HDFS) 與Hadoop一起使用(替換HDFS)

CephFS工作模型

MDS是CephFS文件系統的唯一入口,MDS進程掛掉后,CephFS無法使用,所以MDS需要做冗余,所以我們部署多個MDS進程對元數據分區進行冗余,這幾個MDS都是活躍的,所以叫做多主MDS冗余,其中有一個負責根文件系統的MDS,其它MDS只負責一個子樹的解析,一般熱點子樹就會動態分裂,動態子樹分區機制;這樣一個每一個活動MDS都有可能成為單點,所以我們需要為其提供冗余或者公共冗余都可以;

MDS 集群創建

部署 mds

[root@ceph-node01 ceph-deploy]# ceph-deploy mds create ceph-node01 ceph-node02 ceph-node03

狀態查看

[root@ceph-node01 ceph-deploy]# ceph -s
  cluster:
    id: cc10b0cb-476f-420c-b1d6-e48c1dc929af
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum ceph-node01,ceph-node02,ceph-node03 (age 24h)
    mgr: ceph-node01(active, since 11d), standbys: ceph-node03, ceph-node02
    mds: 3 up:standby
    osd: 7 osds: 7 up (since 24h), 7 in (since 5d)
    rgw: 2 daemons active (ceph-node01, ceph-node02)

  task status:

  data:
    pools: 7 pools, 224 pgs
    objects: 2.82k objects, 9.4 GiB
    usage: 35 GiB used, 765 GiB / 800 GiB avail
    pgs: 224 active+clean

[root@ceph-node01 ceph-deploy]#

mds: 3 up:standby ,三個 mds 都處於 standby 狀態,這是因為我們還沒有創建 mds 相關的文件系統。

[root@ceph-node01 ceph-deploy]# ceph mds stat
 3 up:standby
[root@ceph-node01 ceph-deploy]# ceph fs ls
No filesystems enabled
[root@ceph-node01 ceph-deploy]#

創建文件系統

在使用 CephFS 文件系統中,metadata 是比較耗費資源的,它需要訪問資源的速度是非常快的,最好使用 SSD 的 OSD 進行 Pool 池進行構建。

# 1. 創建元數據使用的 pool 池
[root@ceph-node01 ceph-deploy]# ceph osd pool create cephfs_metadata 16 16
pool 'cephfs_metadata' created

# 2. 創建數據使用的 pool 池
[root@ceph-node01 ceph-deploy]# ceph osd pool create cephfs_data 16 16
pool 'cephfs_data' created

# 3. 創建文件系統,關聯元數據與數據
[root@ceph-node01 ceph-deploy]# ceph fs new cephfs-demo cephfs_metadata cephfs_data
new fs with metadata pool 9 and data pool 10

# 4. 查看fs文件系統
[root@ceph-node01 ceph-deploy]# ceph fs ls
name: cephfs-demo, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

# 5. 查看mds 狀態
[root@ceph-node01 ceph-deploy]# ceph mds stat
cephfs-demo:1 {0=ceph-node01=up:active} 2 up:standby

# 6. 查看剛才創建的pool池
[root@ceph-node01 ceph-deploy]# ceph osd lspools
。。。
9 cephfs_metadata
10 cephfs_data

# 7. 查看集群狀態
[root@ceph-node01 ceph-deploy]# ceph -s
  cluster:
    id: cc10b0cb-476f-420c-b1d6-e48c1dc929af
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum ceph-node01,ceph-node02,ceph-node03 (age 24h)
    mgr: ceph-node01(active, since 11d), standbys: ceph-node03, ceph-node02
    mds: cephfs-demo:1 {0=ceph-node01=up:active} 2 up:standby
    osd: 7 osds: 7 up (since 24h), 7 in (since 6d)
    rgw: 2 daemons active (ceph-node01, ceph-node02)

  task status:
    scrub status:
        mds.ceph-node01: idle

  data:
    pools: 9 pools, 256 pgs
    objects: 2.84k objects, 9.4 GiB
    usage: 35 GiB used, 765 GiB / 800 GiB avail
    pgs: 256 active+clean

[root@ceph-node01 ceph-deploy]#

mds: cephfs-demo:1 {0=ceph-node01=up:active} 2 up:standby 目前ceph-node01是 active,其它的兩個是 standby。

[root@ceph-node01 ~]# ceph fs status cephfs-demo
cephfs-demo - 2 clients
===========
+------+--------+-------------+---------------+-------+-------+
| Rank | State | MDS | Activity | dns | inos |
+------+--------+-------------+---------------+-------+-------+
| 0   | active | ceph-node02 | Reqs:    0 /s | 110  | 113  |
+------+--------+-------------+---------------+-------+-------+
+-----------------+----------+-------+-------+
| Pool | type   | used | avail |
+-----------------+----------+-------+-------+
| cephfs_metadata | metadata | 500k | 112G |
| cephfs_data | data | 9331  | 112G |
+-----------------+----------+-------+-------+
+-------------+
| Standby MDS |
+-------------+
| ceph-node03 |
| ceph-node01 |
+-------------+
MDS version: ceph version 14.2.11 (f7fdb2f52131f54b891a2ec99d8205561242cdaf) nautilus (stable)
[root@ceph-node01 ~]#

CephFS 文件系統使用

內核級別的掛載使用

[root@ceph-node01 ~]# rpm -qf /usr/sbin/mount.ceph
ceph-common-14.2.11-0.el7.x86_64
[root@ceph-node01 ~]#

確認這個命令行工具已經安裝。通過下面的命令進行掛載,這樣即可掛載成功;

[root@ceph-node01 ~]# mkdir -p /mnt/cephfs
[root@ceph-node01 ~]# mount -t ceph 100.73.18.152:6789:/ /mnt/cephfs/ -o name=admin  # 這個地址是ceph-node1主機的ip
[root@ceph-node01 ~]# df -h|grep mnt
/dev/rbd0 20G 1.1G 18G 6% /mnt/rbd-demo
100.73.18.152:6789:/ 800G 36G 765G 5% /mnt/cephfs
[root@ceph-node01 ~]#
[root@ceph-node01 cephfs]# echo `date` >>aa
[root@ceph-node01 cephfs]# cat aa
2020年 10月 21日 星期三 09:42:53 EDT
[root@ceph-node01 cephfs]# lsmod |grep ceph
ceph 335973 1
libceph 282661 2 rbd,ceph
dns_resolver 13140 1 libceph
libcrc32c 12644 4 xfs,ip_vs,libceph,nf_conntrack
[root@ceph-node01 cephfs]#

使用的話,和正常文件系統是一樣使用即可,我們mount后,會自動加載內核模塊,這樣性能很高,但有些情況下不支持內核空間掛載,需要在用戶空間中進行掛載,下面介紹這種情況 。

用戶空間掛載

[root@ceph-node01 ~]# yum -y install ceph-fuse

需要安裝ceph-fuse客戶端掛載工具;

[root@ceph-node01 ~]# mkdir -p /mnt/ceph-fuse/
[root@ceph-node01 ~]# ceph-fuse -n client.admin -m 100.73.18.153:6789,100.73.18.128:6789 /mnt/ceph-fuse/ # 這倆地址是ceph-node和ceph-node2主機的ip
ceph-fuse[403201]: starting ceph client2020-10-21 09:48:52.938 7fb92e4d4f80 -1 init, newargv = 0x561fdb9f8ec0 newargc=9

ceph-fuse[403201]: starting fuse
[root@ceph-node01 ~]# cd /mnt/ceph-fuse/
[root@ceph-node01 ceph-fuse]# ls
aa
[root@ceph-node01 ceph-fuse]# cat aa
2020年 10月 21日 星期三 09:42:53 EDT
[root@ceph-node01 ceph-fuse]# echo `date` >>bb
[root@ceph-node01 ceph-fuse]# cd ../cephfs/
[root@ceph-node01 cephfs]# ls
caa bb
[root@ceph-node01 cephfs]# cat bb
2020年 10月 21日 星期三 09:49:23 EDT
[root@ceph-node01 cephfs]#

總結

客戶端掛載CephFS有兩種形式,內核文件系統:libcephfs,用戶空間文件系統(FUSE):libcephfs,要想在RADOS Cluster使用CephFS 必須包括以下幾步:

1. 至少有一個節點運行ceph-mds 守護進程;
2. 分別創建元數據和數據存儲池;
3. 激活CephFS 文件系統,ceph fs new <name> metadata-pool-name data-pool-name;
4. 使用ceph fs status <name> 去查看狀態信息,也可以使用ceph mds stat 查看mds狀態;

基於內核文件系統掛載:(需要key文件)

5. 通常需要使用指定的用戶訪問, 我們上面實驗中,都是使用的ceph.admin,這里總結下,使用普通用戶的方式:ceph auth get-or-create client.fsclient mon 'allow r' mds 'allow rw' osd 'allow rwx pool=cephfs_data' -o ceph.client.fsclient.keyring
6. 生成普通用戶的key信息,並copy到客戶端的/etc/ceph/目錄,注意客戶端需要安裝ceph-common命令,才可能掛載cephfs文件系統。
ceph auth print-key client.fsclient >/etc/ceph/fsclient.key
7. 客戶端掛載  mount -t ceph ceph-node01:6789,ceph-node02:6789:/ /mnt/kube2/ -o name=fsclient,secretfile=/etc/ceph/fsclient.key,通過stat -f /mnt/kube2查看掛載信息;
8. 還可以把掛載信息寫到/etc/fatab文件中如下:
ceph-node01:6789,ceph-node02:6789:/ /mnt/kube2/ ceph    name=fsclient,secretfile=/etc/ceph/fsclient.key,_netdev,noatime 0 0
_netdev 告訴mount命令,掛載多久沒有掛載成功,自動跳過,不需要等待掛載成功才啟動,如果ceph集群不在線的時候,不加此選項,操作系統啟動時就會卡住;
noatime:不實時更新時間戳選項;
此時使用mount -a 即可加載/etc/fatab文件,自動掛載,使用mount命令查看,使用umount 卸載.

基於用戶空間掛載:(需要用keyring文件)

9. 客戶端需要安裝ceph-fuse,ceph-common命令;
10. 一樣需要提供認證賬號,同上;需要把keyring密鑰環文件copy過去;
11.  ceph-fuse -n client.fsclient -m <IP地址>:6789 /mnt/kube2/  注意這里我使用域名的形式報錯了,可以嘗試使用IP地址;
12. 也可以寫到/etc/fatab文件中:none /mnt/kube2/  fuse.ceph  ceph.id=fsclient,ceph.conf=/etc/ceph/ceph.conf,_netdev,defaults 0 0
13. 使用mount -a 掛載,使用umount 卸載。


免責聲明!

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



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