Ceph:关于Ceph 集群如何访问的一些笔记

news2024/11/15 17:24:07

写在前面


  • 准备考试,整理 Ceph 相关笔记
  • 博文内容涉及,Ceph 集群四种访问方式介绍及 Demo,Ceph 客户端支持的操作介绍
  • 理解不足小伙伴帮忙指正

对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》


Ceph 访问方式

Ceph 提供四种访问 Ceph 集群的方法:

  1. Ceph 原生 API (librados):通过 客户端调用 API 接口,最快
  2. Ceph 块设备(RBD、librbd),也称为 RADOS 块设备 (RBD) 镜像
  3. Ceph 对象网关(RADOSGW,RGW,librgw)
  4. Ceph 文件系统(CephFS、libcephfs)

在这里插入图片描述

上图描述了Ceph集群的四种数据访问方法,支持访问方法的库,以及管理和存储数据的底层Ceph组件

Ceph 原生API (librados)

librados 是原生C 库,允许应用直接使用 RADOS 来访问 Ceph 集群中存储的对象,可以用 C++、Java、Python、Ruby、Erlang 和 PHP,编写软件以直接与 librados 配合使用可以提升性能,为了简化对 Ceph 存储的访问,也可以改为使用提供的更高级访问方式,如 RADOS 块设备、Ceph 对象网关 (RADOSGW) 和 CephFS

Demo

import rados

# 初始化 Ceph 集群连接
cluster = rados.Rados(conffile='/etc/ceph/ceph.conf')
cluster.connect()

# 获取所有 OSD 的状态信息
osd_stats = cluster.get_osdmap().dump()
for osd in osd_stats['osds']:
    print('OSD ID: {}, Up: {}, In: {}'.format(osd['osd'], osd['up'], osd['in']))

# 关闭 Ceph 集群连接
cluster.shutdown()

这个 Python 脚本通过 rados 模块来连接 Ceph 集群,然后使用 get_osdmap() 方法获取 OSD 的状态信息,并打印出每个 OSD 的 ID、Up 和 In 状态。最后使用 shutdown() 方法关闭连接。

RADOS 块设备(RBD)

Ceph 块设备(RADOS 块设备或 RBD)通过 RBD 镜像在 Ceph 集群内提供块存储。它是一种虚拟块设备

Ceph 分散在集群不同的 OSD 中构成 RBD 镜像的个体对象。由于组成 RBD 的对象分布到不同的 OSD,对块设备的访问自动并行处理

RBD 提供下列功能:

  1. Ceph 集群中虚拟磁盘的存储
  2. Linux 内核中的挂载支持
  3. QEMU、KVM 和 OpenStack Cinder 的启动支持

RBD 是指 Ceph 块设备(Ceph Block Device)。它是一种基于 Ceph 存储集群的虚拟块设备,可以提供高性能、可扩展和高可用性的存储服务,尤其适合于云计算和虚拟化环境中使用。

Demo

要使用 RBD,需要完成以下几个步骤:

创建 RBD 镜像,首先需要创建一个 RBD 镜像,可以使用 rbd create 命令来创建,例如:

$ rbd create <pool>/<image> --size <size>

其中 <pool> 是存储池名称,<image> 是镜像名称,<size> 是镜像大小。

映射 RBD 镜像,接下来需要将 RBD 镜像映射到本地系统上,可以使用 rbd map 命令来实现,例如:

$ rbd map <pool>/<image>

格式化和挂载 RBD 设备,完成映射后,RBD 镜像会作为一个设备出现在本地系统上,可以通过格式化和挂载来使用它,例如:

$ mkfs.ext4 /dev/rbdX
$ mount /dev/rbdX /mnt/rbd

其中 /dev/rbdXRBD 设备名,/mnt/rbd 是挂载点。

使用 RBD 设备,完成挂载后,就可以像使用本地磁盘一样使用 RBD 设备了,例如在 /mnt/rbd 下创建文件、目录等操作。要卸载 RBD 设备,可以使用 umount /mnt/rbd 命令,并通过 rbd unmap 命令来取消映射,例如:

