
ceph
帮我起个网名
这个作者很懒,什么都没留下…
展开
-
Ceph Monitor选主(下)
选举主动启动选举的节点向monmap中的其它节点发送OP_PROPOSE请求,并将选举的epoch加1,置为奇数。void Monitor::start_election()_reset();elector.call_election(); start();acked_me.clear();init();epoch = mon->store->get(Monitor::MONITOR_NAME, “election_epoch”);if (!epoch)epoch = 1;原创 2020-06-16 17:48:26 · 818 阅读 · 0 评论 -
Ceph Monitor选主(上)
monitor选主主要包括前期准备和选主两部分选主前期准备发送探测消息任何一个monitor节点都可以发起选举,选举的入口函数是bootstrapbootstrap cancel_probe_timeout(); if (probe_timeout_event) timer.cancel_event(probe_timeout_event); probe_timeout_event = NULL; // monitor状态改变 state = STATE_PROBING;原创 2020-06-16 14:57:19 · 931 阅读 · 0 评论 -
Ceph Monitor Paxos实现
Monitor的Paxos实现主要包括Leveldb、Paxos和PaxosService三层,其中Leveldb负责底层存储,Paxos负责Paxos算法的具体实现,PaxosService则是基于Paxos提供的服务,包括OSDMap、MonitorMap、PGMap、CRUSHMap。标题Paxos实现Monitor节点分为一个leader节点和多个peon节点,且只有leader节点可以发起提议,下面以monmap更新分析Paxos实现。leader向各个peon节点发送OP_BEGIN消息.原创 2020-06-15 21:42:03 · 1104 阅读 · 1 评论 -
ceph monitor选主流程
本人分析了monitor启动时的日志信息,结合源码最终整理了选主流程图,如下原创 2019-12-15 14:52:34 · 449 阅读 · 0 评论 -
ceph bluefs 写操作 源码解析
ceph bluefs的写操作是由RocksDB的Write之类的操作而触发的,其最终经过层层调用,最后会调用bluefs提供的一些列精简过的接口。一、创建一个可写文件rocksdb::Status BlueRocksEnv::NewWritableFile BlueFS::FileWriter *h; fs->open_for_write(dir, file, &h, fa...原创 2019-02-22 22:41:39 · 2251 阅读 · 0 评论 -
ceph bluestore 写操作源码分析(上)
bluestore写操作分为大写和小写,写操作经过层层处理后最终被传递到BlueStore::queue_transactions函数中,如下:ReplicatedBackend::submit_transaction parent->queue_transactions(tls, op.op); //调用PrimaryLogPG::queue_transactions ...原创 2019-02-15 15:50:54 · 7159 阅读 · 2 评论 -
ceph bluefs 日志压缩解析
bluefs的操作大量增加时,日志也会增加,从而增加占用空间,由于文件系统的元数据在内存中都有记录,且内存中的元数据都是非重复的,因此可以通过遍历元数据,将元数据重新写到日志文件当中,即可实现日志的压缩。具体是_compact_log_async函数来实现的...原创 2019-02-25 16:08:52 · 1522 阅读 · 0 评论 -
ceph pg peering和恢复 (1)
pg是ceph中比较抽象的一个概念,且起到了一个承上启下的作用,客户端的对象映射到pg,而pg映射到具体的osd,pg的peering和恢复是ceph中比较复杂的一部分了。因为pg的创建过程会经历pg peering和恢复的所有过程,因此我们可以从创建pg的流程来分析pg的peering和恢复。pg的创建请求类型是MSG_OSD_PG_CREATE,到达osd后,osd中的_dispatch会继...原创 2019-03-09 18:52:28 · 2541 阅读 · 1 评论 -
ceph pg peering和恢复 (2)
主osd收到副osd发送来的MSG_OSD_PG_NOTIFY消息后,会将该消息中所带的osd的日志信息合并到本地。主osd收到MSG_OSD_PG_NOTIFY消息后,会调用ms_fast_dispatch进行处理,其调用栈如下OSD::ms_fast_dispatch(Message *m) case MSG_OSD_PG_NOTIFY: //pg中其他从osd发来的MOSDPGN...原创 2019-03-10 15:58:04 · 1287 阅读 · 1 评论 -
ceph BlueStore缓存解析
ceph bluestore缓存中保存的是object的信息,包括元数据和实际数据,元数据是用LRUCache实现的,实际数据是用TwoQCache实现的。#define P(x) \ namespace x { \ static const mempool::pool_index_t id = mempool::mempool_##x; \ te...原创 2019-03-26 17:32:44 · 2788 阅读 · 0 评论 -
ceph bluestore 磁盘空间管理源码解析
ceph minic版本的bluestore默认使用BitmapFreelistManager来管理磁盘空闲空间,并将磁盘空间使用情况固化到rocksdb。同时bluestore使用StupidAllocator来分配磁盘空间。在bluestore申请空间时要BitmapFreelistManager和StupidAllocator配合完成。关于FreelistManager,在osd上电时,会...原创 2019-02-17 18:47:52 · 2119 阅读 · 0 评论 -
ceph bluefs 启动加载源码解析(上)
ceph bluefs负责对接rocksdb,是一个精简的文件系统,往下整合磁盘设备,往上给rocksdb提供一些必须的接口,其在ceph bluestore架构中所处于的位置如下图所示。ceph bluefs的上电加载过程是利用_open_db函数实现的。如果是创建osd,则调用方式是_open_db(true),如果是启动osd,则调用方式是_open_db(false, !open_d...原创 2019-02-22 16:51:43 · 1825 阅读 · 0 评论 -
ceph bluestore 写操作源码分析(下)
在https://blog.youkuaiyun.com/u014104588/article/details/87277341中,分析了bluestore对于大写和小写不同的处理方式,最后采用异步写和延迟写的方法。在_txc_state_proc函数中,处理了异步写和延迟写的情况(分别成为simple write和deferred write)。simple write此情况会发生在写新blob和可复用...原创 2019-02-16 11:50:27 · 2755 阅读 · 0 评论 -
ceph集群提示pgs: 100.000% pgs unknown的一个解决办法
搭完集群后,ceph -w提示[root@node1 ~]# ceph -w cluster: id: 2386c327-8eb1-4dd7-9fed-fedff947c383 health: HEALTH_WARN Reduced data availability: 128 pgs inactive services: mo...原创 2018-11-05 14:36:10 · 10626 阅读 · 0 评论 -
gdb调试ceph时找不到文件的原因及解决方法
我的ceph版本为13.2.2以ceph-osd为例子在CMakeLists.txt中可以看到如下几行编译ceph-osd的代码add_subdirectory(osd)set(ceph_osd_srcs ceph_osd.cc)add_executable(ceph-osd ${ceph_osd_srcs})add_dependencies(ceph-osd erasure_code...原创 2018-11-12 22:08:34 · 1379 阅读 · 0 评论 -
利用systemtap分析ceph源码
**利用systemtap分析ceph源码**一:安装systemtapyum install systemtap[root@twozero iso_map]# rpm -qa | grep systemtapsystemtap-2.8-10.el7.x86_64二:安装ceph和对应的debuginfo安装ceph-debuginfo(必须和所安装的ceph版本一...原创 2018-12-15 22:26:51 · 1333 阅读 · 1 评论 -
编译ceph时提示“ld: cannot find -lBoost: :boost”的解决方法
编译ceph源码时提示/opt/rh/devtoolset-7/root/usrilibexec/gcc/x86_64-redhat-tinux/7/ld: cannot find -lBoost::boost /opt/rh/devtoolset-7/root/usr/Ubexec/gcc/x86_64-redhat-linux/711d: cannot find -lThreads::Th...原创 2018-12-17 20:50:05 · 2230 阅读 · 0 评论 -
openstack swift临时url设置
(1)利用radosgw创建subuser(因为我用的后端存储是ceph,不是的话就可以用其他方法)radosgw-admin user create --subuser=testuser:zy --uid=testuser --display-name=“zy test” --access=full{ "user_id": "testuser", "display_name...原创 2019-01-10 19:01:22 · 980 阅读 · 0 评论 -
修改ceph源码——增加函数级别日志输出功能
ceph中原有日志功能介绍当前ceph中的日志只能做到某一子系统(subsystem)的某一级别日志,比如给ceph_subsys_osd子系统设置日志级别为5,则表示任何级别小于等于5的osd子系统日志都可以输出到日志文件。关于子系统日志级别设置有两种方法(1)在配置文件中指定比如debug_osd 5 就是将osd子系统的日志输出级别设置为5(2)利用admin_socket动态...原创 2019-01-03 14:43:51 · 1396 阅读 · 0 评论 -
ceph AsyncMessenger模块源码分析(上)
1原创 2019-01-24 18:30:25 · 2044 阅读 · 0 评论 -
ceph AsyncMessenger模块源码分析(下)
处理连接请求对于AsyncMessenger,当新的连接请求到达时,epoll会监听到该事件,并调用listenfd对应的回调函数listen_handler(C_processor_accept),在listen_handler中,会获取引用次数最少的worker(为了负载均衡),用改worker去处理这一个连接请求。具体做法为(1)调用listen_socket.accept(&c...原创 2019-01-25 20:00:22 · 1120 阅读 · 0 评论 -
ceph bluestore中读操作的处理
在读请求到达后_do_read函数会调用如下函数来处理具体的读操作,其中op.extent.offset和op.extent.length是在对象内的偏移和长度pgbackend->objects_read_sync(soid, op.extent.offset, op.extent.length, op.flags, &osd_op.outdata)‘’在objects_re...原创 2019-02-02 21:55:36 · 2142 阅读 · 0 评论 -
ceph-磁盘名变化导致osd重启失败
一个主机上面的osd如下 /dev/sdc osd.4 /dev/sdd osd.5 /dev/sde osd.6 /dev/sdf osd.7 如果 因为某些原因,将/dev/sda或者/dev/sdb磁盘拿掉的话,开机的时候磁盘的序号就会向前便宜,可能情况如下 /dev/sdc -> /dev/sdd /dev/sd原创 2016-12-08 10:35:38 · 2177 阅读 · 0 评论