ceph提供文件系统存储
cephfs
-
cephfs提供的就是一个文件系统,不需要格式化,rbd的话需要自己格式化
-
文件系统与块存储不同的就是,块存储需要一个存储池就可以了,但是文件系统的话,需要2个存储池,一个用来存放元数据,存放元数据的存储池需要一个mds来读取,另外一个用来存储数据
-
需要部署一个mds服务,用来读取元数据(文件名,大小,对象id)
1、mds是什么
-
mds metadata server
-
文件系统需要存放元数据和数据,但是存储池里面存储的是对象,并不是元数据,那么使用文件系统的话必须具备将对象转换为元数据的能力,mds可以实现
-
它将文件的“目录结构、名称、权限”等元数据与真正的“文件内容”数据分离开来,并由 MDS 专门负责管理前者
1、为什么需要mds呢?
-
客户端写入数据的时候,mds将其文件属性,目录结构信息等信息转换为元数据存储在元数据存储池中,而文件的真实数据,则是有客户端写入数据存储池的
-
mds就是一个翻译的,不参与数据的写入
2、工作流程
- 场景设定
应用程序: echo "Hello CephFS" > /mnt/cephfs/test.txt
挂载点: /mnt/cephfs
文件路径: /test.txt
写入内容: "Hello CephFS" (12字节)
-
客户端发起写的操作,先去找mds
-
路径解析,文件不存在的话,创建一个元数据对象,inode,返回给客户端
-
客户端与osd直接写入

