乾貨|基於Ansible的Ceph自動化部署解析

中興開發者社群發表於2017-11-06

點選上方“中興開發者社群”,關注我們

每天讀一篇一線開發者原創好文640?wx_fmt=png&wxfrom=5&wx_lazy=1

▍作者簡介

作者紀伯年16年畢業於哈工大,目前是中興通訊的後端開發,專注於雲端計算與儲存技術。平時喜歡學習一些相關領域的架構知識,並熱衷於鑽研精妙的演算法與邏輯。

    

▍背景介紹

當前專案中Ceph部署採用利用Ansible呼叫部署指令碼的方式,Ceph部署部分文字分為兩部分:Ceph配置部署指令碼,Ansible執行指令碼。本文以當前專案版本的Ceph配置部署檔案為例,對Ceph自動化部署中的命令進行解釋與分析,旨在提供一份基於例項的實用性文件,方便他人日後對檔案的解讀與修改,或是對當前例項的部分或完整復現。

 

▍檔案結構解析

Ceph部署部分程式碼包含9個檔案,其中ceph-pkgs.tar.gz為Ceph安裝包檔案,script.tar.gz為Ceph部署指令碼壓縮包檔案,其餘為Ansible執行檔案。

Ansible執行檔案中,deploy.yml為Ansible入口檔案,vars.yml為變數檔案,其餘為執行任務檔案。將script.tar.gz解壓後可以看到Ceph配置執行檔案的內容,其中install-package.sh為Ceph安裝指令碼,其餘均為Ceph配置部署指令碼。程式碼執行的流程如下圖所示:

0?wx_fmt=png

▍Ansible執行程式碼解析

1.  基礎介紹

Ansible的指令碼叫做Playbook,用YAML格式編寫。最基本的Playbook包含三個部分:主機與使用者、執行任務、響應事件。任務的執行會呼叫Ansible的各種模組。下面將結合具體例項逐條語句分析,更多Playbook語法請參見Ansible書籍或官方文件


2. 程式碼解析

按照程式碼執行順序,首先進入deploy.yml檔案。以下為檔案原始碼及解析:

0?wx_fmt=png

而後在任務列表中,進入unarchive.yml檔案。以下為檔案原始碼及解析:

0?wx_fmt=png

隨後執行install-package.yml。以下為檔案原始碼及解析:

0?wx_fmt=png

接下來執行deploy_task.yml。以下為檔案原始碼及解析:

0?wx_fmt=png

經過Ceph配置部署指令碼的執行後,Ceph部署成功,然後執行osd_task.yml和rest_api.yml。以下為檔案原始碼及解析:

0?wx_fmt=png

Vars.yml為變數檔案,格式較為規矩,在此不做贅述。

以上即為Ansible執行指令碼的簡要解析,其中出現的模組、方法有限,故介紹不夠全面,如需更豐富的配置和操作請參閱書籍或手冊。


▍Ceph配置部署指令碼解析

1.基礎介紹

所有Ceph的部署都始於儲存叢集。Ceph儲存叢集有兩類守護程式:物件儲存守護程式OSD(Object Storage Device Daemon Progress)和監聽器MON(Monitor)。若要執行Ceph檔案系統(CephFS)則還需要一個後設資料伺服器MDS(Metadata Server)。本例為搭建3節點的Ceph叢集並使用CephFS,需要1個MON,三個OSD,兩個MDS。

2.程式碼解析

當Ansible執行到install-package.yml最後一句時執行install-package.sh指令碼檔案。以下為檔案原始碼及解析:

0?wx_fmt=png

而後,Ansible繼續執行到deploy_task.yml中,呼叫deployInterface.sh指令碼檔案並輸入引數。以下為檔案原始碼及解析:

0?wx_fmt=png

0?wx_fmt=png

0?wx_fmt=png

隨後進入ceph-deploy.sh開始執行Ceph叢集配置及部署。以下為檔案原始碼及解析(本節程式碼較長,格式多樣,故原始碼和解析並非完全左右分佈,且照原始碼有些許不同,但我相信你們看得懂):

0?wx_fmt=png

0?wx_fmt=png

0?wx_fmt=png

0?wx_fmt=png

0?wx_fmt=png

0?wx_fmt=png

0?wx_fmt=png

0?wx_fmt=png

0?wx_fmt=png

0?wx_fmt=png

部署節點2、3時呼叫了ceph-rest-api.sh指令碼,用以啟動restful api。以下為檔案原始碼及解析:

0?wx_fmt=png

此指令碼在節點2、3上均執行一次,隨後在Ansible執行最後一個檔案rest_api.yml時再在本節點執行一次。

依次退出ceph-deploy-.sh、deployInterface.sh、deploy_task.yml後,Ansible進入osd_task.yml呼叫deploy-osd.sh指令碼。以下為檔案原始碼及解析:

0?wx_fmt=png

最後,Ansible進入rest_api.yml,呼叫ceph-rest-api.sh指令碼。自此,Ceph配置、部署的工作全部完成。


▍總結

本文以Ceph部署部分原始碼為例,對基於Ansible的Ceph配置部署檔案進行了逐條解析。儘管抱著既詳盡又清爽的初衷,但Ceph本身的結構、細節的配置並不易理解與掌握,加之官方文件遭爛的結構體系和不完整的關鍵詞解釋(英文文件稍好,也沒好多少),使得在趕工下完成的本文既不詳盡又不清爽。還望和大家共同探討並給與指正。

640?wx_fmt=jpeg

相關文章