先上圖:
上面的圖是標準官方的,下面的是理解後整理的:
技術文檔的簡寫太多了,不是很通俗的一定要給出英文全稱,纔是負責的。對於拿着簡寫繞暈初學者的人,不好。先說RADOS吧:
Reliable Autonomic Distributed Object Store,可靠、自治、分佈的對象存儲。可靠,自然是存儲必需有的品質;注意不是“自動”而是“自治”,就是說這個系統能夠進行自我管理;分佈的,即不是傳統集中的;對象存儲,適用於對象存取的存儲,而對象,在這裏指數據和數據屬性集的綜合體。對象包含ID、二進制文件、元數據。
OSD:基於對象存儲技術的設備就是對象存儲設備(Object Storage Device),每個對象存儲設備具有一定的智能,能夠自動管理其上的數據分佈。
客戶端與客戶端與RADOS交互
客戶端向monitor查詢osd map, crush規則
客戶端根據osd map使用crush計算出目標osd
客戶直接向目標osds發起數據訪問.
ceph的架構做到了“無需查表,算算就好”,因爲它無元數據(metadata)服務器,無表操作。
OSD
(Object Storage Device),說俗一些就是:一塊磁盤(一些CPU、一些內存)。有一個daemon進程對它操作,進行數據存儲和維護,是磁盤的“經紀人”,與其它OSD的daemon、monitor、client通訊。
monitor
client是訪問OSD的客戶端,OSD是後臺資源。打個比方,client是住店的人,OSD是房間,monitor是賓館前臺,負責鑰匙的人。正式的說法叫“系統狀態檢測和維護”。
每個住店的人先要找前臺分配房間,拿鑰匙;每個client訪問OSD先訪問monitor,而monitor分配OSD是有一套算法的,這個算法叫做crush。
file
用戶端對象,其實就是文件了。
object
RADOS對象,因爲有最大size設置限制(通常是2MB或4MB),如果file太大,就會按照size參數進行切片,每片就是一個object。(如果file是一個人就慘了,(*^__^*) 嘻嘻……)
PG
不是屁股,是Placement Group,位置組。是一個邏輯組織,與object是“一對多”的關係,一個PG裏面有很多object;一個PG會映射到n個OSD,這個n就表示對象存儲的副本份數,或者冗餘程度,一半是3份,就是3了。當PG的OSD少於n時,處在降級狀態,系統將自我修復或re-balancing.
cluster map
全局系統狀態記錄數據結構。就是賓館的牀鋪分配圖。包含的信息:
epoch,即序列號,單調遞增;
OSD網絡地址;
OSD狀態:up&in, up&out, down&in, down&out
CRUSH算法配置參數: cluster hierarchy, placement rules.
如圖:
一個文件是怎樣被決策寫到哪些盤呢?
client計算文件的ID即oid, hash(oid)&mask -> pgid,得到pgid,pgid根據CRUSH算法得出n個OSD。
可能關注的技術點:
cluster map的維護機制。
CRUSH算法具體是怎樣的。
OSD故障及擴容的系統快速恢復和響應。
(未完待續)