$ rbd unmap /dev/rbdX

以上就是使用 Ceph 中的 RBD 的基本流程。值得注意的是,RBD 镜像的大小并不是固定不变的,也可以使用 rbd resize 命令来扩展或缩小镜像的大小。

Ceph 对象网关(RADOS 网关)

Ceph 对象网关(RADOS 网关、RADOSGW 或 RGW)是使用librados 构建的对象存储接口。它使用这个库来与 Ceph 集群通信并且直接写入到 OSD 进程。

它通过 RESTful API 为应⽤提供了网关,并且支持两种接口:Amazon S3 和 OpenStack Swift

Ceph 对象网关提供扩展支持,它不限制可部署的网关数量,而且支持标准的 HTTP 负载均衡器。它解决的这些案例包括:

  1. 镜像存储(例如,SmugMug 和 Tumblr)
  2. 备份服务
  3. 文件存储和共享(例如,Dropbox)

Demo

import boto3

# 初始化 S3 客户端连接
s3 = boto3.client('s3',
                  endpoint_url='http://<RGW_HOST>:<RGW_PORT>',
                  aws_access_key_id='<ACCESS_KEY>',
                  aws_secret_access_key='<SECRET_KEY>')

# 将文件上传到 Ceph 对象存储桶中
with open('/path/to/local/file', 'rb') as f:
    s3.upload_fileobj(f, '<BUCKET_NAME>', 'object_key')

# 从 Ceph 对象存储桶中下载文件
with open('/path/to/local/file', 'wb') as f:
    s3.download_fileobj('<BUCKET_NAME>', 'object_key', f)

# 删除 Ceph 对象存储桶中的对象
s3.delete_object(Bucket='<BUCKET_NAME>', Key='object_key')

Ceph 文件系统 (CephFS)

Ceph 文件系统 (CephFS) 是一种并行文件系统,提供可扩展的、单层级结构共享磁盘,Ceph 元数据服务器 (MDS) 管理与 CephFS 中存储的文件关联的元数据 ,这包括文件的访问、更改和修改时间戳等信息

Demo

在运行前,请确保已经安装了 ceph-fuse 工具,并正确配置了 CephFS 文件系统的访问密钥等信息

# 挂载 CephFS 文件系统
sudo mount -t ceph <MONITOR_IP>:<MONITOR_PORT>:<ROOT_DIR> <MOUNT_POINT> -o name=<USERNAME>,secret=<SECRET_KEY>

# 读取文件内容
cat <MOUNT_POINT>/path/to/file

# 卸载 CephFS 文件系统
sudo umount <MOUNT_POINT>

这个 shell 脚本使用 mount 和 umount 命令来挂载和卸载 CephFS 文件系统,并使用 cat 命令来读取指定文件的内容。其中<MONITOR_IP><MONITOR_PORT>是 Ceph 集群监视器的 IP 地址和端口号,<ROOT_DIR> 是 CephFS 文件系统的根目录,<USERNAME> <SECRET_KEY> 是访问 CephFS 的用户名和密码,<MOUNT_POINT> 是要挂载文件系统的本地目录路径,<MOUNT_POINT>/path/to/file 是要读取的文件路径。

Ceph客户端支持的操作

支持云计算的应用程序需要一个有异步通讯能力的简单对象存储接口,Ceph 存储集群提供了这样的接口。客户端直接并行访问对象,包括:

  • 池操作
  • 快照
  • 读/写对象
    • 创建或删除
    • 整个对象或字节范围
    • 追加或截断
  • 创建/设置/获取/删除 XATTRs
  • 创建/设置/获取/删除键/值对
  • 复合操作和 dual-ack 语义

当客户端写入 RBD 映像时,对象映射跟踪后端已存在的RADOS对象,当写入发生时,它会被转换为后端RADOS对象中的偏移量,当对象映射特性启用时,将跟踪RADOS对象的存在以表示对象存在,对象映射保存在librbd客户机的内存中,以避免在osd中查询不存在的对象

