ceph中JewelOSD进程启动处理流程的示例分析

小编给大家分享一下ceph中Jewel OSD进程启动处理流程的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

创新互联网站建设公司是一家服务多年做网站建设策划设计制作的公司,为广大用户提供了网站建设、做网站,成都网站设计,一元广告,成都做网站选创新互联,贴合企业需求,高性价比,满足客户不同层次的需求一站式服务欢迎致电。

OSD::main()

|__ObjectStore::create()

     |__调用FileStore构造函数创建FileStore类对象

|__MonClient::build_initial_monmap()          从配置文件中读取monitor map信息

|__OSD::mkfs()

     |__FileStore::mkfs()     

          |__在/var/lib/ceph/osd/ceph-${id}/目录下生成fsid文件

          |__在/var/lib/ceph/osd/ceph-${id}/目录下创建version_stamp文件

          |__在/var/lib/ceph/osd/ceph-${id}/目录下创建superblock文件

          |__在/var/lib/ceph/osd/ceph-${id}/目录下创建current文件夹

          |__在/var/lib/ceph/osd/ceph-${id}/current/目录下创建commit_op_seq文件且初始化该文件的内容为1

          |__在/var/lib/ceph/osd/ceph-${id}/current/omap/目录下创建osd_uuid文件(current/omap目录是OSD omap的工作目录)

          |__FileStore::mkjournal()     

               |__FileStore::new_journal()

                    |__FileJournal()构造函数来创建FileJournal实例

          |__在/var/lib/ceph/osd/ceph-${id}/目录下创建type文件且向该文件中写入filestore

     |__FileStore::mount()

          |__FileStore::read_fsid()

          |__FileStore::version_stamp_is_valid()     检查version_stmap文件是否有效并读取该文件中的内容

          |__FileStore::read_superblock()               读取superblock文件中的内容

          |__在/var/lib/ceph/osd/ceph-${id}/current/目录下创建nosnap文件

          |__把/var/lib/ceph/osd/ceph-${id}/current/omap目录作为omap_store的基准目录,调用KeyValueDB::create()创建KeyValueDB实例

          |__FileStore::new_journal()                         创建journal

          |__JournalingObjectStore::journal_start()   启动journal

          |__启动ondisk_finishers和apply_finishers线程池

     |__FileStore::read()         从”meta”中读取superblock对象信息且保存到OSDSuperblock类对象中

     |__比较superblock中的cluster_fsid是否有效

     |__OSD::write_meta()     将magic/whoami/ceph_fsid/ready信息写入到/var/lib/ceph/osd/ceph-${id}/目录下对应的文件中

|__对于需要创建key来说,使用EntityAuth.CryptoKey来创建一个key且将新建的key添加到keyring中,同时也将该keyring写入到/var/lib/ceph/osd/ceph-${id}/目录下keyring文件中

|__对于需要创建journal来说,调用FileStore::mkjournal()函数来创建journal

|__OSD::peek_meta()          从/var/lib/ceph/osd/ceph-${id}/目录下对应的文件中读取magic/cluster_fsid/osd_fsid/whoami信息

|__pick_addresses()               从配置文件中读取public_addr和cluster_addr值

|__创建client/cluster/hbclient/hb_back_server/hb_front_server的Messenger类实例。一般情况下client和hb_front_server用public_addr,cluster/hbclient/hb_back_server用cluster_addr

|__MonClient::build_initial_monmap()          从配置文件中创建MonMap

|__调用OSD类构造函数创建OSD类对象

|__OSD::pre_init()

|__启动client/cluster/hbclient/hb_back_server/hb_front_server的Messenger类实例

|__OSD::init()

     |__tick_timer.init()                                                  初始化心跳定时器

     |__OSDService.backill_request_timer.init()           初始化backfill请求定时器

     |__ObjectStore::mount()                                        挂载文件系统

     |__OSD::read_superblock()                                   从集群中读取superblock信息且保存到OSDSuperblock类对象中

     |__确保snapmapper对象存在于”meta”中

     |__创建ClassHandler类实例

     |__get_map()                                                           根据superblock中记录的当前epoch值获取osdmap,若osdmap没有在map_cache中则从”meta”的osdmap.epoch中读取osdmap且同步到map_cache中

     |__OSD::load_pgs()                                                  读取OSD上所有的pg信息

          |__FileStore::list_collections()                         遍历/var/lib/ceph/osd/ceph-${id}/current/目录下所有目录且只要TYPE_PG

               |__coll_t.parse()                                         解析/var/lib/ceph/osd/ceph-${id}/current/目录下所有目录,meta对应TYPE_META,_head对应TYPE_PG,_TEMP对应TYPE_TEMP

          |__遍历所有TYPE_PG

               |__调用PG::peek_map_epoch()函数

               |__OSD::_open_lock_pg()                              

                    |__OSD::_make_pg()                                   创建ReplicatedPG类实例

               |__PG::read_state()                                   读取PG的状态

                    |__PG::read_info()                                   从omap中读取_infover/_info/_biginfo属性值

                    |__PGLog::read_log()                              读取PGLog信息,根据PGLog信息得到missing的信息

               |__OSDMap::pg_to_up_acting_osds()          计算出该PG对应的OSDs

               |__PG::init_primary_up_acting()                    这个PG所对应的OSDs

               |__OSDMap::calc_pg_role()                         计算出PG的roles

               |__PG::set_role()

               |__PG::reg_next_scrub()                              注册下一次进行scrub的操作

          |__OSD::build_past_intervals_parallel()

     |__OSD::create_logger()                                         创建OSD logger

     |__MonClient::init()                                                  初始化MonClient类实例

     |__启动osd_tp/osd_op_tp/recovery_tp/disk_tp/command_tp线程池

     |__OSDService::init()                                                初始化OSDService

     |__MonClient::authenticate()                                    做Monitor认证

     |__OSD::update_crush_location()                             OSD启动后更新crushmap操作,可以在配置文件中设置osd_crush_update_on_start = false来禁止OSD启动后更新crushmap

     |__OSDService::final_init()

     |__OSD::consume_map()

     |__OSD::start_boot()

|__OSD::finial_init()

     |__注册一系列通过socket进行操作的命令

以上是“ceph中Jewel OSD进程启动处理流程的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


当前标题:ceph中JewelOSD进程启动处理流程的示例分析
文章链接:http://hbruida.cn/article/pshggd.html