cept源代碼目錄結構詳解_知識樹(轉)

1 簡介
該代碼架構基於版本10.0.5整理,先整理根目錄裏的代碼,再整理出src目錄的架構。node

2 代碼架構
2.1 Ceph源碼根目錄
Ceph的根目錄下包含了一些文件夾和若干編譯、代碼格式相關的文件。python

[admin]:架設Document服務器,包括依賴內容並介紹修改doc的流程。web

[bin]:目前只包含一個在當前目錄針對全部內容生產tar包的腳本算法

[cmake]:Ceph對cmake的支持。CMake 是一個跨平臺的自動化安裝編譯系統,它使用一個名爲 CMakeLists.txt 的文件來描述構建過程,能夠產生標準的構建文件,如 Unix 的 Makefile 或Windows Visual C++ 的 projects/workspaces 。文件 CMakeLists.txt 須要手工編寫,也能夠經過編寫腳本進行半自動的生成。CMake 提供了比 autoconfig 更簡潔的語法。json

[debian]:用於製做debian(Ubuntu)安裝包的相關腳本和文件。後端

[doc]:Ceph文檔系統的源碼,Ceph的文檔和manpages都使用rst格式,該目錄的內容將經過doc web服務器導出,最終效果如:http://docs.ceph.com/docs/master/性能優化

[etc]:Ceph的etc文件bash

[examples]:一些Ceph開發、命令使用、trace使用的例子。服務器

[qa]:各個模塊的功能測試(測試腳本和測試代碼)網絡

[src]:Ceph各個模塊的源碼目錄

[systemd]:Ceph對於systemd的支持目錄

[udev]:Ceph的udev規則

AUTHORS:記錄了Ceph的Maintainer、CTL(Component Technical Leads)以及Contributors信息。

do_autogen.sh/autogen.sh/configure.ac:生成configure文件

run-cmake-check.sh :使用cmake編譯ceph,適用於首次自動化編譯,自動安裝依賴包,須要運行用戶有安裝包的權限。
run-make-check.sh :使用make編譯ceph,適用於首次自動化編譯,自動安裝依賴包,須要運行用戶有安裝包的權限。

Makefile.am:用於生成Makefile文件

ceph.spec.in:Ceph打包的spec文件

CMakeLists.txt:CMake工具使用的描述文件

CodingStyle:Ceph的代碼編寫規範

2.2 Ceph src目錄內容
src目錄包含了Ceph主要模塊的源碼,總體上能夠分爲三層,以下圖所示:


1)Base

基礎層包含了與業務無關的各種模塊,例如對數值類型的定義、線程池、序列化等。

[include]:頭文件,包含各類基本類型的定義,簡單通用功能等。 

[common]:共有模塊,包含各種共有機制的實現,例如線程池、管理端口、節流閥等。

[log]:日誌模塊,主要負責記錄本地log信息(默認/var/log/ceph/目錄) 

[global]:全局模塊,主要是聲明和初始化各種全局變量(全局上下文)、構建駐留進程、信號處理等。

[tracing]:Ceph tracing模塊,目前支持使用lttng,能夠在該目錄下定義lttng的tracepoint。

2)Component

組件層是爲實現各項業務提供的功能組件,例如消息通信、認證受權、數據分佈算法等。

[crush]:Crush模塊,Ceph的數據分佈算法 。其中CrushCompiler.cc主要負責對crushtool命令傳入的crushmap.txt進行compile和parse(parse_tunable、parse_device、parse_bucket_type、parse_bucket、parse_rule),拿parse rule來講,解析後會經過CrushWrapper.h中的add_rule調用builder.cc的crush_add_rule實現rule的添加。總的來講crush.h 中定義了crush_map的結構和四種bucket類型,builder.c文件定義了crushmap中關於rule、bucket的增刪改查操做。mapper定義了crushmap中的step、choose操做,而hash.c中定義了crush中使用的rjenkins算法。

