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

Ceph client 写入osd 数据的两种方式librbd 和kernel rbd

在Ceph存储系统中,客户端(Ceph client)写入OSD(Object Storage Daemon)数据确实可以通过两种主要方式:librbd和kernel rbd。这两种方式各有特点和适用场景,下面将分别进行详细介绍。

librbd方式

  1. 概述
    librbd是Ceph提供的块存储接口的抽象,它提供了多种编程语言的接口,如C/C++、Python等。通过librbd,客户端可以直接与Ceph集群进行交互,实现对块设备的访问和管理。

  2. 工作原理
    当客户端使用librbd方式写入数据时,它不会将rbd设备映射到内核中,而是直接调用librbd提供的接口。librbd会对要写入的二进制块进行分块,每块默认大小为4MB,并给每个块命名,成为一个对象。然后,librbd会调用librados(Ceph的底层对象存储接口)将对象写入Ceph集群。librados会根据CRUSH算法计算出对象所对应的主OSD,并与该OSD建立TCP/IP连接,发送写入请求。主OSD负责将数据写入其磁盘,并同时向一个或多个次OSD写入副本,以保证数据的高可用性和冗余性。

  3. 特点与优势

    • 不需要在客户端产生块设备文件,直接通过接口访问和管理块设备。
    • 提供了灵活的编程接口,适用于多种开发语言和场景。
    • 支持数据的并发写入和高效管理。

kernel rbd方式

  1. 概述
    kernel rbd是另一种使用Ceph块存储的方式,它将rbd设备映射到内核中,形成一个虚拟的块设备。这个虚拟块设备与其他通用块设备一样,可以使用标准的块设备操作进行管理。

  2. 工作原理
    在kernel rbd模式下,客户端首先会创建一个rbd设备,并将其映射到内核中。映射成功后,客户端可以看到一个虚拟的块设备文件(如/dev/rbd0)。然后,客户端可以对这个块设备文件进行格式化、挂载等操作,就像操作普通的块设备一样。当客户端向这个块设备写入数据时,数据会通过内核的块设备驱动程序传递到librbd和librados,最终写入到Ceph集群中的OSD上。

  3. 特点与优势

    • 提供了与标准块设备兼容的接口,方便现有应用系统的迁移和集成。
    • 适用于需要直接操作块设备的场景,如虚拟机磁盘、数据库存储等。
    • 借助内核的块设备驱动程序,可以提供更好的性能和稳定性。

总结

librbd和kernel rbd是Ceph客户端写入OSD数据的两种主要方式。librbd提供了灵活的编程接口和高效的数据管理功能,适用于多种开发语言和场景;而kernel rbd则提供了与标准块设备兼容的接口,方便现有应用系统的迁移和集成。在选择使用哪种方式时,需要根据具体的应用场景、性能需求以及开发人员的技能水平进行综合考虑


http://www.kler.cn/a/395399.html

相关文章:

  • 《TCP/IP网络编程》学习笔记 | Chapter 10:多进程服务器端
  • 群控系统服务端开发模式-应用开发-前端登录接口开发
  • FBX福币交易所恒指收跌1.96% 半导体股继续回调
  • 基于ECS实例搭建Hadoop环境
  • unity单例模式的不同声明(待完善
  • SQL中的时间类型:深入解析与应用
  • vxe-vxe-colgroup后端返回数据 对数据进行处理 动态合并分组表头(v-if控制表格渲染(数据请求完成后渲染))
  • 动态规划技巧点
  • C# 教程总结概括
  • Flink中自定义Source和Sink的使用
  • LeetCode297.二叉树的序列化和反序列化
  • 计算机网络前三章计算题总结
  • C++基础:Pimpl设计模式的实现
  • 【Pikachu】目录遍历实战
  • 论文解析:计算能力资源的可信共享:利益驱动的异构网络服务提供机制
  • 群控系统服务端开发模式-应用开发-前端角色功能开发
  • 解决Oracle DECODE函数字符串截断问题的深度剖析20241113
  • Ubuntu相关指令
  • 数据结构Python版
  • sqoop import将Oracle数据加载至hive,数据量变少,只能导入一个mapper的数据量
  • 【GPTs】MJ Prompt Creator:轻松生成创意Midjourney提示词
  • 【Git从入门到精通】——Git分支介绍与GitHub相关知识总结
  • Spring Boot与工程认证:计算机课程管理的新纪元
  • Spring Boot框架:电商系统的设计与实现
  • 037 RabbitMQ集群
  • 【Linux】多线程(中)