当前位置: 首页 > 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

相关文章:

第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…...

单片机烧录

在设计芯片的时候&#xff0c;关于烧录的环节是一个不得不考虑的问题。 我们首先排除掉&#xff0c;由外部直接硬件操控FLASH 的方案&#xff0c;这个方案有很多缺点。 1、每个IC使用的FLASH型号是各不相同的&#xff0c;每种型号的FLASH的烧录命令和流程都有差别&#xff0c;这…...

mysql实现分布式锁

利用数据库的悲观锁实现分布式锁,实际应用中要考虑mysql的高可用。 DistributedLock.h #ifndef DistributedLock_H_ #define DistributedLock_H_// // DistributedLock.h: // #include "base/MySQLDriver.h" class CDistributedLock { public://// Construction/D…...

MySQL快速使用

关系型数据库&#xff08;RDBMS&#xff09;&#xff1a;建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库 特点&#xff1a;使用表存储数据&#xff0c;格式统一方便维护&#xff1b;使用SQL语言操作&#xff0c;标准统一使用方便 通用语法&#xff1a; …...

LeetCode41.缺失的第一个正数

1. 题目大意 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 2. 思路分析 示例 1&#xff1a; 输入&#xff1a;nums [3,4,-1,1] 输出&#xff1a;2 解释&#xff1…...

ee trade:黄金投资与股票投资的区别

黄金和股票&#xff0c; 是金融市场中两种常见的投资工具&#xff0c; 它们拥有截然不同的特点和风险&#xff0c; 了解它们的差异&#xff0c; 可以帮助投资者制定更合理的投资策略。 一、 投资性质&#xff1a; 避险与成长&#xff0c; 两种投资方向 黄金&#xff1a; 被视…...

AI视频创作原理

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…...

idea vue项目删除node_modules时报文件损坏且无法读取,导致删除失败

解决办法&#xff0c;查看node_modules所在盘&#xff0c;右击点击属性-工具&#xff0c;点击检查驱动&#xff0c;查完后修复即可&#xff0c; 就能够成功删除损坏的文件了...

Linux下编译安装-单机模式

1.1 Linux下编译安装-单机模式 1.1.1 安装 (1).把安装包放在Linux文件系统下 (2).解压缩 tar -zxf redis-4.0.2.tar.gz (3).切换到解压后的目录 cd redis-4.0.2(4).编译 make(5).进入到src目录 cd src(6).执行安装 make install(7) .返回上级目录 cd .. (8) .修改配置&…...

RSSI定位算法

文章目录 一、定位算法简介1.1. 定位技术原理1.2. 定位算法二、RSSI测距原理2.1. 建模与测量终端到基站的距离三、定位3.1. 三边定位算法3.2. 加权三边定位算法3.3. 加权三角形质心定位算法3.4. 程序定位算法的执行流程一、定位算法简介 1.1. 定位技术原理 定位终端接收到iBe…...

布局管理(Layouts)-Qt-思维导图-学习笔记

布局管理(Layouts) Qt 提供了非常丰富的布局类&#xff0c;主要包括以下基本布局管理类 QBoxLayout 提供了水平和垂直的布局管理&#xff0c;可以将子部件按行或列排列。根据排列方向的不同&#xff0c;QBoxLayout 分为 QHBoxLayout&#xff08;水平布局&#xff09;和 QVBox…...

《区块链赋能游戏业:破解虚拟资产交易与确权难题》

在当今数字化的时代&#xff0c;游戏行业正以前所未有的速度发展&#xff0c;虚拟资产在游戏中的重要性日益凸显。然而&#xff0c;虚拟资产的交易和确权问题一直困扰着游戏开发者和玩家。随着区块链技术的引入&#xff0c;为解决这些问题带来了新的曙光。 首先&#xff0c;我…...

机器学习第十一章-特征选择与稀疏学习

11.1子集收集与评价 属性称为"特征" &#xff0c;对当前学习任务有用的属性称为"相关特征" 、没什么用的属性称为"无关特 征" . 从给定的特征集合中选择出相关特征于集的过程&#xff0c;称为"特征选择"。 特征选择是一个重要的"…...

C#中客户端直接引用服务端Proto文件

gRPC 客户端是从 .proto 文件生成的具体客户端类型。 具体 gRPC 客户端具有转换为 .proto 文件中 gRPC 服务的方法。 下一步打开【服务引用】 控制面板 选择grpc选项&#xff0c;然后继续 到此配置完成&#xff0c;然后就和服务共用一份protocol文件...

SiLM5932SHO系列SiLM5932SHOCG-DG 12A/12A强劲驱动电流能力 支持主动短路保护功能(ASC)单通道隔离门极驱动器

SiLM5932SHO系列是一款单通道隔离驱动器&#xff0c;提供12A源电流和12A灌电流。主动保护功能包括退饱和过流检测、UVLO、隔离故障报警和 4A 米勒钳位。输入侧电源的工作电压为3V至5.5V&#xff0c;输出侧电源的工作电压范围为13V至30V。所有电源电压引脚都有欠压锁定 (UVLO) 保…...

本地项目上传github