对象映射对于某些操作是有益的,例如:

  • 重新调整大小
  • 导出
  • 复制
  • 平衡
  • 删除

存储设备有吞吐量限制,这会影响性能和可伸缩性。存储系统通常支持条带化,即跨多个存储设备存储连续的信息片段,以提高吞吐量和性能。当向集群写入数据时,Ceph客户端可以使用数据分条来提高性能

博文部分内容参考

© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知,这是一个开源项目,如果你认可它,不要吝啬星星哦 😃


https://docs.ceph.com/en/pacific/architecture/

https://docs.ceph.com

CL260 授课老师课堂笔记


© 2018-2023 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/655910.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

科大讯飞星火大模型评测:从职场到日常生活,样样精通

文 | 大力财经 今年最热门的话题当属OpenAI发布ChatGPT 3.5版本&#xff0c;全球用户对此纷纷追捧。在国内领域&#xff0c;百度、阿里巴巴、字节跳动、360、腾讯和科大讯飞等厂商纷纷推出大型模型&#xff0c;加入“百模大战”的竞赛。 大模型在自然语言处理领域可以显著提高…

推荐几款适用的项目管理工具,助力您的项目更高效运作

随着企业规模的扩大和业务范围的增加&#xff0c;中小型企业近年来越来越重视项目管理。Zoho Projects 是一款适用于中小型企业的项目管理工具&#xff0c;可以帮助中小型企业更好地进行项目管理&#xff0c;提高工作效率和协作效果。 一、强大的项目管理能力 Zoho Projects提供…

华为OD机试之AI面板识别

AI面板识别 题目描述 AI识别到面板上有N&#xff08;1 ≤ N ≤ 100&#xff09;个指示灯&#xff0c;灯大小一样&#xff0c;任意两个之间无重叠。 由于AI识别误差&#xff0c;每次别到的指示灯位置可能有差异&#xff0c;以4个坐标值描述AI识别的指示灯的大小和位置(左上角…

启智平台使用教程

1.创建项目 填写完需要的信息后&#xff0c;点击“创建项目”即可。 进入到下面这个界面 2.创建调试任务 点击“新建调试任务” 算力集群推荐选择“智算网络集群” 新建项目的时候必须要选择镜像&#xff0c;可以根据自己的需要选择合适的镜像。可以把原镜像的安装包删除&…

基于html+css的图展示132

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

关于ASA搜索竞价排名广告

通过调研发现&#xff0c;60%的应用是通过搜索引擎发现的&#xff0c;这一定程度上也反映出用户需要先通过搜索引擎和社交媒体搜索寻找APP的占比较大&#xff0c;我们可以借助应用商店内的排名推荐广告&#xff0c;来改变应用被发现的渠道。 通过广告投放和ASO优化&#xff0c…

软件开发项目的工作量估算方法 —— 代码统计分析工具

目录 软件开发项目的阶段 工作量估算方法 参考比例 最佳实践 移植项目工作量评估工具 —— 代码统计分析工具 代码统计分析工具 —— 分析用参数调整面板 结论 在软件开发项目中&#xff0c;工作量估算是项目成功的关键之一。正确的工作量估算可以帮助开发团队做好时间管…

Elasticsearch 如何把评分限定在0到1之间?

本文题目来自微信群讨论。 在 Elasticsearch 中&#xff0c;评分&#xff08;或打分&#xff09;通常在查询过程中进行&#xff0c;以判断文档的相关性。 默认的打分机制使用的是 BM25&#xff0c;但你也可以通过自定义的打分查询&#xff08;function_score&#xff09;来自定…

Python进阶语法之lambda函数

Python进阶语法之lambda函数 在Python中&#xff0c;lambda函数也被称为匿名函数&#xff0c;它是定义简单函数的一种快捷方式。lambda函数与普通函数一样&#xff0c;可以接收任意数量的参数&#xff0c;但是只能有一个表达式。在本文中&#xff0c;我们将通过丰富的例子和解…

