共計(jì) 4299 個(gè)字符,預(yù)計(jì)需要花費(fèi) 11 分鐘才能閱讀完成。
丸趣 TV 小編給大家分享一下 ceph 中 Jewel OSD 進(jìn)程啟動(dòng)處理流程的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
OSD::main()
|__ObjectStore::create()
|__調(diào)用 FileStore 構(gòu)造函數(shù)創(chuàng)建 FileStore 類對(duì)象
|__MonClient::build_initial_monmap() 從配置文件中讀取 monitor map 信息
|__OSD::mkfs()
|__FileStore::mkfs()
|__在 /var/lib/ceph/osd/ceph-${id}/ 目錄下生成 fsid 文件
|__在 /var/lib/ceph/osd/ceph-${id}/ 目錄下創(chuàng)建 version_stamp 文件
|__在 /var/lib/ceph/osd/ceph-${id}/ 目錄下創(chuàng)建 superblock 文件
|__在 /var/lib/ceph/osd/ceph-${id}/ 目錄下創(chuàng)建 current 文件夾
|__在 /var/lib/ceph/osd/ceph-${id}/current/ 目錄下創(chuàng)建 commit_op_seq 文件且初始化該文件的內(nèi)容為 1
|__在 /var/lib/ceph/osd/ceph-${id}/current/omap/ 目錄下創(chuàng)建 osd_uuid 文件(current/omap 目錄是 OSD omap 的工作目錄)
|__FileStore::mkjournal()
|__FileStore::new_journal()
|__FileJournal() 構(gòu)造函數(shù)來創(chuàng)建 FileJournal 實(shí)例
|__在 /var/lib/ceph/osd/ceph-${id}/ 目錄下創(chuàng)建 type 文件且向該文件中寫入 filestore
|__FileStore::mount()
|__FileStore::read_fsid()
|__FileStore::version_stamp_is_valid() 檢查 version_stmap 文件是否有效并讀取該文件中的內(nèi)容
|__FileStore::read_superblock() 讀取 superblock 文件中的內(nèi)容
|__在 /var/lib/ceph/osd/ceph-${id}/current/ 目錄下創(chuàng)建 nosnap 文件
|__把 /var/lib/ceph/osd/ceph-${id}/current/omap 目錄作為 omap_store 的基準(zhǔn)目錄,調(diào)用 KeyValueDB::create() 創(chuàng)建 KeyValueDB 實(shí)例
|__FileStore::new_journal() 創(chuàng)建 journal
|__JournalingObjectStore::journal_start() 啟動(dòng) journal
|__啟動(dòng) ondisk_finishers 和 apply_finishers 線程池
|__FileStore::read() 從”meta”中讀取 superblock 對(duì)象信息且保存到 OSDSuperblock 類對(duì)象中
|__比較 superblock 中的 cluster_fsid 是否有效
|__OSD::write_meta() 將 magic/whoami/ceph_fsid/ready 信息寫入到 /var/lib/ceph/osd/ceph-${id}/ 目錄下對(duì)應(yīng)的文件中
|__對(duì)于需要?jiǎng)?chuàng)建 key 來說,使用 EntityAuth.CryptoKey 來創(chuàng)建一個(gè) key 且將新建的 key 添加到 keyring 中,同時(shí)也將該 keyring 寫入到 /var/lib/ceph/osd/ceph-${id}/ 目錄下 keyring 文件中
|__對(duì)于需要?jiǎng)?chuàng)建 journal 來說,調(diào)用 FileStore::mkjournal() 函數(shù)來創(chuàng)建 journal
|__OSD::peek_meta() 從 /var/lib/ceph/osd/ceph-${id}/ 目錄下對(duì)應(yīng)的文件中讀取 magic/cluster_fsid/osd_fsid/whoami 信息
|__pick_addresses() 從配置文件中讀取 public_addr 和 cluster_addr 值
|__創(chuàng)建 client/cluster/hbclient/hb_back_server/hb_front_server 的 Messenger 類實(shí)例。一般情況下 client 和 hb_front_server 用 public_addr,cluster/hbclient/hb_back_server 用 cluster_addr
|__MonClient::build_initial_monmap() 從配置文件中創(chuàng)建 MonMap
|__調(diào)用 OSD 類構(gòu)造函數(shù)創(chuàng)建 OSD 類對(duì)象
|__OSD::pre_init()
|__啟動(dòng) client/cluster/hbclient/hb_back_server/hb_front_server 的 Messenger 類實(shí)例
|__OSD::init()
|__tick_timer.init() 初始化心跳定時(shí)器
|__OSDService.backill_request_timer.init() 初始化 backfill 請(qǐng)求定時(shí)器
|__ObjectStore::mount() 掛載文件系統(tǒng)
|__OSD::read_superblock() 從集群中讀取 superblock 信息且保存到 OSDSuperblock 類對(duì)象中
|__確保 snapmapper 對(duì)象存在于”meta”中
|__創(chuàng)建 ClassHandler 類實(shí)例
|__get_map() 根據(jù) superblock 中記錄的當(dāng)前 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 對(duì)應(yīng) TYPE_META,_head 對(duì)應(yīng) TYPE_PG,_TEMP 對(duì)應(yīng) TYPE_TEMP
|__遍歷所有 TYPE_PG
|__調(diào)用 PG::peek_map_epoch() 函數(shù)
|__OSD::_open_lock_pg()
|__OSD::_make_pg() 創(chuàng)建 ReplicatedPG 類實(shí)例
|__PG::read_state() 讀取 PG 的狀態(tài)
|__PG::read_info() 從 omap 中讀取_infover/_info/_biginfo 屬性值
|__PGLog::read_log() 讀取 PGLog 信息,根據(jù) PGLog 信息得到 missing 的信息
|__OSDMap::pg_to_up_acting_osds() 計(jì)算出該 PG 對(duì)應(yīng)的 OSDs
|__PG::init_primary_up_acting() 這個(gè) PG 所對(duì)應(yīng)的 OSDs
|__OSDMap::calc_pg_role() 計(jì)算出 PG 的 roles
|__PG::set_role()
|__PG::reg_next_scrub() 注冊(cè)下一次進(jìn)行 scrub 的操作
|__OSD::build_past_intervals_parallel()
|__OSD::create_logger() 創(chuàng)建 OSD logger
|__MonClient::init() 初始化 MonClient 類實(shí)例
|__啟動(dòng) osd_tp/osd_op_tp/recovery_tp/disk_tp/command_tp 線程池
|__OSDService::init() 初始化 OSDService
|__MonClient::authenticate() 做 Monitor 認(rèn)證
|__OSD::update_crush_location() OSD 啟動(dòng)后更新 crushmap 操作,可以在配置文件中設(shè)置 osd_crush_update_on_start = false 來禁止 OSD 啟動(dòng)后更新 crushmap
|__OSDService::final_init()
|__OSD::consume_map()
|__OSD::start_boot()
|__OSD::finial_init()
|__注冊(cè)一系列通過 socket 進(jìn)行操作的命令
以上是“ceph 中 Jewel OSD 進(jìn)程啟動(dòng)處理流程的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!