RHCA - CL260 | Day10:文件系统

一、部署共享文件系统

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并私信小安,请放下你的羞涩,花点时间直到你真正的理解。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小安运维日记

Hey~ 感谢您的充电支持!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值