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

开发一个网站成本用手机制作自己的网站

开发一个网站成本,用手机制作自己的网站,wordpress首页制作,简书wordpress主题Tag: ceph 12.2.4 BlueStore空间初始化 BlueStore磁盘空间管理 总述 OSD挂载目录基于文件系统管理,Slow、WAL、DB空间区域基于裸盘管理;Slow区域:此类空间主要用于存储对象数据,由BlueStore管理,其中分配于BlueFS空…

Tag: ceph 12.2.4

BlueStore空间初始化

BlueStore磁盘空间管理

总述

  1. OSD挂载目录基于文件系统管理,Slow、WAL、DB空间区域基于裸盘管理;
  2. Slow区域:此类空间主要用于存储对象数据,由BlueStore管理,其中分配于BlueFS空间段使用bluefs_extents结构进行管理;
  3. WAL区域:单独由BlueFS管理并且对于BlueStore不可见,上电时由BlueFS自身负责初始化,对于.log文件以及自身产生的日志,BlueFS优先选择使用WAL类型设备空间,如果不存在或者WAL设备空间不足,则逐级降级选择DB、SLOW分区;
  4. DB区域:单独由BlueFS管理并且对BlueStore不可见,上电时由BlueFS自身负责初始化;对于.sst文件,则优先使用DB类型设备空间,如果不存在或者DB设备空间不足,则选择Slow类型设备空间;
  5. rocksdb:基于文件系统KV存储引擎,外部接口供BlueStore调用;
  6. BlueStore为支持rocksdb, 实现小型文件系统BlueFS,同时实现BlueRocksEnv为rocksdb提供底层系统封装;
  7. BlueFS: 扁平化目录和文件层次(树状)组织结构,定位某个具体文件共需要经过两次查找:通过dir_map找到文件所在最底层文件夹;再在该文件夹下file_map找到对应文件;每个文件bluefs_fnode_t结构管理,extents属性表示磁盘上的物理段集合,prefer_bdev属性表示存储该文件优先使用的块设备;extents集合中各个extent中bdev属性标识归属设备,每个文件都可能使用来自多个不同块设备(WAL、DB和Slow)空间;BlueFS:_allocate方法指定各个extent中bdev_属性值;重新上电,通过BlueFS::_replay通过DB分区第二个4K存储空间(superblock)固定入口位置,读取日志文件内容重放还原元数据(dir_map、file_map)。

初始化过程

[ceph_osd.cc]
int main(int argc, const char **argv)
>> OSD::mkfs(g_ceph_context, store, g_conf->osd_data, mc.monmap.fsid, whoami);[OSD.cc]
int OSD::mkfs(CephContext *cct, ObjectStore *store, const string &dev, uuid_d fsid, int whoami)
>> store->mkfs();
>> store->mount();[BlueStore.cc]
int BlueStore::mkfs()
>> _setup_block_symlink_or_file("block", cct->_conf->bluestore_block_path,cct->_conf->bluestore_block_size, cct->_conf->bluestore_block_create);
>> _setup_block_symlink_or_file("block.wal", cct->_conf->bluestore_block_wal_path,cct->_conf->bluestore_block_wal_size, cct->_conf->bluestore_block_wal_create);
>> _setup_block_symlink_or_file("block.db", cct->_conf->bluestore_block_db_path,cct->_conf->bluestore_block_db_size, cct->_conf->bluestore_block_db_create);
>> _open_db(true);
>> _open_fm(true);  初始化FreelistManager[BlueStore.cc]
int BlueStore::_open_db(bool create)
>> if (do_bluefs):>> bluefs = new BlueFS(cct);>> bluefs->add_block_device(BlueFS::BDEV_DB, bfn);
>> if (create): bluefs->add_block_extent(BlueFS::BDEV_DB, SUPER_RESERVED, bluefs->get_block_device_size(BlueFS::BDEV_DB) - SUPER_RESERVED);
>> if (create):>> bluefs->add_block_extent(bluefs_shared_bdev, start, initial);>> bluefs_extents.insert(start, initial);
>> if (create):>> bluefs->add_block_extent(BlueFS::BDEV_WAL, BDEV_LABEL_BLOCK_SIZE, bluefs->get_block_device_size(BlueFS::BDEV_WAL) - BDEV_LABEL_BLOCK_SIZE);
>> if (create): bluefs->mkfs(fsid);
>> bluefs->mount();[BlueFS.cc]
int BlueFS::mkfs(uuid_d osd_uuid)
>> _init_alloc();
>> 设置superblock信息
>> 初始化log_file[BlueFS.cc]
int BlueFS::mount()
>> _init_alloc();
>> _replay(false);
>> for (auto& p : file_map):for (auto& q : p.second->fnode.extents):alloc[q.bdev]->init_rm_free(q.offset, q.length);
>> log_writer = _create_writer(_get_file(1));[BlueFS.cc]
int BlueFS::_replay(bool noop)
>> 逐个回放事务op

BlueStore调用rocksdb相关接口

RocksDBStore实现KeyValueDB接口,BlueStore通过RocksDBStore实现对rocksdb操作。

open操作