一、先在github&#xff08;GitHub: Let’s build from here GitHub&#xff09;上创建仓库 1&#xff0c;登录github后&#xff0c;点击右上角头像&#xff0c;点击 Your repositories 2&#xff0c;点击new 3&#xff0c;填写仓库名&#xff0c;假设命名 testhub&#xff0…...

使用zip包来安装mysql

下载 下载地址mysql,使用5.7.23 配置环境变量 添加到系统变量中 C:\Users\Admin\Downloads\mysql-5.7.23-win32\bin 添加my.ini配置文件 在C:\Users\Admin\Downloads\mysql-5.7.23-win32目录下添加my.ini [mysqld] # 设置3306端口 port3306# 自定义设置mysql的安装目录 b…...

嵌入式面经篇十——驱动开发

文章目录 前言一、驱动开发1、Linux 驱动程序的功能是什么&#xff1f;2、内核程序中申请内存使用什么函数&#xff1f;3、内核程序中申请内存和应用程序时申请内存有什么区别&#xff1f;4、自旋锁和信号量在互斥使用时需要注意什么&#xff1f;在中断服务程序里面的互斥是使用…...

MySQL(四)——常用函数

文章目录 函数字符串函数数值函数日期函数流程函数 函数 函数&#xff0c;是指一段可以直接被另一段程序调用的程序或代码。 MySQL中内置了许多函数&#xff0c;我们只需在合适的场景下调用它们即可&#xff0c;调用函数查询结果直接使用SELECT即可&#xff0c;并且可以嵌套使…...

C++ //练习 17.38 扩展上一题中你的程序,将读入的每个单词打印到它所在的行。

C Primer&#xff08;第5版&#xff09; 练习 17.38 练习 17.38 扩展上一题中你的程序&#xff0c;将读入的每个单词打印到它所在的行。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 #include<iostream> #include<…...

NC 丑数

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 把只包含质因…...

Spring Boot 整合 Spring AI 实现项目接入ChatGPT(OpenAl的调用)

当前各种AI项目层出不穷&#xff0c;但绝大多数都是用python写的&#xff0c;现在Spring开源了Spring AI项目&#xff0c;让Java开发者也可以轻松给自己的springboot项目集成AI能力。目前spring AI正式版本为0.8.1&#xff0c;支持接入openAI、Ollama、Azure openAI、Huggingfa…...

react中 useContext 和useReducer的使用

在React中&#xff0c;useContext 和 useReducer 是两个非常有用的Hooks&#xff0c;它们分别用于管理跨组件的状态和复杂的状态逻辑。下面将分别介绍这两个Hooks的使用方式及其结合使用的场景。 1. useContext useContext 允许你订阅React的Context变化。Context提供了一种在…...

Android:动态更新app启动图标和应用名

一、需求背景 每逢重要佳节&#xff0c;很多应用启动图标会自动更新为对应佳节的图标&#xff0c;应用无需更新。 二、效果图 更新后的启动图标和应用名称 三、实现流程 Android app只能替换内置的icon&#xff0c;因此需要提前将logo图标放入App资源文件件里 实际项目App更新…...

深入探讨 ElementUI 动态渲染 el-table

在前端开发中&#xff0c;表格是不可或缺的一部分。无论是数据展示、数据录入&#xff0c;还是数据分析&#xff0c;表格都扮演着重要的角色。而在 Vue.js 生态系统中&#xff0c;ElementUI 提供了一个强大且灵活的表格组件——el-table。本文将带你深入了解如何使用 ElementUI…...

数据炼金术:用Python爬虫精炼信息

标题&#xff1a;数据炼金术&#xff1a;用Python爬虫精炼信息 在数据泛滥的互联网时代&#xff0c;Python爬虫不仅是搜集信息的利器&#xff0c;更是清洗和格式化数据的炼金术。本文将带你走进数据清洗和格式化的世界&#xff0c;展示如何使用Python爬虫从海量网络信息中提取…...

C++第三十八弹---一万六千字使用红黑树封装set和map

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、set/map基本结构 2、红黑树基本结构改造 3、红黑树的迭代器 4、set的模拟实现 5、map的模拟实现 6、完整代码 1、set/map基本结构 在封装…...

★ C++基础篇 ★ vector 类

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C基础篇第六章----vector类 ~ 目录 一 vector的介绍及使用 1.1 vector的介绍 1.2 vector的使用 1.2.1 vector的定义 1.2.2 vector iterator 的使用 1.2.3 vector 空间增长问题 1.2.4 vecto…...

原生js用Export2Excel导出excel单级表头和多级表头数据方式实现

原生js用Export2Excel导出excel单级表头和多级表头数据方式实现 原生js用Export2Excel导出excel单级表头和多级表头数据方式实现HTML文件导入需要的文件HTML文件中实现导出函数HTML总代码实现汇总&#xff08;直接复制代码&#xff0c;注意js引入路径&#xff09; 原生js用Expo…...

急需翻译PDF文件怎么办?pdf翻译在线快速帮你解决

面对满屏幕密密麻麻的pdf文件&#xff0c;我常常感到头疼&#xff01; 语言障碍让我在获取信息的道路上踌躇不前&#xff0c;但自从我发现了pdf在线翻译成中文的神奇工具&#xff0c;一切问题似乎都迎刃而解。 这些软件不仅让我能够快速跨过语言壁垒&#xff0c;还让我在学术…...