当前位置: 首页 > news >正文

第37讲:Cephfs文件系统的正确使用姿势

文章目录

    • 1.Cephfs文件系统简介
    • 2.Cephfs文件系统细节介绍
      • 2.1.Cephfs文件系统多客户端隔离挂载
      • 2.2.Ceph集群中多个Cephfs如何单独使用
    • 3.挂载多个Cephfs文件系统
    • 4.Cephfs文件系统多客户端隔离挂载实战
      • 4.1.创建一个Cephfs文件系统
      • 4.2.将Cephfs文件系统挂载到本地路径
      • 4.3.在Cephfs文件文件系统中创建多个目录
      • 4.4.查看Cephfs文件系统的状态
      • 4.5.客户端分别挂载不同的Cephfs文件系统中的子目录
    • 5.卸载MDS的方法
    • 6.小插曲

1.Cephfs文件系统简介

Cephfs文件系统至少需要一个MDS(Metadata Server组件)来存储文件系统的元数据信息,因此在使用Cephfs文件存储之前,首先要在集群中部署MDS组件,我们希望Cephfs文件存储具备高可用性,所以MDS组件一般都会在集群中部署多个,大多数情况下都是三个MDS组件。

Cephfs支持用户级别和内核级别的挂载使用,可扩展性极高,并且可以同时让多个Client客户端进行读写。

一个Cephfs文件系统至少需要两个Librados存储池,也就是Pool资源池,一个为data,存储具体落盘的数据,一个为metadata,存储数据文件的元数据信息。

建议为metadata的Pool资源池设置较高级别的副本数,因为metadata资源池损坏就会导致整个文件系统不可用,另外metadata的资源池要使用低延时的存储,例如SSD类型的磁盘,metadata会直接影响客户端的响应速度。

Cephfs文件系统正确使用姿势:

首次创建完Cephfs文件系统后,将其挂载到本地的一个路径中,然后在路径中创建出多个子级目录,客户端使用时挂载特定的子级目录。

这样做的好处是:既可以看到所有客户端在Cephfs文件系统中存储的数据,又可以让多个客户端之间实现数据的隔离存储。

2.Cephfs文件系统细节介绍

2.1.Cephfs文件系统多客户端隔离挂载

在Ceph集群中创建的Cephfs文件系统,其实是一个Volume,也就是一个空盘,只有一个/路径,这也是大多数直接挂载/的一个原因。

如果集群中只有一个Cephfs文件系统,在使用mount挂载时,无需指定使用哪个Cephfs文件系统,直接就是将这个Cephfs文件系统的/目录挂载到指定的路径中,就可以使用这个Cephfs文件系统进行存储了。

如下图所示:Ceph集群中只有一个Cephfs文件系统,也没有在文件系统中创建任何目录,因此直接挂载的/目录

image-20220416083429568

我们可以把Cephfs文件系统理解成一个空的父级目录,一开始并没有任何的文件系统,在使用这个文件系统之前,先将Cephfs挂载到本地的一个路径中,在里面为不同的客户端创建出不同的目录,然后由客户端挂载时指定要挂载的目录,实现多客户端之间的数据隔离。

如下图所示:就是在Cephfs文件系统中为不同的客户端创建了不同的存储目录,然后由客户端进行挂载,实现数据上的逻辑隔离。

image-20220416083953453

2.2.Ceph集群中多个Cephfs如何单独使用

一个Ceph集群中不可能只有一个Cephfs文件系统,那么如何指定客户端使用哪一个Cephfs呢?其实很简单,mount挂载命令中有个参数可以指定客户端使用哪一个Cephfs。

挂载非默认FS,以防集群有多个FS
mount -t ceph :/ /mnt/ mycephfs2 -o fs=mycephfs2或者mount -t ceph :/ /mnt/ mycephfs2 -o mds_namespace=mycephfs2 # 此选项名称已弃用。

官网是如上这么写的,但是我在使用的时候发现fs=这个参数是不支持的,只有mds_namespace=参数是支持的

3.挂载多个Cephfs文件系统

使用mount命令的mds_namespace参数就可以指定要挂载的Cephfs文件系统

[root@ceph-node-1 ~]# mount -t ceph  192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/nginx_conf /nginx_conf/ -o name=admin,mds_namespace=kubernetes_cephfs[root@ceph-node-1 ~]# mount -t ceph  192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/prometheus_data /prometheus_data/ -o name=admin,mds_namespace=kubernetes_cephfs

image-20220416100835888

执行mount命令也可以看到挂载的详情。

192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/nginx_conf on /nginx_conf type ceph (rw,relatime,name=admin,secret=<hidden>,acl,mds_namespace=kubernetes_cephfs,wsize=16777216)
192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/prometheus_data on /prometheus_data type ceph (rw,relatime,name=admin,secret=<hidden>,acl,mds_namespace=kubernetes_cephfs,wsize=16777216)