Python与深度学习:Keras、PyTorch和Caffe的使用和模型设计

第一章&#xff1a;介绍 深度学习已经成为当今计算机科学领域的热门技术&#xff0c;而Python则是深度学习领域最受欢迎的编程语言之一。在Python中&#xff0c;有多个深度学习框架可供选择&#xff0c;其中最受欢迎的包括Keras、PyTorch和Caffe。本文将介绍这三个框架的使用和…

Advanced-C.02.程序设计

C语言概述 C程序的结构 C语句分类 表达式语句 xyz; 函数调用语句 printf("Hello World!"); 控制语句 if语句、switch语句、do while语句、while语句、for语句、break语句、goto语句、continue语句、return语句 复合语句 {xy;yz;zx;} 空语句 while(getchar()!\n){;}…

数据结构-各种树(二叉树、二叉查找树、平衡二叉树、红黑树、B树、B+树)

文章目录 二叉树二叉查找树平衡二叉树红黑树B树B树 二叉树 概念&#xff1a;二叉树&#xff08;binary tree&#xff09;是指树中节点的度不大于2的有序树&#xff0c;它是一种最简单且最重要的树。二叉树的递归定义为&#xff1a;二叉树是一棵空树&#xff0c;或者是一棵由一…

【FPGA入门】第三篇、modelsim软件的仿真与应用

目录 第一部分、写在前面 第二部分、关于modelsim软件的相关使用 1、modesim软件新建工程 2、文件报错的解决办法 3、仿真的办法 4、仿真的软件上面的功能按键丢失 5、不同波形颜色的仿真代表的问题 5.1、红色的波形&#xff1a;不定态信号&#xff08;X态&#xff09…

【前端 - CSS】第 18 课 - 背景属性

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01; 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 ​​​​​​​ 目录 1、缘起 2、背景属性 2.1、背景图 2.2、背景图平铺方式 2.3、背景图位置 2.4、背景图缩放 2.5、背景图…

软件开发人员必须阅读的20本书

本文翻译自国外论坛 medium&#xff0c;原文地址&#xff1a;https://irina-seng.medium.com/top-20-books-a-software-developer-must-read-updated-b24bcc9ee3d 持续学习的心态是软件开发人员想要保持专业相关性并增长自身价值的关键品质。 在这篇博文中&#xff0c;我将推荐…

dp算法篇Day6

"垂死坚持啊" 26、环绕字符串中唯一的子字符串 (1) 题目解析 (2) 算法原理 class Solution { public:int findSubstringInWraproundString(string s) {int n s.size();vector<int> dp(n,1);for(int i1; i<n; i){if(s[i-1]1 s[i] || (s[i-1]z && …

JS 刷新保持iframe页面并支持浏览器前进后退

参考资料 html5新特性&#xff1a;利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题击按钮切换iframe的src&#xff0c;这个路径如何不会被记录到history中&#xff1f;iframe 后退 浏览器history 问题ajax与HTML5 history pushState/replaceState实例 目…

Matlab论文插图绘制模板第104期—带缺口的分组箱线图

在之前的文章中&#xff0c;分享了Matlab分组箱线图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一下带缺口的分组箱线图的绘制模板。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下载。有需…

PyQT5介绍及基本使用

文章目录 PyQt51. PyQt5的下载与安装1.1 PyQt5介绍1.2 windows PyQt5的安装 2.PyQt5基本UI2.1 第一个PyQt程序2.2 argv2.3 模块介绍 3.基本UI3.1 按钮QPushButton3.2 文本QLabel3.3 输入框3.4 调整窗口大小3.5 调整窗口显示屏幕中间3.6 设置窗口icon 4.布局4.1 QBoxLayout4.1.1…

Spring Security系列之授权(Authorization)架构

文章目录 AuthorizationManagerAuthorizationFilterRequest Matcher AuthorizationManager AuthorizationManager 被授 AuthorizationFilter 调用&#xff0c;负责做出最终的访问控制决定。AuthorizationManager 接口包含两个方法。 default void verify(Supplier<Authent…