您好,登錄后才能下訂單哦!
小編給大家分享一下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進程啟動處理流程的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。