4.Cephfs文件系统多客户端隔离挂载实战

创建一个Cephfs文件系统,然后将文件系统挂载到本地的一个路径上,

4.1.创建一个Cephfs文件系统

1)首先创建Cephfs依赖的数据池和元数据池

[root@ceph-node-1 ~]# ceph osd pool create kubernetes_cephfs_data 16 16
pool 'kubernetes_cephfs_data' created
[root@ceph-node-1 ~]# ceph osd pool create kubernetes_cephfs_metadata 16 16
pool 'kubernetes_cephfs_metadata' created

2)创建一个Cephfs文件系统

[root@ceph-node-1 ~]# ceph fs new kubernetes_cephfs kubernetes_cephfs_metadata kubernetes_cephfs_data
new fs with metadata pool 14 and data pool 13

3)查看创建的Cephfs文件系统

[root@ceph-node-1 ~]# ceph fs ls
name: kubernetes_cephfs, metadata pool: kubernetes_cephfs_metadata, data pools: [kubernetes_cephfs_data ]

4.2.将Cephfs文件系统挂载到本地路径

使用mount命令时,指定mds_namespace参数挂载特定的Cephfs文件系统。

[root@ceph-node-1 ~]# mount -t ceph 192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/ /kubernetes_cephfs/ -o name=admin,mds_namespace=kubernetes_cephfs

4.3.在Cephfs文件文件系统中创建多个目录

创建出多个目录为不同的客户端提供存储。

[root@ceph-node-1 ~]# mkdir /kubernetes_cephfs/{zabbix_data,prometheus_data,nginx_conf}
[root@ceph-node-1 ~]# ll /kubernetes_cephfs/
总用量 0
drwxr-xr-x 1 root root 0 416 10:02 nginx_conf
drwxr-xr-x 1 root root 0 416 10:02 prometheus_data
drwxr-xr-x 1 root root 0 416 10:02 zabbix_data

4.4.查看Cephfs文件系统的状态

当前还没有任何数据写入。

[root@ceph-node-1 ~]# ceph fs status kubernetes_cephfs
kubernetes_cephfs - 0 clients
=================
+------+--------+-------------+---------------+-------+-------+
| Rank | State  |     MDS     |    Activity   |  dns  |  inos |
+------+--------+-------------+---------------+-------+-------+
|  0   | active | ceph-node-2 | Reqs:    0 /s |    0  |    0  |
+------+--------+-------------+---------------+-------+-------+
+----------------------------+----------+-------+-------+
|            Pool            |   type   |  used | avail |
+----------------------------+----------+-------+-------+
| kubernetes_cephfs_metadata | metadata | 1728k | 17.9G |
|   kubernetes_cephfs_data   |   data   |    0  | 17.9G |
+----------------------------+----------+-------+-------+
+-------------+
| Standby MDS |
+-------------+
| ceph-node-1 |
+-------------+
+-----------------------------------------------------------------------------------+-------------+
|                                      version                                      |   daemons   |
+-----------------------------------------------------------------------------------+-------------+
|                                        None                                       | ceph-node-2 |
| ceph version 14.2.22 (ca74598065096e6fcbd8433c8779a2be0c889351) nautilus (stable) | ceph-node-1 |
+-----------------------------------------------------------------------------------+-------------+

4.5.客户端分别挂载不同的Cephfs文件系统中的子目录

1)客户端挂载文件系统中不同的目录

1.创建挂载点
[root@ceph-node-1 ~]# mkdir /nginx_conf
[root@ceph-node-1 ~]# mkdir /prometheus_data2.挂载Cephfs文件系统中不同的子目录
[root@ceph-node-1 ~]# mount -t ceph  192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/nginx_conf /nginx_conf/ -o name=admin,mds_namespace=kubernetes_cephfs
[root@ceph-node-1 ~]# mount -t ceph  192.168.20.20:6789,192.168.20.21:6789,192.168.20.22:6789:/prometheus_data /prometheus_data/ -o name=admin,mds_namespace=kubernetes_cephfs

2)查看挂载的信息

不同的客户端挂载了Cephfs文件系统中不同的子目录,实现数据上的隔离存储。

image-20220416100835888

3)写入数据验证数据的隔离性

每个客户端都在自己的挂载点写入数据。

#nginx客户端
[root@ceph-node-1 ~]# touch /nginx_conf/file{1..5}.txt#prometheus客户端
[root@ceph-node-1 ~]# cp rbd-storage.img /prometheus_data/

在总的Cephfs文件存储中查看子目录的数据。

