Ceph入门到精通-bluestore IO流程及导入导出

bluestore

直接管理裸设备,实现在用户态下使用linux aio直接对裸设备进行I/O操作

写IO流程:
一个I/O在bluestore里经历了多个线程和队列才最终完成,对于非WAL的写,比如对齐写、写到新的blob里等,I/O先写到块设备上,然后元数据提交到rocksdb并sync了,才返回客户端写完成(在STATE_KV_QUEUED状态的处理);对于WAL(即覆盖写),没有先把数据写块设备,而是将数据和元数据作为wal一起提交到rocksdb并sync后,这样就可以返回客户端写成功了,然后在后面的动作就是将wal里的数据再写到块设备的过程,对这个object的读请求要等到把数据写到块设备完成整个wal写I/O的流程后才行,代码里对应的是_do_read里先o->flush()的操作,所以bluestore里的wal就类似filestore里的journal的作用

bluestore 元数据

Bluestore的 所有的元数据都以KV对的形式写入RocksDB中,主要有以下的元数据:

// 保存BlueStore的超级块信息,在KV中, 以PREFIX_SUPER为Key的前缀 
const string PREFIX_SUPER = “S”; // field -> value
// 保存Collection的元数据信息bluestore_cnode_t 
const string PREFIX_COLL = “C”; // collection name -> cnode_t
// 保存对象的元数据信息 
const string PREFIX_OBJ = “O”; // object name -> onode_t

//需要主要的是,onode 和 enode的信息 都 以PREFIX_OBJ 为前缀,只是同一个对象的onode和 enode的信息的key不同来区分。

// 保存 overly 信息 
const string PREFIX_OVERLAY = “V”; // u64 + offset -> data

// 保存对象的omap 信息 
const string PREFIX_OMAP = “M”; // u64 + keyname -> value

// 保存 write ahead log 信息 
const string PREFIX_WAL = “L”; // id -> wal_transaction_t

// 保存块设备的空闲extent信息 
const string PREFIX_ALLOC = “B”; // u64 offset -> u64 length (freelist)
ceph bluefs

内存文件系统,mount的时候,通过扫码日志,在内存中还原出整个文件系统的状况

ceph 高级工具
  • ceph-bluestore-tool
ceph-bluestore-tool bluefs-export --path /var/lib/ceph/osd/ceph-0 --out-dir ./osd0
  • ceph-kvstore-tool

ceph-kvstore-tool bluestore-kv /var/lib/ceph/osd/ceph-0/ list > ceph.osd0.kvstore
ceph-kvstore-tool rocksdb /var/lib/ceph/mon/ceph-storage46/store.db/ list > mon.list
ceph-kvstore-tool bluestore-kv /var/lib/ceph/osd/ceph-0/ get C 1.11_head out tmp
  • ceph-objectstore-tool

ceph-objectstore-tool --op list-pgs --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore
ceph-objectstore-tool --pgid 7.0 --op log --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore > pglog.txt
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore --pgid 17.3 hello.txt get-bytes
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore hello.txt get-attr -
ceph crush算法

image.png

osd crush weight和 osd reweight区别

OSD上面数据相对不平衡时,我们应该使用ceph osd reweight 命令修改reweight值,而不应该使用ceph osd crush reweight 命令修改weight值。原因在于,修改reweight值将不会改变bucket的weight,而如果修改weight值就会改变整个bucket的weight。bucket weight 一旦改变,就会导致数据在bucket之间进行迁移,而不是在bucket内部进行迁移,这能最小化数据的转移量

ceph pg平衡工具
  • reweight
  • balancer
  • upmap+osdmap
    http://www.strugglesquirrel.com/2019/05/22/超实用的pg均衡工具upmap/
操作rados

import rados
import sys

cluster = rados.Rados(conffile='/etc/ceph/ceph.conf')
print "\nlibrados version: " + str(cluster.version())
print "Will attempt to connect to: " + str(cluster.conf_get('mon initial members'))

cluster.connect()

print "\nCluster ID: " + cluster.get_fsid()

print "\n\nCluster Statistics"
print "=================="
cluster_stats = cluster.get_cluster_stats()

for key, value in cluster_stats.iteritems():
    print key, value

ioctx = cluster.open_ioctx('mypool')
ioctx.aio_write("name","liu",offset=0)
ioctx.aio_write("name","liu",offset=1024)
ioctx.aio_flush()
参考

ceph bluestore非对齐写入策略
https://blog.csdn.net/Z_Stand/article/details/99654729

ceph 读流程

从Primary OSD中读取(offset,length)指定部分的内容即可,不牵扯到多个OSD之间的交互

image.png

ceph 写流程

写流程之所以比读流程复杂源于多个方面

  • 牵扯多个OSD的写入,如何确保多副本之间一致性 (PGLog)
  • 对于单个OSD的写入,如何确保最终的一致性 (Journal and FileStore)
  • 多个副本所在的OSD,状态可能不是active + clean

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

0003net程序设计-net旅游景点推荐系统

文章目录 摘 要目录系统设计开发环境 摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生&#…

多模态 多引擎 超融合 新生态!2023亚信科技AntDB数据库8.0产品发布

9月20日,以“多模态 多引擎 超融合 新生态”为主题的亚信科技AntDB数据库8.0产品发布会成功举办,从技术和生态两个角度全方位展示了AntDB数据库第8次大型能力升级和生态建设成果。浙江移动、用友、麒麟软件、华录高诚、金云智联等行业伙伴及业界专家共同…

Goland连接服务器/虚拟机远程编译开发

创建SSH连接 SSH用于与远程服务器建立连接 Settings -> Tools -> SSH Configurations 添加新的ssh连接,Host为ip地址,Username为用户名,认证方式这里选择密码验证 全部填完后可以点击Test Connection测试连接是否成功 创建Deployment…

