一、部署共享文件系统
1、Ceph文件系统和MDS
Ceph文件系统是基于RADOS并兼容POSIX的文件系统。基于文件的存储允许您像传统文件系统一样组织数据。实现Ceph文件系统需要运行至少一个MDS服务,该服务负责管理文件系统中文件的元数据。

2、File, Block, and Object Storage
您的数据保存在一个文件中,该文件具有名称和一些相关的元数据,例如修改时间戳、所有者和访问权限。
- 基于文件的存储使用目录和子目录的分层体系组织数据。
- 基于块的存储提供一个类似于硬盘的存储卷,将数据已相同大小的chunks形式存储。
- 基于对象的存储可以在一个扁平的存储池中通过UID存储任意数据和带kv标签的元数据。
3、Metadata Server
MDS (metadata server) 负责管理元数据。MDS守护进程提供用户访问RADOS对象所需的基本信息,例如文件存储在文件系统tree中的位置。MDS进程管理每个文件或目录的元数据信息,这些数据都存储在RADOS集群里。同时MDS还负责缓存和管理元数据的缓存。
CephFS共享文件系统需要一个活动的MDS守护进程,还应该至少有一个备用MDS,以确保高可用性。
CephFS客户端开始时访问MON,通过认证并获取集群地图。然后,客户端查询主MDS,读取文件的元数据,通过直接连接OSD访问文件或目录对象。