[os]:對象存儲(Object Store)模塊,用於實現本地的對象存儲功能,目前包括:bluestore、filestore、kstore、memstore;其中*store的基類爲ObjectStore,定義在ObjectStore.h中。經常使用的是FileStore,定義在filestore目錄,而Ceph爲了解決性能問題,目前正在全力開發bluestore。這裏先主要關注一下FileStore,在FileStore.h中主要定義了FileStore和FileStoreBackend兩個類,其中FileStore中定義了Op的操做模型(OpWQ、OpSequencer)和transaction的操做模型,它繼承自JournalingObjectStore類。而FileStoreBackend類定義了FileStore獲取後端具體文件系統的一些操做。

[auth]:受權模塊,實現了三方認知機制。 

[msg]:消息通信模塊, OSD使用msg模塊進行網絡通信,包括監聽客戶端的IO,與其它osd收發消息,以及與mon進行通信等。該目錄下包括用於定義通信功能的抽象類Messenger以及目前的實現SimpleMessager、AsyncMessenger、XIO。

[messages]:消息模塊,定義了Ceph各節點之間消息通信中用到的消息類型。

[osdc]:OSD客戶端(OSD Client),主要包括Objecter、ObjectCacher、Striper、Filer和Journaler。Objecter主要是將request封裝成對應的Ops、計算出request須要發送的OSD而且以message的方式將Op發送出去。ObjectCacher是client端的Cache層。Stripper是將一個塊設備映射成object,而Filer是把file的range映射成object。Journaler主要是用於MDS的

[kv]:定義了keyvaluestore的後端存儲實現。

[cls]:針對第三方插件的支持。

3)SubSystem

子系統層即Ceph中各個功能節點,包括:

[mon]:Monitor做爲Ceph集羣狀態管理者管理MonMap、PGMap和OSDMap,其主要由各類Monitor組件組成,並使用Paxos協議實現Mon之間數據同步來保證數據一致性,經過quorum協議來保證Mon之間的高可用。

AuthMonitor、LogMonitor、MDSMonitor、MonmapMonitor、OSDMonitor、PGMonitor、HealthMonitor
MonMap、PGMap、OSDMap
MonClient、MonCommands
Paxos、PaxosService、QuorumService
DataHealthService、HealthService、ConfigKeyService
MonitorDBStore
[osd]:定義了後端OSD、PG相關的類和處理邏輯。 在OSD模塊中,最核心、也是實際處理IO請求和故障恢復的模塊類是PG。 PG是一個對象的集合,包含對象名稱的哈希值與PG的ID相符的全部對象。而在Ceph的軟件設計中,PG是osd中處理IO的類,即屬於某一個PG的對象的請求,所有由該對象對應的PG類的實例進行處理。 相對於PG,OSD實際扮演了一個服務者的角色,即爲PG提供瞭如下服務:1)經過調用os模塊提供本地存儲服務;2)經過調用msg模塊提供消息通信服務;3)經過提供線程池提供計算服務。 能夠將OSD理解爲PG的運行環境。PG「生活」在某一個OSD中,也可能因爲系統的變化,而遷移到另外一個OSD中,這一過程實際也就是數據遷移的過程。

學習osd模塊能夠從一下類開始,稍後會整理出各種的做用以及相互之間的關係。

OSD、OSDService、OSDMap
PG、PGBackend、ReplicatedPG、ReplicatedBackend、PGLog
ECBackend、ECTransaction
HitSet
[mds]:MDS定義了維護了CephFS中的元數據,包括文件系統的樹形結構、文件的屬性、訪問控制信息等,這些數據都是存在MDS節點的內存中,而真正的數據是存儲在Rados裏的。

MDSDaemon、MDSRank、MDSMap、Beacon、MDCache、MDBalancer
CDir、CDentry、CInode
MDSTable、InoTable
[client]:Client主要定義了CephFS client端的代碼。

[rbd]:實現包括兩部分:krbd(kernel版的rbd,源碼在drivers/block/rbd.c)和librbd。

[rgw]:實現了rgw的功能,rgw的主要做用是協議轉換,即把HTTP協議的請求轉化爲RGW Object再轉換爲Rados Object,交由Rados處理。

[tools]:Ceph中的各類工具的實現:cephfs、rados、rbd、rbd-nbd、ceph-authtool、ceph-conf、ceph-kvstore-tool、ceph-monstore-tool、ceph-objectstore-tool、crushtool、monmaptool、osdmaptool