[root@ceph-node-1 ~]# tree /kubernetes_cephfs/
/kubernetes_cephfs/
├── nginx_conf
│   ├── file1.txt
│   ├── file2.txt
│   ├── file3.txt
│   ├── file4.txt
│   └── file5.txt
├── prometheus_data
│   └── rbd-storage.img
└── zabbix_data3 directories, 6 files

查看Cephfs文件系统的状态,此时数据就有了变化。

[root@ceph-node-1 ~]# ceph fs status kubernetes_cephfs
kubernetes_cephfs - 0 clients
=================
+------+--------+-------------+---------------+-------+-------+
| Rank | State  |     MDS     |    Activity   |  dns  |  inos |
+------+--------+-------------+---------------+-------+-------+
|  0   | active | ceph-node-2 | Reqs:    0 /s |    0  |    0  |
+------+--------+-------------+---------------+-------+-------+
+----------------------------+----------+-------+-------+
|            Pool            |   type   |  used | avail |
+----------------------------+----------+-------+-------+
| kubernetes_cephfs_metadata | metadata | 1920k | 17.8G |
|   kubernetes_cephfs_data   |   data   |  215M | 17.8G |
+----------------------------+----------+-------+-------+
+-------------+
| Standby MDS |
+-------------+
| ceph-node-1 |
+-------------+
+-----------------------------------------------------------------------------------+-------------+
|                                      version                                      |   daemons   |
+-----------------------------------------------------------------------------------+-------------+
|                                        None                                       | ceph-node-2 |
| ceph version 14.2.22 (ca74598065096e6fcbd8433c8779a2be0c889351) nautilus (stable) | ceph-node-1 |
+-----------------------------------------------------------------------------------+-------------+

5.卸载MDS的方法

1:(可选)创建一个新的MDS将要被移除的MDS,如果在删除MDS之后没有替代MDS可以接管,则文件系统将对客户端不可用,如果不希望这样做,请在删除要脱机的元数据服务器之前考虑添加元数据服务器

2:停止MDS服务

systemctl stop ceph-mds@${id}

MDS将自动通知mon它已关闭,这使mon能够将故障瞬间切换到可用的备用数据库(如果存在)。无需使用管理命令来实现此故障转移,例如通过使用ceph mds fail mds.${id}

3:删除/var/lib/ceph/mds/ceph-${id}目录

rm -rf /var/lib/ceph/mds/ceph-${id}

注意:卸载掉集群中所有的MDS后,Cephfs文件系统将不可用,再次部署完MDS后,需要将所有的cephfs以及对应的Pool资源池删掉,否则集群就会有问题。

6.小插曲

如果一台机器中挂载了两个Cephfs,虽然是两个不通的Cephfs文件系统,但是都挂载的是/目录。

image-20220416172348470

此时使用df目录查看挂载信息时,只会显示第一个挂载的Cephfs文件系统。

image-20220416172501023

http://www.lryc.cn/news/427379.html

相关文章:

  • 单片机烧录
  • mysql实现分布式锁
  • MySQL快速使用
  • LeetCode41.缺失的第一个正数
  • ee trade:黄金投资与股票投资的区别
  • AI视频创作原理
  • idea vue项目删除node_modules时报文件损坏且无法读取,导致删除失败
  • Linux下编译安装-单机模式
  • RSSI定位算法
  • 布局管理(Layouts)-Qt-思维导图-学习笔记
  • 《区块链赋能游戏业:破解虚拟资产交易与确权难题》
  • 机器学习第十一章-特征选择与稀疏学习
  • C#中客户端直接引用服务端Proto文件
  • SiLM5932SHO系列SiLM5932SHOCG-DG 12A/12A强劲驱动电流能力 支持主动短路保护功能(ASC)单通道隔离门极驱动器
  • 本地项目上传github
  • 使用zip包来安装mysql
  • 嵌入式面经篇十——驱动开发
  • MySQL(四)——常用函数
  • C++ //练习 17.38 扩展上一题中你的程序,将读入的每个单词打印到它所在的行。
  • NC 丑数
  • Spring Boot 整合 Spring AI 实现项目接入ChatGPT(OpenAl的调用)
  • react中 useContext 和useReducer的使用
  • Android:动态更新app启动图标和应用名
  • 深入探讨 ElementUI 动态渲染 el-table
  • 数据炼金术:用Python爬虫精炼信息
  • C++第三十八弹---一万六千字使用红黑树封装set和map
  • ★ C++基础篇 ★ vector 类
  • 原生js用Export2Excel导出excel单级表头和多级表头数据方式实现
  • 急需翻译PDF文件怎么办?pdf翻译在线快速帮你解决
  • 线程安全的集合类和并发数据结构