摘要:
容器set 解析 1. 例子 #include <boost/intrusive/set.hpp> #include <utility> #include <iostream> #include <string> using namespace boost::intrusive; struct ve
阅读全文
posted @ 2021-12-24 10:06
苏格拉底的落泪
阅读(147)
推荐(0)
摘要:
last_epoch_started介绍 Info中实际保存了两个last_epoch_started属 性,一个位于Info属性之下,另一个则位于Info的history属性之 下。 1. info.last_epoch_started由每个副本收到Primary发送的Peering完成通知之后更
阅读全文
posted @ 2021-12-23 16:57
苏格拉底的落泪
阅读(464)
推荐(0)
摘要:
boost::statechart Boost 提供了状态机的实现接口,采用了CRTP技术实现,下面以秒表为例子实现一个状态机,这是一个官方的例子,也可以参考资料:Boost Statechart 庫,状态机的状态转换图如下所示 实现代码如下: 1 #include <stdio.h> 2 #inc
阅读全文
posted @ 2021-12-22 22:27
苏格拉底的落泪
阅读(435)
推荐(0)
摘要:
boost::statechart Ceph在处理PG的状态转换时,使用了boost库提供的statechart状态机。因此,这里先简单介绍一下statechart状态机的基本概念和涉及的相关知识,以便更好地理解Peering过程PG的状态转换流程。 3.1 状态 在statechart里,状态的定
阅读全文
posted @ 2021-12-22 19:51
苏格拉底的落泪
阅读(1088)
推荐(0)
摘要:
OSDMap 机制浅析 OSDMap 机制是 Ceph 架构中非常重要的部分,PG 在 OSD 上的分布和监控由 OSDMap 机制执行。OSDMap 机制和 CRUSH 算法一起构成了 Ceph 分布式架构的基石。 OSDMap 机制主要包括如下3个方面: 1、Monitor 监控 OSDMap
阅读全文
posted @ 2021-12-22 17:07
苏格拉底的落泪
阅读(621)
推荐(0)
摘要:
paxos算法解析 阅读论文 《Paxos Made Simple》 选定提案的最简单方式就是只允许一个accpetor存在。Proposer发送提案给accpetor,Acceptor会选择它接收到的第一个提案作为被选定的提案。尽管简单,但是这个解决方式却很难让人满意,因为如果accpetor出错
阅读全文
posted @ 2021-12-21 22:46
苏格拉底的落泪
阅读(159)
推荐(0)
摘要:
流程细化 写流程:以 FileStore 后端存储为例 1)client把写请求发到Primary OSD上,Primary OSD上将写请求序列化到一个事务中(在内存里),然后构造一条pglog记录,也序列化到这个事务中,然后将这个事务以directIO的方式异步写入journal,同时Prima
阅读全文
posted @ 2021-12-20 16:16
苏格拉底的落泪
阅读(642)
推荐(0)
摘要:
peering 1.1 acting set和up set acting set是一个PG对应副本所在的OSD列表,该列表是有序的,列表中第一个OSD为主OSD。与up的区别在于,acting不是基于CRUSH计算出来的,而是基于一定的规则选出来;在通常情况下,up set和acting set列表
阅读全文
posted @ 2021-12-16 11:52
苏格拉底的落泪
阅读(618)
推荐(0)
摘要:
pg归纳总结 1.如下图: pg状态变化 1. 状态变化如下图: 参考资料 1. ceph存储 PG的状态机 源码分析 2. ceph PG设计,状态机,peering,recovery 导图
阅读全文
posted @ 2021-12-15 14:04
苏格拉底的落泪
阅读(173)
推荐(0)
摘要:
OSD的状态转化 状态意义位置 STATE_INITIALIZING OSD初始状态;新建OSD对象后,state的默认值。 class OSD STATE_PREBOOT OSD准备初始化;在OSD::start_boot中发送get_version消息之前设置。 OSD::start_boot
阅读全文
posted @ 2021-12-13 17:07
苏格拉底的落泪
阅读(134)
推荐(0)
摘要:
PG的生成过程 1. 首先将OSD对象new出来: 1 osd = new OSD(g_ceph_context, 2 store, 3 whoami, 4 ms_cluster, 5 ms_public, 6 ms_hb_front_client, 7 ms_hb_back_client, 8 m
阅读全文
posted @ 2021-12-13 14:03
苏格拉底的落泪
阅读(313)
推荐(0)
摘要:
peering 运行过程 1.写入object1。初始状态pg ,他由osd.0 、osd.1、osd.2组成的三副本形式,这时up集合为[0,1,2],acting集合为[0,1,2],acting_primary 为osd 0。这时该pg已经完成写入object1,那osd0,1,2上都保存这o
阅读全文
posted @ 2021-12-11 13:31
苏格拉底的落泪
阅读(264)
推荐(0)
摘要:
参考资料 1. VScode配置C/C++环境(MinGW) & 编写运行C/C++程序(Windows)
阅读全文
posted @ 2021-12-11 13:18
苏格拉底的落泪
阅读(83)
推荐(0)
摘要:
BACKOFF 通常,OSD会简单地将任何不能立即在内存中处理的请求进队,直到它可以处理的时间。这可能会产生问题,因为OSD会限制传入消息所消耗的RAM总量:如果达到消息数量或字节数量的任何一个阈值,新的消息将不会从网络套接字中读取,从而通过网络造成反压力。 然而,在某些情况下,OSD知道或预计PG
阅读全文
posted @ 2021-12-10 11:34
苏格拉底的落泪
阅读(461)
推荐(0)
摘要:
概述 OSD是RADOS集群的基本存储单元。 PG(placement group)从名字可理解为放置策略组,它是对象的集合,该集合里的所有对象都具有相同的放置策略:对象的副本都分布在相同的OSD列表上。一个对象只能属于一个PG,一个PG对应于放置在其上的OSD列表。一个OSD上可以分布多个PG。处
阅读全文
posted @ 2021-12-10 10:21
苏格拉底的落泪
阅读(2169)
推荐(0)
摘要:
OSD的内部队列 由于op可能各种各样的原因需要背推迟处理,为此PG内部维护了多种op重试队列,它们的含义下表所示: 队列名称 入队条件 wait_for_map 当收到op时,已经有来自同一个客户端的op存在于此队列中,,或者op携带的Epoch大于PG当前的Epoch waiting_for_p
阅读全文
posted @ 2021-12-09 22:02
苏格拉底的落泪
阅读(197)
推荐(1)
摘要:
PG相关命令 查询pool中pg的详细信息 ceph pg ls-by-pool default.rgw.buckets.data
阅读全文
posted @ 2021-12-09 16:53
苏格拉底的落泪
阅读(78)
推荐(0)
摘要:
boost安装 可执行文件下载:https://hadoop.apache.org/releases.html: yum install boost yum install boost-devel yum install boost-doc boost编译: ./bootstrap.sh ./b2
阅读全文
posted @ 2021-12-09 16:14
苏格拉底的落泪
阅读(497)
推荐(0)
摘要:
Ceph IO, Rados IO 流程解析(读写) CEPH RADOS IO(读写) 处理流程图: CPEH读写顺序保证: 不同对象的并发控制 不同的对象有可能落到同一个pg里,ceph实现里,在OSD的处理线程中就会给PG加锁,一直到queue_transactions里把事务放到bluest
阅读全文
posted @ 2021-12-09 14:19
苏格拉底的落泪
阅读(943)
推荐(0)
摘要:
稀疏写 我们知道一个文件的逻辑空间上是连续的,但是真正在磁盘上的物理空间分布并不一定是连续的。同时我们也会使用lseek系统调用,使得文件偏移量大于文件的长度,此时再对文件写入,便会在文件中形成一个空洞,这些空洞中的字节都是0。空洞是否占用磁盘空间是有文件系统决定的,不过大部分的文件系统ext4、x
阅读全文
posted @ 2021-12-09 10:04
苏格拉底的落泪
阅读(1027)
推荐(0)
摘要:
LExtent Extent是对象内的基本数据管理单元,数据压缩、数据校验、数据共享等功能都是基于Extent粒度实现的。这里的Extent是对象内的,并不是磁盘内的,所以我们称为lextent,和磁盘内的pextent以示区分。 struct Extent { // 对象内逻辑偏移,不需要块对齐。
阅读全文
posted @ 2021-12-08 16:44
苏格拉底的落泪
阅读(225)
推荐(0)
摘要:
参考资料 1. ceph bluestore 写操作源码分析(上) 2. ceph bluestore中的磁盘空间管理 3. Ceph luminous + bluestore存储引擎部署 4. BlueStore源码分析之对象IO 5. Ceph luminous + bluestore存储引擎部
阅读全文
posted @ 2021-12-08 10:21
苏格拉底的落泪
阅读(491)
推荐(0)
摘要:
int BlueStore::_minimal_open_bluefs(bool create) { bluefs = new BlueFS(cct); /** * 在这里,会创建三个块设备block.db、block、block.wal * * bluefs->add_block_device用于
阅读全文
posted @ 2021-12-07 18:25
苏格拉底的落泪
阅读(236)
推荐(0)
摘要:
参考资料 1. ceph-bluestore-tool 工具实践及源代码解析 2. Ceph-Volume源码分析osd创建和开机自启
阅读全文
posted @ 2021-12-07 16:41
苏格拉底的落泪
阅读(217)
推荐(0)
摘要:
预分配磁盘空间 我们在开发程序的过程中,往往需要预分配磁盘空间,防止因磁盘空间不够而引发程序异常问题(已踩过坑), 现网查阅资料,有些预分配磁盘空间的方法不正确。 1.1 posix_fallocate函数 函数原型: #include <fcntl.h> int posix_fallocate(i
阅读全文
posted @ 2021-12-06 22:13
苏格拉底的落泪
阅读(903)
推荐(0)
摘要:
参考资料 1.Linux Page Cache的理解 2. Linux系统中的Page cache和Buffer cache 3.Linux 的 Page Cache
阅读全文
posted @ 2021-12-06 21:35
苏格拉底的落泪
阅读(106)
推荐(0)
摘要:
BlueStore源码分析之BitMap分配器 参考资料 1. BlueStore源码分析之BitMap分配器
阅读全文
posted @ 2021-12-06 19:56
苏格拉底的落泪
阅读(190)
推荐(0)
摘要:
扇区与块/簇 如图所示,描述介绍了扇区、磁道等概念: A:Track 磁盘磁道(粉红色部分) B:Geometrical sector 几何学中的扇形(紫色部分) C:Track sector 磁盘扇区(玫红色部分) D:Cluster 块/簇(绿色部分) 说完扇区,就不得不提一些其他相关概念,因为
阅读全文
posted @ 2021-12-06 17:52
苏格拉底的落泪
阅读(449)
推荐(0)
摘要:
Ceph 集群在运行一段时间后常会碰到OSD 数据不均衡的时候,有的OSD 使用率超过的80%,有的甚至不足60%。一般有两种方法去均衡各个OSDs 间的数据 OSD Reweight 其实就是给各个OSDs 设置均衡权重(区别OSD weight 是根据容量设置的固定权重) 调整数据量超过阀值的O
阅读全文
posted @ 2021-12-06 14:13
苏格拉底的落泪
阅读(1899)
推荐(0)
摘要:
参考资料 1. ceph internal 之 底层对象
阅读全文
posted @ 2021-12-03 15:39
苏格拉底的落泪
阅读(49)
推荐(0)
摘要:
osd_data "/var/lib/ceph/osd/$cluster-$id" path to OSD data osd_journal "/var/lib/ceph/osd/$cluster-$id/journal" path to OSD journal (when FileStore ba
阅读全文
posted @ 2021-12-03 10:20
苏格拉底的落泪
阅读(90)
推荐(0)
摘要:
uuidgen ceph osd create uuidgen mkdir -R /var/lib/ceph/osd/ceph-3 ceph-osd -i 0 --mkfs --mkkey --osd-uuid 63970d8a-597a-4123-9767-097f88bbcd00 sudo ce
阅读全文
posted @ 2021-12-02 17:42
苏格拉底的落泪
阅读(162)
推荐(0)
摘要:
OSD模块在tp_osd_tp线程上下文的最后阶段,通过queue_transactions调用FileStore模块功能将操作请求以日志的方式提交到日志队列中,至此tp_osd_tp线程中的工作就完成了。后续由一个独立的日志写入线程journal_write从日志队列中取出操作日志并调用文件系统写
阅读全文
posted @ 2021-12-02 15:31
苏格拉底的落泪
阅读(417)
推荐(0)
posted @ 2021-12-02 15:08
苏格拉底的落泪
阅读(35)
推荐(0)
摘要:
OSD写操作失效如何处理 很多人对Ceph写操作的异常处理的过程还不是特别的清楚。本文就介绍Ceph如何处理异常处理的。 首先需要明确的是,Ceph的读写操作并没有超时机制。 rbd_write并没有超时机制。所有经常看到,用ceph -s 命令查看,有些 slow request请求会显示延迟 3
阅读全文
posted @ 2021-12-02 10:31
苏格拉底的落泪
阅读(675)
推荐(0)
摘要:
ceph-kvstore-tool 查看mon数据库中都有哪些表项 ceph-kvstore-tool rocksdb /var/lib/ceph/mon/ceph-node1/store.db/ list|awk '{print $1}'|uniq 参考资料 1. ceph-kvstore-too
阅读全文
posted @ 2021-12-02 09:37
苏格拉底的落泪
阅读(350)
推荐(0)
摘要:
class PG min_last_complete_ondisk 这个表示各个副本上last_complete的最小版本,是主OSD在收到3个副本都完成时再进行计算的,也就是计算last_complete_ondisk和其他副本OSD上的last_complete_ondisk,即peer_las
阅读全文
posted @ 2021-12-01 16:36
苏格拉底的落泪
阅读(77)
推荐(0)
摘要:
OSD 图解如下: 接下来我们看一下tp_osd_tp线程是如何处理分片中的请求,线程处理的核心函数是ShardedOpWQ::_process,其调用栈如下: ShardedOpWQ::_process() |-OpQueue<>::dequeue() |-OSD::_look_up_pg() \
阅读全文
posted @ 2021-12-01 15:42
苏格拉底的落泪
阅读(1005)
推荐(0)
摘要:
struct pg_log_entry_t { ObjectModDesc mod_desc; //用于保存本地回滚的一些信息,用于EC模式下的回滚操作 bufferlist snaps; //克隆操作,用于记录当前对象的snap列表 hobject_t soid; //操作的对象 osd_reqi
阅读全文
posted @ 2021-12-01 15:08
苏格拉底的落泪
阅读(958)
推荐(0)
摘要:
1.1 acting set和up set acting set是一个PG对应副本所在的OSD列表,该列表是有序的,列表中第一个OSD为主OSD。在通常情况下,up set和acting set列表完全相同。要理解他们的不同之处,需要理解下面介绍的“临时PG”概念。 1.2 临时PG 假设一个PG的
阅读全文
posted @ 2021-12-01 14:36
苏格拉底的落泪
阅读(746)
推荐(0)