[librados]:librados實現了rados層的接口,其中幾個重要的數據結構有Rados、RadosClient、IoCtx、IoCtxImpl。IoCtx(include/rados/librados.hpp)是Rados I/O的一個上下文,其定義了大部分的I/O接口如read、write等;

 

 

 

 

從GitHub上Clone的Ceph項目,其目錄下主要文件夾和文件的內容爲: 
1 根目錄 
[src]:各功能某塊的源代碼 
[qa]:各個模塊的功能測試(測試腳本和測試代碼) 
[wireshark]:#wireshark的ceph插件。 
[admin]:管理工具,用於架設文檔服務器等 
[debian]:用於製做debian(Ubuntu)安裝包的相關腳本和文件

 

[doc]:用於生成項目文檔,生成結果參考http://ceph.com/docs/master/ 
[man]:ceph各命令行工具的man文件 
configure.ac:用於生成configure的腳本 
Makefile.am:用於生成Makefile的腳本 
autogen.sh:負責生成configure。 
do_autogen.sh:生成configure的腳本,實際上經過調用autogen.sh實現 
ceph.spec.in:RPM包製做文件

2 src目錄

[include]:頭文件,包含各類基本類型的定義,簡單通用功能等。 
[common]:共有模塊,包含各種共有機制的實現,例如線程池、管理端口、節流閥等。 
[log]:日誌模塊,主要負責記錄本地log信息(默認/var/log/ceph/目錄) 
[global]:全局模塊,主要是聲明和初始化各種全局變量(全局上下文)、構建駐留進程、信號處理等。 
[auth]:受權模塊,實現了三方認知機制。 
[crush]:Crush模塊,Ceph的數據分佈算法 
[msg]:消息通信模塊,包括用於定義通信功能的抽象類Messenger以及目前的實現SimpleMessager 
[messages]:消息模塊,定義了Ceph各節點之間消息通信中用到的消息類型。 
[os]:對象(Object Store)模塊,用於實現本地的對象存儲功能, 
[osdc]:OSD客戶端(OSD Client),封裝了各種訪問OSD的方法。 
[mon]:mon模塊 
[osd]:osd部分 
[mds]:mds模塊 
[rgw]:rgw模塊的 
[librados]:rados庫模塊的代碼 
[librdb]:libbd庫模塊的代碼 
[client]:client模塊,實現了用戶態的CephFS客戶端 
[mount]:mount模塊 
[tools]:各種工具 
[test]:單元測試 
[perfglue]:與性能優化相關的源代碼 
[json_spirit]:外部項目json_spirit 
[leveldb]:外部項目leveldb from google 
[gtest]:gtest單元測試框架 
[doc]:關於代碼的一些說明文檔 
[bash_completion]:部分bash腳本的實現 
[pybind]:python的包裝器 
[script]:各類python腳本 
[upstart]:各類配置文件

ceph_mds.cc:駐留程序mds 
ceph_mon.cc:駐留程序mon 
ceph_osd.cc:駐留程序osd 
libcephfs.cc:cephfs庫 
librdb.cc:rdb庫 
ceph_authtool.cc:工具ceph_authtool 
ceph_conf.cc:工具ceph_conf 
ceph_fuse.cc:工具ceph_fuse 
ceph_syn.cc:工具ceph_syn 
cephfs.cc:工具cephfs 
crushtool.cc:工具crushtool 
dupstore.cc:工具dupstore 
librados-config.cc:rados庫配置工具 
monmaptool.cc:工具monmap 
osdmaptool.cc:工具osdmap 
psim.cc:工具psim 
rados.cc:工具rados 
rdb.cc:工具rdb 
rados_export.cc:rados工具相關類 
rados_import.cc:rados工具相關類 
rados_sync.cc:rados工具相關類 
rados_sync.h:rados工具相關類 
sample.ceph.conf:配置文件樣例 
ceph.conf.twoosds:配置文件樣例 
Makefile.am:makefile的源文件 
valgrind.supp:內存檢查工具valgrind的配置文件 
init-ceph.in:啓動和中止ceph的腳本 
mkcephfs.in:cephfs部署腳本

 

 

 

 

 

 

相關文章
相關標籤/搜索