[BlueStore.cc]
int BlueStore::_open_db(bool create)
>> db = KeyValueDB::create(cct, kv_backend, fn, static_cast<void*>(env));
>> if (create): db->create_and_open(err);[RocksDBStore.cc]
int RocksDBStore::create_and_open(ostream &out)
>> do_open(out, true);[RocksDBStore.cc]
int RocksDBStore::do_open(ostream &out, bool create_if_missing)
>> rocksdb::DB::Open(opt, path, &db);

read操作

[BlueStore.cc]
int BlueStore::read(const coll_t& cid, const ghobject_t& oid,uint64_t offset, size_t length, bufferlist& bl, uint32_t op_flags)
>> read(c, oid, offset, length, bl, op_flags);[BlueStore.cc]
int BlueStore::read(CollectionHandle &c_, const ghobject_t& oid,uint64_t offset, size_t length, bufferlist& bl, uint32_t op_flags)
>> OnodeRef o = c->get_onode(oid, false);
>> _do_read(c, o, offset, length, bl, op_flags);
[注]
每个Onode包含一个ExtentMap,每个ExtentMap包含若干个Extent,
每个Extent负责管理一段逻辑范围内的数据并管理一个Blob,
由Blob通过若干个pextent负责将数据映射到磁盘[BlueStore.cc]
BlueStore::OnodeRef BlueStore::Collection::get_onode(const ghobject_t& oid, bool create)
>> store->db->get(PREFIX_OBJ, key.c_str(), key.size(), &v);[KeyValueDB.h]
virtual int get(const string &prefix,const char *key, size_t keylen, bufferlist *value)
>> get(prefix, string(key, keylen), value);[KeyValueDB.h]
virtual int get(const std::string &prefix, const std::string &key, bufferlist *value)
>> get(prefix, ks, &om);[RocksDBStore.cc]
int RocksDBStore::get(const string &prefix,const string &key, bufferlist *out)
>> db->Get(rocksdb::ReadOptions(), rocksdb::Slice(k), &value);

write操作

[BlueStore.cc]
void BlueStore::_kv_sync_thread()
>> db->submit_transaction_sync(synct);[KeyValueDB.h]
virtual int submit_transaction_sync(Transaction t)
>> submit_transaction(t);[RocksDBStore.cc]
int RocksDBStore::submit_transaction(KeyValueDB::Transaction t)
>> db->Write(woptions, &_t->bat);

remove操作

数据库中删除指定元数据键值对

[BlueStore.cc]
int BlueStore::_remove(TransContext *txc, CollectionRef& c, OnodeRef &o)
>> _do_remove(txc, c, o);[BlueStore.cc]
int BlueStore::_do_remove(TransContext *txc,CollectionRef& c, OnodeRef o)
>> txc->t->rmkey(PREFIX_OBJ, o->key.c_str(), o->key.size());[KeyValueDB.h]
virtual void rmkey(const std::string &prefix,   const char *k, size_t keylen)
>> rmkey(prefix, string(k, keylen));[RocksDBStore.cc]
void RocksDBStore::RocksDBTransactionImpl::rmkey(const string &prefix, const string &k)
>> bat.Delete(combine_strings(prefix, k));

compact操作

可通过客户端命令行中对OSD相关指令(asok_command)

[BlueStore.h]
void compact() override
>> db->compact();[RocksDBStore.cc]
void RocksDBStore::compact()
>> db->CompactRange(options, nullptr, nullptr);

[参考文献]

  1. 《Ceph设计原理与实现》 第2章 性能之巅—新型对象存储引擎BlueStore
http://www.mmbaike.com/news/76444.html

相关文章:

  • 温州网站建设服务电子商务网络公司百度管理员联系方式
  • 北京建设网站方舟爸爸网站制作优化
  • 哪些网站可以直接做英文字谜百度服务电话
  • 最新企业网站开发和设计软件最佳搜索引擎
  • html网页制作实验报告郑州seo建站
  • 申请建设活动中心网站四川网络推广推广机构
  • 公司网站建设优点百度指数快刷软件
  • 秦皇岛手机网站制作网络营销推广方案模板
  • 北京高端网站建设宣传加入网络营销公司
  • 某运动服网站建设规划书竞价托管 微竞价
  • Wordpress 淘宝客 页面seo快速排名系统
  • 宜春网站制作重庆森林经典台词截图
  • 不会被封的网站谁做流量查询网站
  • 专门做av字幕的网站有哪些湖南网站建站系统哪家好
  • java开发手机网站快速优化官网
  • 网站robots.txt查看网站建设有多少公司
  • 网站的建设包括聊城网站开发
  • 电子商务网站开发技术2023年适合小学生的新闻
  • 吴江网站开发太原网络推广公司哪家好
  • 小学免费资源网站模板网站怎么优化关键词
  • react做的网站央视新闻
  • 个人网站域名后缀网站建设需要多少钱?
  • 用wordpress 登录滨州网站seo
  • 南宁会员网站制作aso推广公司
  • 网站体验调查问卷怎么做刷神马关键字排名软件
  • 做网站需要用到技术杭州排名优化软件
  • 移动商城网站建设 深圳seo优化靠谱吗
  • 做网站用的动漫资料建站模板
  • ssh框架做音乐网站常见的网络营销推广方式有哪些
  • 连云港网站关键字优化如何最火的推广平台