6.Ceph 基础篇 - CephFS 文件系统
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 卸载。
												
											6.Ceph 基础篇 - CephFS 文件系统的更多相关文章
- 1.Ceph 基础篇 - 存储基础及架构介绍
		
文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485232&idx=1&sn=ff0e93b9 ...
 - 8. Ceph 基础篇 - 运维常用操作
		
文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485300&idx=1&sn=aacff9f7 ...
 - 3.Ceph 基础篇 - RBD 块存储使用
		
文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485253&idx=1&sn=24d9b06a ...
 - 4.Ceph 基础篇 - 对象存储使用
		
文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485256&idx=1&sn=39e07215 ...
 - 10.Ceph 基础篇 - RGW 高可用
		
文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485316&idx=1&sn=d3a6be41 ...
 - 9. Ceph 基础篇 - Crush Maps
		
文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485302&idx=1&sn=00a3a204 ...
 - 5.Ceph 基础篇 - 认证
		
文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485272&idx=1&sn=4b27c357 ...
 - 2.Ceph 基础篇 - 集群部署及故障排查
		
文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485243&idx=1&sn=e425c31a ...
 - Linux系统文件系统及文件基础篇
		
学习Linux,重难点在于掌握不同类别的文件系统及其作用.通过对Linux系统的安装,我们首先来了解下Linux系统里各个目录文件夹下的大致功能:主要的目录树的有/./root./home./usr. ...
 
随机推荐
- Tapdata 在“疫”线:携手张家港市卫健委争分夺秒实时抗疫
			
"抗疫两年以来最困难的时期,是漫长冬夜还是倒春寒?"--国家传染病医学中心主任张文宏 于3月14日凌晨 "等到疫情结束了,我一定要--",常怀这样的期许 ...
 - Modeling Conversation Structure and Temporal Dynamics for Jointly Predicting Rumor Stance and Veracity(ACL-19)
			
记录一下,论文建模对话结构和时序动态来联合预测谣言立场和真实性及其代码复现. 1 引言 之前的研究发现,公众对谣言消息的立场是识别流行的谣言的关键信号,这也能表明它们的真实性.因此,对谣言的立场分类被 ...
 - Bash脚本debug攻略
			
初学Bash时, 我从未想过想过bash也能debug, 也从未想过去debug Bash脚本. 随着技术的增长, 写的脚本越来越复杂, 使用echo打印日志来调试脚本的方式越来越捉襟见肘了. 直到某 ...
 - 建立二叉树的二叉链表存储结构(严6.70)--------西工大noj
			
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct TreeNode ...
 - 造!又有新的生产力语言了「GitHub 热点速览 v.22.30」
			
作者:HelloGitHub-小鱼干 你还记得那些 PHP 开发都去哪了吗?转 Golang 了!移动端现在流行什么?Flutter 编程.现在谷歌带着新的生产力语言来了,Carbon,代号:C++ ...
 - mysql 01: source命令
			
使用mysql的source命令,执行sql脚本 之所以使用docker同步挂载卷的方法,是因为在docker中运行的mysql未安装vim或gedit等基本编辑器 不方便在mysql容器里直接写sq ...
 - 三万字盘点Spring/Boot的那些常用扩展点
			
大家好,我是三友. Spring对于每个Java后端程序员来说肯定不陌生,日常开发和面试必备的.本文就来盘点Spring/SpringBoot常见的扩展点,同时也来看看常见的开源框架是如何基于这些扩展 ...
 - OpenWrt之feeds.conf.default详解
			
目录 OpenWrt之feeds.conf.default详解 文件内容 命令解释 src-svn与src-gitsvn src-git与src-git-full src-cpy与src-link 其 ...
 - SDK和API的直接区别
			
狭义的说法,在实际工作中, 如果对方需要你提供一个api,是指一个工程提供给另外一个工程的接口(一般是基于http协议). 如果对方需要你提供一个sdk,是指基于对方工程的编程语言,提供一个代码包.在 ...
 - nginx代理与反向代理原理
			
简介: nginx是一个http服务器,稳定性好,底层由c编写,一个高性能的http 服务器/反向代理服务器及电子邮件代理服务器. nginx可以做web服务器,也可以做网关,主要应用于代理和方向代理 ...