云計(jì)算 背景
監(jiān)控是管理的第一步,所以 ceph-mgr 目前的主要功能是把集群的一些指標(biāo)暴露給外界使用。監(jiān)控是什么東西呢?舉個(gè)例子,例如用戶訪問網(wǎng)站 5xx 了,那么監(jiān)控就是這么一個(gè)系統(tǒng):采集網(wǎng)站 5xx 的個(gè)數(shù),存起來,然后在 5xx 多的時(shí)候通過報(bào)警短信報(bào)給開發(fā),然后為開發(fā)解決該問題提供其他信息(例如日志,指標(biāo)圖表)。所以監(jiān)控系統(tǒng)是一個(gè)數(shù)據(jù)系統(tǒng),包含采集,存儲(chǔ),分析(包含報(bào)警),可視化,這幾個(gè)部分。

關(guān)于監(jiān)控,在此之前,ceph 以及社區(qū)有不少嘗試。
calamaricalamari。calamari 是 ceph 背后的公司 Inktank 為 ceph 企業(yè)版開發(fā)的監(jiān)控管理程序,在 Red Hat 收購(gòu)該公司后開源,目前基本處于停滯狀態(tài)。其基本原理是利用 salt 遠(yuǎn)程執(zhí)行 python 腳本,該腳本通過 ceph 每個(gè)守護(hù)進(jìn)程暴露在本地的 admin socket 采集到數(shù)據(jù)或者執(zhí)行命令。其主要包含幾部分:
采集: ceph 數(shù)據(jù)。salt + python 腳本 主機(jī)數(shù)據(jù)。 Diamond 存儲(chǔ):自帶了一個(gè) graphite 分析:沒有 可視化:專門定制了一個(gè) 前端評(píng)價(jià):
涉及技術(shù)多,雜合在一起,認(rèn)知和維護(hù)負(fù)擔(dān)大。其涉及的技術(shù)包括但不限于:vagrant, salt, django, graphite ,node, diamond。就安裝過程來說,我花了兩天左右,然后成功發(fā)現(xiàn)其所有涉及倉(cāng)庫(kù)的 master 版本無法一起跑起來。首先,Github Release 只有 Ubuntu 的包,還是 15 年 10 月上傳的,我們系統(tǒng)是CentOS 7.2,因此我只能照著 這個(gè)教程 從源碼編譯打包安裝。安裝過程中 salt 安裝包時(shí)包文件沖突,rpm build 時(shí)找不到文件。它的前端 romana 從 Release 下載后放到對(duì)應(yīng)目錄,發(fā)現(xiàn)有些前端文件找不到,必須去改它 Django 的 view,Django 沒學(xué)過,改時(shí)不太有底,終于讓前端頁(yè)面顯示之后,發(fā)現(xiàn)前端請(qǐng)求的一個(gè) API 后端沒有實(shí)現(xiàn)。 項(xiàng)目已停滯,開發(fā)資源轉(zhuǎn)向 ceph-mgr。從 該項(xiàng)目 Github Insights 可以看出 2017 年后 commit 較少,commit 較多的人有兩個(gè),排第一的 [jcsp] 目前主要在開發(fā) ceph-mgr。 cephmetricscephmetrics。基本原理是基于 collectd 插件,從 admin socket 中采數(shù)據(jù)發(fā)往 graphite,用 grafana 做圖。
評(píng)價(jià):
項(xiàng)目劃分比 calamari 清晰,各組件都用了業(yè)界主流解法。collectd (采集)+ graphite(存儲(chǔ)和計(jì)算) + grafana(可視化)。比較看好這種解法。 collectd 插件是部署到每臺(tái)機(jī)器上的,解決了采集的負(fù)載均衡問題,但插件的部署、升級(jí)、管理相對(duì)麻煩,并且可能影響目標(biāo)主機(jī),問題不是太大,可以采納。 Dashboard 不大好,冗余代碼多。其提供的 Dashboard 中選擇的數(shù)據(jù),以及數(shù)據(jù)的擺放,Dashboard 之間的關(guān)聯(lián)考慮的不是太好,例如沒有把相關(guān)數(shù)據(jù)放到一起,沒有根據(jù)一個(gè)目的在做圖表,有堆砌數(shù)據(jù)的感覺。冗余代碼是指包含了 ansible 部署代碼,collectd 關(guān)于 cpu 等系統(tǒng)數(shù)據(jù)的采集的配置等與 Ceph 本身無關(guān)的代碼,增加了認(rèn)知負(fù)擔(dān)。 ceph_exporterceph_exporter。基本原理是利用 librados,從 ceph monitor 中取數(shù)據(jù),通過 http 協(xié)議把指標(biāo)以 prometheus 規(guī)定的格式暴露出來。
評(píng)價(jià):
是個(gè)純采集組件,只需部署一處,和 ceph monitor 通信,模式簡(jiǎn)單易理解,非常看好。 一個(gè)缺點(diǎn)是 prometheus 系統(tǒng)本身具有的。其插件是通過 exporter 的形式分散到各個(gè)倉(cāng)庫(kù)里,分別部署,那么多 exporter,每個(gè)都是獨(dú)立的進(jìn)程,怎么管理它們是個(gè)大問題。管理就包括部署,監(jiān)控,升級(jí),配置管理,啟動(dòng)和停止,每一個(gè)都是問題。相比之下,collectd 做為一個(gè)采集框架,為所有插件的實(shí)現(xiàn)提供了共有基礎(chǔ)功能,使得插件的實(shí)現(xiàn)變得非常簡(jiǎn)單: 為插件提供了運(yùn)行環(huán)境。插件只需提供 read (input 插件),write(output 插件),無需啟動(dòng)進(jìn)程,無需處理信號(hào)。 為插件提供了配置系統(tǒng)。插件無需擔(dān)心如何如何配置自己,用戶只要在 collectd 配置文件中按統(tǒng)一格式傳入,插件就可以以統(tǒng)一的方式拿到。 為插件提供了 Log 機(jī)制。插件可以使用 collectd 的日志機(jī)制,從而無需擔(dān)心如何支持 level,輸出到不同地方等。 為插件提供了數(shù)據(jù)通道。插件之間的數(shù)據(jù)是打通的,插件無需關(guān)心輸出到哪,是 graphite,influxdb,還是 opentsdb。只需實(shí)現(xiàn) read 回調(diào)來采集數(shù)據(jù),然后配置不同的 output 插件,就能實(shí)現(xiàn)輸出到不同地方。 ceph-mgr在以上背景下,ceph 官方開發(fā)了 ceph-mgr,主要目標(biāo)實(shí)現(xiàn) ceph 集群的管理,為外界提供統(tǒng)一的入口。要深入了解 ceph-mgr,就得了解 ceph-mgr 是如何跑起來的。
由
官方文檔 可知,ceph-mgr 是通過可執(zhí)行文件
ceph-mgr跑起來的,在源碼
src/CMakeLists.txt搜索
ceph-mgr可以搜到
add_executable(ceph-mgr ${mgr_srcs}...,從中可以看出 ceph-mgr 主要由
src/mgr里的文件編譯出來(猜也猜的出來),main 函數(shù)在
src/ceph_mgr.cc。以上就是相關(guān)文件,有需要深入的人可以去讀,這里介紹整理之后的 ceph-mgr 工作原理。
ceph-mgr 工作的模式是事件驅(qū)動(dòng)型的,意思就是等待事件,事件來了則處理事件返回結(jié)果,又繼續(xù)等待。其主要運(yùn)行的線程包括:
messenger 線程。這是事件驅(qū)動(dòng)主線程,監(jiān)聽某一端口,由外界給輸入事件,messenger 收到事件后分派給各個(gè)處理者。通過向 monitor 訂閱某一個(gè) topic 的消息,例如mgrmap,
osdmap,monitor 會(huì)在這些數(shù)據(jù)發(fā)生變化時(shí)把事件通知到 messenger 監(jiān)聽的端口。事件處理器包括:
MgrStandby。Mgr 通過 standby 實(shí)現(xiàn)高可用,每一個(gè)運(yùn)行的 ceph-mgr 都包含一個(gè) MgrStandby,MgrStandby 并沒有運(yùn)行的線程,它存在于 messenger 收到消息時(shí)的回調(diào),以及通過定時(shí)器線程運(yùn)行的定時(shí)任務(wù),并且管理著其他實(shí)體。其處理的唯一消息是
mgrmap,就是當(dāng)主掛掉時(shí)要頂上來,當(dāng)自己不是主時(shí)要退回去。什么時(shí)候切主由 monitor 管理,所以 MgrStandby 里切主邏輯比較簡(jiǎn)單,有一個(gè)
Mgr實(shí)例,當(dāng)收到 mgrmap 時(shí)生成該實(shí)例,存到 MgrStandby 屬性里,就完了。因?yàn)樵谑盏较r(shí),MgrStandby 如果看到有
Mgr實(shí)例,就會(huì)把消息發(fā)到它那處理,在定時(shí)函數(shù)里,也會(huì)調(diào)用 mgr 的定時(shí)函數(shù),這樣,實(shí)際上,MgrStandby 就擔(dān)起了主的任務(wù)。
Mgr。如上段所述,Mgr 依附于 MgrStandby 存在,也沒有單獨(dú)線程。它通過處理
mon_map,
fs_map,
osd_map等事件,在內(nèi)存中維護(hù)了集群成員信息,它管理 ceph-mgr 插件,為插件提供了所有數(shù)據(jù)的來源,也在特定事件發(fā)生時(shí)通知給 ceph-mgr 的插件,例如插件的
notify函數(shù),就是被 Mgr 回調(diào)的。
DaemonServer。獨(dú)立線程,和主 messenger 監(jiān)聽同一端口(待確認(rèn))。是 cluster 指標(biāo)數(shù)據(jù)的主要維護(hù)者,并且負(fù)載執(zhí)行對(duì)集群的操作,例如吩咐 OSD 進(jìn)行
pg scrub等。
plugin 線程。plugin 是 Python 寫的,每個(gè) plugin 都跑在單獨(dú)線程里,線程調(diào)用的函數(shù)是 python 類的
serve。plugin 可以在 serve 里跑個(gè) http server 來提供對(duì)外服務(wù),ceph-mgr 為 plugin 提供了
get,
get_server等函數(shù),這些函數(shù)返回關(guān)于集群的指標(biāo)等數(shù)據(jù)。例如 prometheus 插件,就把 ceph 內(nèi)部指標(biāo)通過 http 協(xié)議以 prometheus 格式暴露出來,使得監(jiān)控 ceph 集群變得較為簡(jiǎn)單。ceph 是 c++ 寫的,ceph 會(huì)調(diào)用 python plugin 定義的方法(例如 serve),python plugin 可以調(diào)用 c++ 定義的函數(shù)(例如
get),python/c++ 的互調(diào)是 python 提供的機(jī)制,其基本原理是:
c++ 調(diào) python。python 的實(shí)體在 c++ 里類型都是
PyObject,模塊,函數(shù)、類、數(shù)據(jù)都是。cpython 提供了
PyImport_Import用于通過名字得到 m模塊對(duì)象對(duì)應(yīng)的 PyObject,類可以通過
PyObject_GetAttrString取模塊的屬性得到,以此類推,cpython 還提供了由 c 類型的值生成對(duì)應(yīng) python 類型的值的PyObject 的方法,例如
PyObject* PyString_FromString(char *)。有函數(shù)對(duì)象,有參數(shù)對(duì)象,就可以通過
PyObject * PyObject_CallObject()調(diào)用函數(shù),將得到的 PyObject* 再轉(zhuǎn)回 c++ 類型就 OK 了。
python 調(diào)用 c++。在 c++ 里定義
PyObject* ceph_state_get(PyObject *self, PyObject *args),在函數(shù)里里面通過
PyArg_ParseTuple(args, ss:ceph_state_get, &handle, &what)把參數(shù)解析為 c++ 類型,就實(shí)現(xiàn)了一個(gè) Python 函數(shù)。通過
PyMethodDef CephStateMethods[] = {{get, ceph_state_get, METH_VARARGS,Get a cluster object}}把 Python 函數(shù)加入到一個(gè)注冊(cè)表里。通過
Py_InitModule(ceph_state, CephStateMethods),將注冊(cè)表里的函數(shù)定義為
ceph_state模塊的屬性,并把該模塊注入到 python sys.path 里,python 就可以通過
ceph_state.ceph_state_get調(diào)用該函數(shù)了。
作者:李逸超【資深軟件開發(fā)工程師】
為研發(fā)提效,全是技術(shù)干貨的滴滴云技術(shù)沙龍報(bào)名中!
馬上關(guān)注滴滴云公眾號(hào):
回復(fù)「上課」獲取免費(fèi)報(bào)名資格
回復(fù)「服務(wù)器」免費(fèi)獲得云服務(wù)器入門1個(gè)月體驗(yàn)
當(dāng)前名稱:深入理解cephmgr
路徑分享:http://www.yijiale78.com/article46/cghdhg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、Google、網(wǎng)站收錄、動(dòng)態(tài)網(wǎng)站、品牌網(wǎng)站制作、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容