您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關ceph monitor的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
Ceph monitor分析
一、monitor簡介
monitor作為ceph集群核心服務,負責自維護ceph集群健康狀態,rados集群元數據mdsmap、monmap、osdmap、log、auth、health等,基于改進paxos算法,保證集群節點間的數據狀態在同一時刻一致性。總的來說Monitor負責收集集群信息,更新集群信息,發布集群信息。
圖 1 monito架構圖
可以看出monitor的內部其實是一個分布式kv數據庫。從下往上分別是MonitorDBStore、Paxos和PaxosService。PaxosService負責保證每次都只會有一個提案進入paxos流程。Paxos模塊具體實現了multi-Paxos算法。MonitorDBStore是對底層DB的抽象封裝,將DB的基本操作事務封裝成統一接口,當前DB默認使用rocksdb。
二、monitor啟動過程
monitor服務啟動過程主要包括:加載基本配置、檢查和加載db、初始化網絡模塊、mon注冊網絡監聽、monitor bootstrap啟動。
圖 3 prepare階段a
圖 5 accept階段a
圖 7 learn階段
原始的Paxos算法(Basic Paxos)只能對一個值形成決議,決議的形成至少需要兩次網絡來回,在高并發情況下可能需要更多的網絡來回,極端情況下甚至可能形成活鎖。如果想連續確定多個值,Basic Paxos搞不定了。因此Basic Paxos幾乎只是用來做理論研究,并不直接應用在實際工程中。 實際應用中幾乎都需要連續確定多個值,而且希望能有更高的效率。Multi-Paxos正是為解決此問題而提出。Multi-Paxos基于Basic Paxos做了兩點改進:
1、針對每一個要確定的值,運行一次Paxos算法實例(Instance),形成決議。
2、在所有Proposers中選舉一個Leader,由Leader唯一地提交Proposal給Acceptors進行表決。這樣沒有Proposer競爭,解決了活鎖問題。在系統中僅有一個Leader進行Value提交的情況下,Prepare階段就可以跳過,從而將兩階段變為一階段,提高效率。
Ceph monitor采用的是Multi paxos算法。
monitor選舉過程
monitor::bootstrap()是選舉入口,整個過程也由一系列狀態變化而成。每個Monitor啟動后,根據配置文件中的主機ip列表,發現其他monitor并且獲取其他節點最新日志版本號,根據版本號大小判斷是否需要從其他節點拉取db數據做同步,然后選出leader和peon,再做recovery,最后根據收到的信號shutdown。
圖 9 probe過程
完成同步后,如果回復數超過節點數一半就開始選舉,節點進入STATE_ELECTING狀態。先廣播OP_PROPOSE消息,對端接收到消息,如果發現自身rank大于發送端rank值,則回復OP_ACK消息。這樣的話rank最小的節點會收到最多的ack消息,如果收到的ack消息數與當前活動節點數相同則本端節點成為leader,然后再通知各個節點本端勝出,其他節點將成為peon。
圖11 recovery流程
Monitor中實現paxos的提交過程是由begin()來完成。Leader首先更新自己的pending_v和pending_pn,然后發送OP_BEGIN消息到所有的peon節點,如果peon的accepted_pn小于leader發送的,則接受這個提案,將數據保存到本地,并且回復OP_ACCEPT消息。Leader收到的accept的個數等于集群的quorum,則將提案提交到leader本地,并且通知各個peon去完成commit操作。同時更新租約extend_lease(),更新租約后leader和peon之間會有個定時任務,leader會默認每3秒更新一次租約,超時10s則會重新選舉,peon同樣沒有收到lease消息,超過10s也會重新選舉。
圖 12 提案提交過程
可以看到,monitor啟動經歷了probe、sync數據、選舉、recovery過程,其中recovery涉及到了提案的提交動作,后續所有的monitor的提案提交都是通過begin()完成的。這里來看,paxos的第一階段就是在bootstrap()里完成,后續提案提交直接可以通過leader發給peon來完成,符合multi-paxos的描述
關于“ceph monitor的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。