Lab: Deploying Shared File Storage
初始化系统环境
[root@foundation0 ~]# ssh student@workstation
[student@workstation ~]$ lab start fileshare-deploy
Starting lab.
· Checking lab systems .................................. SUCCESS
· Backup fstab file ..................................... SUCCESS
· Set osd_pool_default_size to 3 ........................ SUCCESS
· Set osd_pool_default_min_size to 0 .................... SUCCESS
· Set osd_pool_default_pg_num to 32 ..................... SUCCESS
· Set osd_pool_default_crush_rule to -1 ................. SUCCESS
[root@foundation0 ~]# ssh root@clienta
[root@clienta ~]# cephadm shell
[ceph: root@clienta /]# ceph -s
1、创建CephFS文件系统及部署MDS服务
创建2个存储池,未指定PG,默认为32个PG
[ceph: root@clienta /]# ceph osd pool create mycephfs_data
pool 'mycephfs_data' created
[ceph: root@clienta /]# ceph osd pool create mycephfs_metadata
pool 'mycephfs_metadata' created
Create the CephFS file system with the name mycephfs. 两个存储池,前面是元数据池,后面是数据池
- 命令:ceph fs new <filesystem-name> <metadata-pool> <data-pool> //初始化文件系统的元数据池和数据池。
[ceph: root@clienta /]# ceph fs new mycephfs mycephfs_metadata mycephfs_data
new fs with metadata pool 7 and data pool 6
[ceph: root@clienta /]# ceph fs ls
name: mycephfs, metadata pool: mycephfs_metadata, data pools: [mycephfs_data ]
这条命令的各个部分意味着:
- ceph fs new:Ceph 中的命令,用于创建一个新的文件系统。
- mycephfs:新文件系统的名称。在这个例子中,文件系统被命名为 mycephfs。
- mycephfs_metadata:这是用于存储文件系统元数据的Ceph池的名称。元数据包括文件的名称、大小、权限等信息。
- mycephfs_data:这是用于存储文件系统数据的Ceph池的名称。数据池存储实际的文件内容。
在执行这个命令之前,你需要确保 mycephfs_metadata 和 mycephfs_data 这两个池已经被创建。在 Ceph 中,池(pools)是数据存储的逻辑分区,你可以通过 ceph osd pool create 命令来创建它们。
在serverc.lab.example.com上部署MDS服务
[ceph: root@clienta /]# ceph orch apply mds mycephfs --placement="1 serverc.lab.example.com"
Scheduled mds.mycephfs update...
验证MDS服务是否使用。
[ceph: root@clienta /]# ceph mds stat
mycephfs:1 {0=mycephfs.serverc.oolenb=up:active}
[ceph: root@clienta /]# ceph -s
cluster:
id: 2ae6d05a-229a-11ec-925e-52540000fa0c
health: HEALTH_OK
services:
mon: 4 daemons, quorum serverc,clienta,serverd,servere (age 93m)
mgr: serverc(active, since 92m), standbys: servere, serverd, clienta
mds: 1/1 daemons up
osd: 9 osds: 9 up (since 93m), 9 in (since 12M)
rgw: 2 daemons active (2 hosts, 1 zones)
data:
volumes: 1/1 healthy
pools: 7 pools, 169 pgs
objects: 243 objects, 7.2 KiB
usage: 178 MiB used, 90 GiB / 90 GiB avail
pgs: 169 active+clean
2、挂载cephfs文件系统
作为clienta节点上的客户端,将新的cepfs文件系统挂载到/mnt/mycepfs目录上。
首先验证Ceph客户端密匙环是否存在于客户端节点的/etc/ceph文件夹中。
[ceph: root@clienta /]# exit
[root@clienta ~]# ls -l /etc/ceph/
total 12
-rw-r--r--. 1 root root 63 Oct 1 2021 ceph.client.admin.keyring
-rw-r--r--. 1 root root 177 Oct 1 2021 ceph.conf
-rw-------. 1 root root 82 Oct 30 05:04 podman-auth.json
安装ceph客户端软件包
[root@clienta ~]# yum -y install ceph-common
创建一个名为/mnt/mycephfs的挂载点,并挂载新的CephFS文件系统。
[root@clienta ~]# mkdir /mnt/mycephfs
[root@clienta ~]# mount.ceph serverc.lab.example.com:/ /mnt/mycephfs -o name=admin
## 上面的命令自动读取对应用户的keyring文件,或者通过secret参数手动指定密钥
[root@clienta ~]# mount.ceph serverc.lab.example.com:/ /mnt/mycephfs -o name=admin,secret=AQA11VZhyq8VGRAAOus0I5xLWMSdAW/759e32A==
[root@clienta ~]# df -h /mnt/mycephfs/ //查看挂载点
Filesystem Size Used Avail Use% Mounted on
172.25.250.12:/ 29G 0 29G 0% /mnt/mycephfs
创建两个名为dir1和dir2的目录。
[root@clienta ~]# mkdir /mnt/mycephfs/dir1
[root@clienta ~]# mkdir /mnt/mycephfs/dir2
[root@clienta ~]# ls -l /mnt/mycephfs/
total 0
drwxr-xr-x. 2 root root 0 Oct 30 06:49 dir1
drwxr-xr-x. 2 root root 0 Oct 30 06:49 dir2
在dir1目录中创建一个名为atestfile的空文件。然后在同一目录中创建一个名为ddtest的10MB文件。
[root@clienta ~]# touch /mnt/mycephfs/dir1/atestfile
[root@clienta ~]# dd if=/dev/zero of=/mnt/mycephfs/dir1/ddtest bs=1024 count=10000
10000+0 records in
10000+0 records out
10240000 bytes (10 MB, 9.8 MiB) copied, 0.0422527 s, 242 MB/s
查看文件的inode节点信息
[root@clienta dir1]# stat -c %i /mnt/mycephfs/dir1/ddtest
1099511628279
将数字转换为16进制数字
[root@clienta dir1]# printf '%x\n' 1099511628279
100000001f7
在底层rados存储中找到该数据对象
[root@clienta ~]# rados -p mycephfs_data ls | grep 100000001f7
100000001f7.00000002
100000001f7.00000000
100000001f7.00000001
[root@clienta ~]# ceph osd map mycephfs_data 100000001f7.00000000
osdmap e207 pool 'mycephfs_data' (6) object '100000001f7.00000000' -> pg 6.43b1c7f6 (6.16) -> up ([0,7,4], p0) acting ([0,7,4], p0)
//该数据对象存储在6.16这个PG,该PG对应的OSD硬盘为0,7,4,其中0为primary OSD.
[root@clienta ~]# ceph osd tree
.取消挂载
[root@clienta ~]# umount /mnt/mycephfs
3、查看数据池中的存储是否变大(副本数)
执行cephfs status命令,检查mycephfs_data池中已用数据的大小。报告较大的大小是因为cepfs文件系统跨三个Ceph节点进行复制。
[root@clienta ~]# ceph fs status
mycephfs - 0 clients
========
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active mycephfs.serverc.oolenb Reqs: 0 /s 14 17 14 0
POOL TYPE USED AVAIL
mycephfs_metadata metadata 156k 28.3G
mycephfs_data data 29.2M 28.3G
MDS version: ceph version 16.2.0-117.el8cp pacific (stable)
4、文件系统权限限制用户
创建一个限制用户,用户名称为restricteduser,该用户对根目录具有只读权限,对dir2目录具有读写权限,使用新用户再次挂载Ceph文件系统,测试效果。
[root@clienta ~]# cephadm shell --mount /etc/ceph/
[ceph: root@clienta /]# ceph fs authorize mycephfs client.restricteduser / r /dir2 rw
[client.restricteduser]
key = AQCHWV5jk665AhAAba+8qgTAuHQqUWPuNvpSvw==
[ceph: root@clienta /]# ceph auth get client.restricteduser
[client.restricteduser]
key = AQCHWV5jk665AhAAba+8qgTAuHQqUWPuNvpSvw==
caps mds = "allow r fsname=mycephfs, allow rw fsname=mycephfs path=/dir2"
caps mon = "allow r fsname=mycephfs"
caps osd = "allow rw tag cephfs data=mycephfs"
[ceph: root@clienta /]# ceph auth get client.restricteduser -o /mnt/ceph.client.restricteduser.keyring
[ceph: root@clienta /]# exit
使用内核客户端用restricteduser用户挂载mycepfs文件系统。
[root@clienta ~]# mount.ceph serverc.lab.example.com:/ /mnt/mycephfs/ -o name=restricteduser,fs=mycephfs
[root@clienta ~]# tree /mnt/
/mnt/
└── mycephfs
├── dir1
│ ├── atestfile
│ └── ddtest
└── dir2
3 directories, 2 files
[root@clienta ~]# ls /mnt/mycephfs/dir1/
atestfile ddtest
[root@clienta ~]# touch /mnt/mycephfs/dir1/file1 //测试创建文件失败
touch: cannot touch '/mnt/mycephfs/dir1/file1': Permission denied
[root@clienta ~]# touch /mnt/mycephfs/dir2/file2 //测试创建文件成功
[root@clienta ~]# ls /mnt/mycephfs/dir2/
file2
[root@clienta ~]# rm -rf /mnt/mycephfs/dir2/file2
Unmount the CephFS file system.
[root@clienta ~]# vim /etc/fstab
... ...
serverc.lab.example.com:/ /mnt/mycephfuse fuse.ceph ceph.id=restricteduser,_netdev 0 0
[root@clienta ~]# mount -a
2022-10-30T07:14:53.812-0400 7f58092fb200 -1 init, newargv = 0x55b296d4ca80 newargc=17
ceph-fuse[38984]: starting ceph client
ceph-fuse[38984]: starting fuse
[root@clienta ~]# tree /mnt/
/mnt/
├── mycephfs
└── mycephfuse
├── dir1
│ ├── atestfile
│ └── ddtest
└── dir2
4 directories, 2 files
[root@clienta ~]# umount /mnt/mycephfuse
[root@clienta ~]# vim /etc/fstab
... ...
//删除该行:serverc.lab.example.com:/ /mnt/mycephfuse fuse.ceph ceph.id=restricteduser,_netdev 0 0
[root@clienta ~]# umount /mnt/mycephfs
6、安装ceph-fuse包并挂载到一个名为ceph-fuse的新目录。
[root@clienta ~]# yum -y install ceph-fuse
[root@clienta ~]# mkdir /mnt/mycephfuse
[root@clienta ~]# ceph-fuse -n client.restricteduser --client_fs mycephfs /mnt/mycephfuse
2022-10-30T07:12:00.292-0400 7fc63d839200 -1 init, newargv = 0x5574e9ddb9c0 newargc=15
ceph-fuse[38787]: starting ceph client
ceph-fuse[38787]: starting fuse
[root@clienta ~]# tree /mnt/
/mnt/
├── mycephfs
└── mycephfuse
├── dir1
│ ├── atestfile
│ └── ddtest
└── dir2
4 directories, 2 files
[root@clienta ~]# umount /mnt/mycephfuse
7、永久挂载(persistently mount the CephFS)
[root@clienta ~]# vim /etc/fstab
... ...
serverc.lab.example.com:/ /mnt/mycephfuse fuse.ceph ceph.id=restricteduser,_netdev 0 0
[root@clienta ~]# mount -a
2022-10-30T07:14:53.812-0400 7f58092fb200 -1 init, newargv = 0x55b296d4ca80 newargc=17
ceph-fuse[38984]: starting ceph client
ceph-fuse[38984]: starting fuse
[root@clienta ~]# tree /mnt/
/mnt/
├── mycephfs
└── mycephfuse
├── dir1
│ ├── atestfile
│ └── ddtest
└── dir2
4 directories, 2 files
[root@clienta ~]# umount /mnt/mycephfuse
[root@clienta ~]# vim /etc/fstab
... ...
//删除该行:serverc.lab.example.com:/ /mnt/mycephfuse fuse.ceph ceph.id=restricteduser,_netdev 0 0
8、删除CephFS文件系统
在Ceph文件系统中,删除一个文件系统是一个严肃的操作,并且需要多个步骤来安全地进行,以确保不会丢失数据或破坏集群的稳定性。以下是删除Ceph文件系统的一般步骤:
1.停止客户端访问:确保没有客户端正在使用文件系统。可以通过卸载所有挂载点来停止访问。
umount <挂载点>
2.禁用文件系统:使用Ceph FS命令禁用文件系统:
ceph fs ls
ceph fs set <fs_name> enable false
3.删除所有MDS(元数据服务器):将Ceph文件系统的MDS缩减到0
ceph fs set <fs_name> max_mds 0
然后停止并删除所有MDS守护进程。
4.删除文件系统
ceph fs rm <fs_name> --yes-i-really-mean-it
5.删除文件系统数据池:
Ceph文件系统通常有多个数据池,包括数据和元数据池。需要手动删除这些池:
ceph osd pool delete <data_pool_name> <data_pool_name> --yes-i-really-really-mean-it
ceph osd pool delete <metadata_pool_name> <metadata_pool_name> --yes-i-really-really-mean-it
请注意,这个删除操作是不可逆的,一旦执行,所有关联的数据都将被永久删除。在执行这些步骤之前,务必确认所有重要数据都已经备份,并且确认你确实想要删除该文件系统。
补充:
// 卸载挂载点
[root@clienta ~]# umount /mnt/mycephfs
// 停止并删除守护进程
[root@clienta ~]# ceph orch ls
[root@clienta ~]# ceph orch stop mds.mycephfs
[root@clienta ~]# ceph orch rm mds.mycephfs
// 删除CephFS文件系统,再删除存储池
[root@clienta ~]# ceph fs rm mycephfs --yes-i-really-mean-it
[root@clienta ~]# ceph osd pool delete mycephfs_data mycephfs_data --yes-i-really-really-mean-it
pool 'mycephfs_data' removed
[root@clienta ~]# ceph osd pool delete mycephfs_metadata mycephfs_metadata --yes-i-really-really-mean-it
pool 'mycephfs_metadata' removed
小结:
本篇为 【RHCA认证 - CL260 | Day10:文件系统】的学习笔记,希望这篇笔记可以让您初步了解如何创建CephFS文件系统及部署MDS服务、挂载文件系统、查看数据池的存储变化、限制用户等,不妨跟着我的笔记步伐亲自实践一下吧!
Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关环境、视频,可评论666并私信小安,请放下你的羞涩,花点时间直到你真正的理解。
1057

被折叠的 条评论
为什么被折叠?



