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
20201021日 星期三 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
20201021日 星期三 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
20201021日 星期三 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-name4. 使用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 卸载。
posted @   哈喽哈喽111111  阅读(899)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2021-03-26 SpringCloud组件编写Dockerfile文件模板
2021-03-26 火狐浏览器经常使用的插件
点击右上角即可分享
微信分享提示