nginx 转发数据流文件

1.问题描述 后端服务,从数据库中查询日志,并生成表格文件返回静态文件。当数据量几兆时,返回正常,但是超过几十兆,几百兆,就会超过网关的连接超时时间30秒。 时序图 这里面主要花费时间的地方在&#xff…

SPSS单样本t检验

前言: 本专栏参考教材为《SPSS22.0从入门到精通》,由于软件版本原因,部分内容有所改变,为适应软件版本的变化,特此创作此专栏便于大家学习。本专栏使用软件为:SPSS25.0 本专栏所有的数据文件请点击此链接下…

在excel中如何打出上标、下标

例如,想把A2的2变为下标。 在单元中输入内容: 选中2: 右键单击,然后点击“设置单元格格式”: 在特殊效果的下面勾选“下标”,然后点击下面的“确定”按钮: 就将2变为下标了:…

线扫相机DALSA--采集卡Base模式设置

采集卡默认加载“1 X Full Camera Link”固件,Base模式首先要将固件更新为“2 X Base Camera Link”。 右键SCI图标,选择“打开文件所在的位置”,找到并打开SciDalsaConfig的Demo,如上图所示: 左键单击“获取相机”&a…

【错误解决方案】ModuleNotFoundError: No module named ‘xgboost‘

1. 错误提示 在尝试导入名为xgboost的模块时出现了ModuleNotFoundError。 错误提示:ModuleNotFoundError: No module named xgboost 这个错误通常意味着Python环境中没有安装你试图导入的模块。 2. 解决方案 安装xgboost模块即可解决上述问题。 可以通过Python…

对于SOCKET套接字问题的若干认识

1. 首先大家应该知道Socket 编程吧 Socket套接字 分为 应用层套接字 数据链路层套接字(也就是原始socket) 1.流套接字(SOCK_STREAM) 流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复送,并按顺序接…

智能运维第一步:HDD磁盘故障预测

当今数字化时代,信息技术扮演着企业和组织运营的关键角色。然而,随着IT环境不断复杂化和数据量激增,传统的运维管理方法已经无法满足日益增长的需求。为应对这一挑战,智能运维(Artificial intelligence for IT operati…

【Linux】常见指令以及具体其使用场景

君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们,这里是君兮_,随着博主的学习,博主掌握的技能也越来越多,今天又根据最近的学习开设一个新的专栏——Linux,相信Linux操作系…

Redis代替session实现用户验证

一、Redis代替session实现用户验证。 下图是session的实现登录需要实现的代码模块,虽然可以实现完整功能,但是仍然存在一些问题。 在以往使用session当作用户验证的过程中,会有session共享的问题,每次承担请求的tomcat是不一样…

okhttp post请求 header post参数加密遇到的两个问题

如果你对于网络请求用了https后是否还有必要对参数加密有疑问可以看我上篇的文章:网络安全https 记得耐心看完,下面说问题: Caused by: java.lang.IllegalArgumentException: Unexpected char 0x0a 一开始以为是okhttp框架对特殊字符做了现在…

Python小试牛刀:GUI(图形界面)实现计算器界面

Python GUI 是指 Python 图形用户界面库,它们可以帮助开发者创建在计算机上运行的图形用户界面(GUI)。下面是一些常用的 Python GUI 库: Tkinter: Tkinter 是 Python 的标准 GUI 库,它是一个开源的、跨平台…

【C++】多态 ⑧ ( 验证指向 虚函数表 的 vptr 指针 | 对比定义了虚函数的类和没有定义虚函数类的大小 )

文章目录 一、验证指向 虚函数表 的 vptr 指针 是否存在1、虚函数表与 vptr 指针由来2、虚函数类与普通函数类对比 - 多出了 vptr 指针的大小 对比 定义了 虚函数 的类 与 没有定义虚函数的类 的大小 , 其它成员都相同 , 定义了虚函数的类多出了 4 字节 , 多出的 4 字节就是 vp…

Windows11无法打开Photoshop CC 2017问题解决

情况描述: Windows11上,双击Photoshop CC 2017没反应 解决办法: 此时需要启动Windows的“事件查看器”来确认问题出在哪里。可以直接通过开始菜单搜索启动,也可以通过右键点击“此电脑”->“管理”,然后找到事件查…

《微聊》JMeter性能测试报告

文章目录 准备工作JMeter准备工作本地配置代理 测试规划测试方向预期方向异常处理 压力测试录制注册功能压力注册功能压力脚本录制录制功能压力测试脚本完善注册功能压力测试结果 登录功能压力录制登录功能压力测试脚本构造压力测试数据完善登录功能性能测试脚本登录功能压力测…

Servlet的继承树,生命周期和线程不安全

1、Servlet 继承树 3)Servlet的继承树 - Servlet接口public interface Servlet{public void init(config);public void service(request,response);public void destroy();} - GenericServlet抽象类public abstract class GenericServlet implements Servlet{实现了init方法和d…

android查漏补缺(8)Binder framework架构和调用方法

1.Binder简介 Binder是android系统中实现进程间通信的主要组件,包括各种AMS,PMS,SMS等服务和APK的通信都是通过binder实现。但是调用过PMS的同学肯定会有疑问,既然是进程通信,怎么没有消息的发送和接收,为什么调用不同进程的服务的…

出海数字化,国产CRM如何支撑?纷享销客这样思考

2023年,疫情阴霾逐渐消散,企业全球化扩张的齿轮重新加速。以科技企业、高端制造业为代表的优秀企业引领中国企业出海浪潮,外资企业在华的经营活跃度也在提升。 无论是”外资在华经营“还是”中资出海“,这些具备全球化理想的企业…