ceph笔记

librbd:RBD rbd; //操作rbd的实例对象—这里librbd是namespace,RBD是类名
librados::IoCtx io_ctx, dest_io_ctx; //与pool关联的上下文
librbd::Image image; //镜像

librados::RadosClient
librados::IoCtxImpl

Objecter *objecter;

1、函数的重载:指的是函数名字一样 但是参数不一样。C++支持函数重载的深层原理就是在编译的时候将将函数的参数也编译成函数名的方式进行区分。比如如果在C语言中,函数func(int x, int y)编译后函数名就为func,而如果是C++编译器编译出来的话则就是func_int_int的方式,这样就能做到区分函数重载了。这就是C语言编译器和C++编译器不一样的原理。C++就是靠这种机制来实现函数重载的。同样的道理如果C++中定义了类中的变量和全局变量如果同名的话,为类中的变量取名也是一样的,会区别于全局变量中的名字。

2、extern “C”的作用是由于,C代码可能会调用C++定义的函数,但是在C++中定义的函数是遵循函数重构的,也就是说C++的函数名是可能定义成 func_int_int形式的,这样如果C代码调用C++中函数就不能找到函数符号(func),所以为了解决这样的问题,就需要在C++代码中将这样的函数显示用关键字限定为extern “C”是为了告诉编译器不按照C++的方式编译函数名,而是根据C语言的方式进行函数名命名。

Ceph的数据层次关系
这里写图片描述

1、首先创建Pool
2、指定Pool的PG个数,副本个数,
3、在Pool中创建RBD设备,创建RBD时候需要指定创建多大。
4、RBD会被切成4M的对象块,对应一个文件(rbd0.object1.file)

创建RBD设备是通过librbd的,如果想这个RBD设备写入数据,则会调用librados接口,先后经过Pool->rbd->object->pg—-(socket)———>osd
这里写图片描述

OSDmap 其实就是一棵树,这棵树管理了所有的OSD,作为叶子节点来管理的,而非叶子节点则用来表示数据中心,机房,机架,单台服务器等。这些非叶子节点称之为bucket,树上每个节点都存在权值。目的就是用来做crush算法选举使用的。
这里写图片描述

也可以把osdmap理解为整个集群的物理拓扑图。
这里写图片描述

Crush定义了4种bucket数据结构,适用于不同的算法。
这里写图片描述
算法流程:
假设我组建一套存储系统,有3个机架(host),每个机架上有4台主机(host),每个主机上有2个磁盘(device),则一共有24个磁盘。预计的扩展方式是添加主机或者添加机架。
这里写图片描述

我们的bucket有三种: root、rack、host。root包含的item是rack,root的结构是straw。rack包含的item是host,rack的结构是tree。host包括的item是device,host的结构式uniform。这是因为每个host包括的device的数量和权重是一定的,不会改变,因此要为host选择uniform结构,这样计算速度最快。

2、创建Pool流程

调用接口:
librados::Rados::pool_create
client->pool_create(str);
librados::RadosClient::pool_create
wait_for_osdmap();/先是获取osdmap,获取失败后,则返回/
objecter->create_pool;///* 开始创建pool,并设置了回调函数onfinish
这里写图片描述
接着调用函数Objecter::create_pool();
这里写图片描述

这里写图片描述

构造函数的初始化列表:
造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。这种方式初始化成员是显示的初始化类的成员。如果是在类内的话,后面还需要有个{},如果是在类外函数中显示初始化,则直接在函数名后加上初始化列表。
这里写图片描述

初始化列表初始化成员变量和直接在类中进行成员变量赋值都是可以的,但是有些情况则用赋值的方式函数不行的,比如没有构造函数,或者成员变量定义为const类型,则不能进行复制。此时就只能进行初始化方式。
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值