Jewel OSD進程啓動處理流程

OSD::main()app

|__ObjectStore::create()socket

     |__調用FileStore構造函數建立FileStore類對象函數

|__MonClient::build_initial_monmap()          從配置文件中讀取monitor map信息ui

|__OSD::mkfs()線程

     |__FileStore::mkfs()     server

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

          |__在/var/lib/ceph/osd/ceph-${id}/目錄下建立version_stamp文件get

          |__在/var/lib/ceph/osd/ceph-${id}/目錄下建立superblock文件同步

          |__在/var/lib/ceph/osd/ceph-${id}/目錄下建立current文件夾it

          |__在/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進行操做的命令

相關文章
相關標籤/搜索