joeの小窝

Loading...

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直接写入

img

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
posted @ 2026-03-18 15:55  乔的港口  阅读(29)  评论(0)    收藏  举报