2、创建ceph文件系统
1、创建2个存储池
# 存储数据的存储池
[root@ceph01 ~]# ceph osd pool create cephfs_data
pool 'cephfs_data' created
# 存储元数据的存储池
[root@ceph01 ~]# ceph osd pool create cephfs_metadata
pool 'cephfs_metadata' created
# 打上标签,cephfs
[root@ceph01 ~]# ceph osd pool application enable cephfs_data cephfs
enabled application 'cephfs' on pool 'cephfs_data'
[root@ceph01 ~]# ceph osd pool application enable cephfs_metadata cephfs
enabled application 'cephfs' on pool 'cephfs_metadata'
2、创建cephfs
# 先指定元数据存储池,后指定数据存储池
# ceph fs new 文件系统名 元数据存储池 数据存储池
[root@ceph01 ~]# ceph fs new mycephfs cephfs_metadata cephfs_data
new fs with metadata pool 10 and data pool 9
# 元数据池id为10
# 数据池id为9
# 查看cephfs存储池
[root@ceph01 ~]# ceph fs ls
name: mycephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
# 查看空间
[root@ceph01 ~]# ceph fs status
mycephfs - 0 clients
========
POOL TYPE USED AVAIL
cephfs_metadata metadata 0 28.4G
cephfs_data data 0 28.4G
# 在创建存储池的时候没有指定空间大小
# 默认的话,会使用所有空间的
3、创建mds
- 如果不创建mds的话,集群就会变成health_err的状态
# 为文件系统创建一个mds,mds管理这个元数据
[root@ceph01 ~]# ceph orch apply mds mycephfs --placement="3"
Scheduled mds.mycephfs update...
[root@ceph01 ~]# ceph orch ls |grep mds
mds.mycephfs 3/3 30s ago 43s count:3
# 如果还有文件系统的cephfs2,也需要为其创建一个mds
# 每个文件系统都有一组mds来进行管理
4、查看文件系统的信息
[root@ceph01 ~]# ceph fs get mycephfs
Filesystem 'mycephfs' (1)
fs_name mycephfs
epoch 5
flags 12
created 2026-03-18T06:57:38.719992+0000
modified 2026-03-18T07:04:05.711455+0000
tableserver 0
root 0
session_timeout 60
session_autoclose 300
max_file_size 1099511627776
required_client_features {}
last_failure 0
last_failure_osd_epoch 0
compat compat={},rocompat={},incompat={1=base v0.20,2=client writeable rangesoned encoding,6=dirfrag is stored in omap,7=mds uses inline data,8=no anchor t
max_mds 1
in 0
up {0=144452}
failed
damaged
stopped
data_pools [9]
metadata_pool 10
inline_data disabled
balancer
standby_count_wanted 1
[mds.mycephfs.ceph03.yjlshe{0:144452} state up:active seq 2 join_fscid=1 addr 1],r=[1],i=[7ff]}]
# ceph fs dump 查看所有文件系统信息
5、创建用户,发送keyring
ceph auth get-or-create client.cephfs mon 'allow r' mds 'allow *' osd 'allow rw pool=cephfs_metadata,allow rw pool=cephfs_data' -o ceph.client.cephfs.keyring
# 传输keyring文件
[root@ceph01 ~]# scp ceph.client.cephfs.keyring root@192.168.50.22:/root
6、客户端执行挂载
-
不需要格式化
-
2种挂载方式
-
基于ceph-fuse的方式
-
基于系统内核方式(推荐这种)
-
# 需要安装ceph客户端,如果不安装mount -t ceph 会报错没有这个类型
# 用户密钥保存到一个文件,只需要密钥,其他不用写,后面会用到的
[root@ceph03 ~]# echo "AQBBUbppIkvPNBAAWsQ3+DzWCFcuqlPaPVRoBA==" > cephfs.key
mkdir /cephfs
# 使用一个mon地址或者多个都可以的
[root@ceph03 ceph]# mount -t ceph -o name=cephfs,secretfile=/root/cephfs.key 192.168.50.20:/ /cephfs/
[root@ceph03 ceph]# df -hT /cephfs/
Filesystem Type Size Used Avail Use% Mounted on
192.168.50.20:/ ceph 29G 0 29G 0% /cephfs
7、查看存储池数据
# 创建空的文件名,这些元数据都在这个存储池里面
[root@ceph01 ~]# rados -p cephfs_metadata ls
601.00000000
602.00000000
600.00000000
# 只有真正的写入数据了,才会有对象
[root@ceph01 ~]# rados -p cephfs_data ls
8、永久挂载
# /etc/fstab文件
192.168.50.20:/ /cephfs ceph defaults,_netdev,name=cephfs,secretfile=/root/cephfs.key 0 0
9、权限补充
-
刚刚我们给的权限是可以直接挂载cephfs的根目录的,如果我们想要修改用户挂载根目录下面的某个目录,那么就需要进一步的权限控制了
-
rw读写,p管理子目录的权限,s管理快照
# 用户只能访问/nas 其他不能访问
[root@ceph01 ~]# ceph fs authorize mycephfs client.use01 /nas rwps
[client.use01]
key = AQBvWLppY693MxAAwA91DqSXltB7LJiwZVvkNA==
# 还需要在cephfs根目录下面创建一个nas目录
# 发送keyring文件,secretfile文件
# 客户端挂载
[root@ceph03 ~]# mount -t ceph -o name=use01,secretfile=./use01.key 192.168.50.20:/nas /nas1/
- mycephfs用户可以操作的文件系统名名,/nas能够挂载的目录,权限是rw,p就是管理权限,s就是文件系统(fs中的s)
3、怎么删除cephfs呢?
-
首先就是删除mds这些进程,让他们标记为停止的状态
-
删除这个cephfs文件系统
-
删除2个存储池即可
[root@ceph01 ~]# ceph fs fail mycephfs
mycephfs marked not joinable; MDS cannot join the cluster. All MDS ranks marked failed.
[root@ceph01 ~]# ceph fs rm mycephfs --yes-i-really-mean-it
[root@ceph01 ~]# ceph fs ls
No filesystems enabled
[root@ceph01 ~]# ceph osd pool rm cephfs_metadata cephfs_metadata --yes-i-really-really-mean-it
pool 'cephfs_metadata' removed
[root@ceph01 ~]# ceph osd pool rm cephfs_data cephfs_data --yes-i-really-really-mean-it
pool 'cephfs_data' removed
4、ceph fs常见的命令
1、查看文件系统状态
[root@ceph01 ~]# ceph fs status
mycephfs - 2 clients
========
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active mycephfs.ceph03.yjlshe Reqs: 0 /s 12 15 13 4
POOL TYPE USED AVAIL
cephfs_metadata metadata 108k 28.4G
cephfs_data data 0 28.4G
STANDBY MDS
mycephfs.ceph01.tvxbtw
mycephfs.ceph02.nyheaw
MDS version: ceph version 16.2.13 (5378749ba6be3a0868b51803968ee9cde4833a3e) pacific (stable)
# 2个客户端正在挂载
2、查看文件系统详细信息
# 显示所有信息配置
ceph fs dump
3、查看文件系统所有信息
# 只显示指定的文件系统信息
ceph fs get mycephfs
4、查看 MDS 状态
ceph mds stat

浙公网安备 33010602011771号