數據儲存方案

數據儲存介紹:

操作系統獲得存儲空間的方式一般有:
外接活動硬盤 (DAS)
網絡存儲服務器 (NAS)
存儲區域網絡服務 (SAN)

(1) DAS:(Direct Attached Storage— 直接連接存儲)
本地存儲設備: 通過某種協議(SAS,SCSI,SAN,iSCSI 等)掛接裸硬盤,然後分區、格式化、創建文件系統;或者直接使用裸硬盤存儲數據(數據庫)。這種裸硬盤的方式叫做 Block Storage(塊存儲),每個裸硬盤通常也稱作 Volume(卷)

(2) NAS:(Network attched storage 網附加存儲)
這種叫做文件系統存儲。NAS 和 NFS 服務器,以及各種分佈式文件系統提供的都是這種存儲。

NAS 實際上就是一部 File Server, 一般以NFS,SAMBA,FTP,HTTP 作爲服務器,來完成存儲或讀取的主要方式。

當前主要的 NAS 軟件可以用 FreeNAS 來進行配置和完成。通過 WEB 界面直接進行控制,方便、簡單、快捷不用專業 IT 人員進行完成。客戶端通過 NFS、CIFS等 協議,mount 遠程的文件系統。

(3) SAN:(Storage Area Network, 存儲區域網絡 )
如果擁有大量的硬盤或使用空間,但主機插槽不夠,可以使用 SAN 。一般可以將 SAN 視爲一個外接式的存儲設備 .SAN可以通過某些特殊的方式或介質來提供網絡內的主機進行資料的存儲。

簡單來說 SAN 即通過光纖通道連接到一羣計算機上。在該網絡中提供了多主機連接,但並非通過標準的網絡拓撲。SAN 的結構允許任何服務器連接到任何存儲陣列,這樣不管數據置放在那裏,服務器都可直接存取所需的數據。因爲採用了光纖接口, SAN 還具有更高的帶寬。
在這裏插入圖片描述

存儲方案-分佈式存儲-ceph

簡介

Ceph是一種爲優秀的性能、可靠性和可擴展性而設計的統一的、分佈式文件系統。ceph 的統一體現在可以提供文件系統、塊存儲和對象存儲,分佈式體現在可以動態擴展。在國內一些公司的雲環境中,通常會採用 ceph 作爲openstack 的唯一後端存儲來提高數據轉發效率。

Ceph項目最早起源於Sage就讀博士期間的工作(最早的成果於2004年發表),並隨後貢獻給開源社區。在經過了數年的發展之後,目前已得到衆多雲計算廠商的支持並被廣泛應用。RedHat及OpenStack都可與Ceph整合以支持虛擬機鏡像的後端存儲。
官網:https://ceph.com/
官方文檔:http://docs.ceph.com/docs/master/#

ceph特點

l 高性能:
a. 摒棄了傳統的集中式存儲元數據尋址的方案,採用CRUSH算法,數據分佈均衡,並行度高。
b.考慮了容災域的隔離,能夠實現各類負載的副本放置規則,例如跨機房、機架感知等。
c. 能夠支持上千個存儲節點的規模,支持TB到PB級的數據。
l 高可用性
a. 副本數可以靈活控制。
b. 支持故障域分隔,數據強一致性。
c. 多種故障場景自動進行修復自愈。
d. 沒有單點故障,自動管理
l 高可擴展性
a. 去中心化。
b. 擴展靈活。
c. 隨着節點增加而線性增長。
l 特性豐富
a. 支持三種存儲接口:塊存儲、文件存儲、對象存儲。
b. 支持自定義接口,支持多種語言驅動。

ceph應用場景

Ceph可以提供對象存儲、塊設備存儲和文件系統服務,其對象存儲可以對接網盤(owncloud)應用業務等;其塊設備存儲可以對接(IaaS),當前主流的IaaS運平臺軟件,如:OpenStack、CloudStack、Zstack、Eucalyptus等以及kvm等。

Ceph是一個高性能、可擴容的分佈式存儲系統,它提供 三大功能:

對象存儲(RADOSGW ):提供RESTful接口,也提供多種編程語言綁定。兼容S3、Swift(類似於nosql數據庫的key、value存儲);

塊存儲(RDB ):由RBD提供,可以直接作爲磁盤掛載,內置了容災機制(磁盤);

文件系統(CephFS ):提供POSIX兼容的網絡文件系統CephFS,專注於高性能、大容量存儲(共享目錄);

ceph核心組件

(1 )Monitors: :監視器,維護集羣狀態的多種映射,同時提供認證和日誌記錄服務,包括有關monitor 節點端到端的信息,其中包括 Ceph 集羣ID,監控主機名和IP以及端口。並且存儲當前版本信息以及最新更改信息,通過 “ceph mon dump”
查看 monitor map。(管理組件)
(2 )MDS (Metadata Server ):Ceph 元數據,主要保存的是Ceph文件系統的元數據。注意:ceph的塊存儲和ceph對象存儲都不需要MDS。
(3 )OSD: :即對象存儲守護程序,但是它並非針對對象存儲。是物理磁盤驅動器,將數據以對象的形式存儲到集羣中的每個節點的物理磁盤上。OSD負責存儲數據、處理數據複製、恢復、回填(Backfilling)、再平衡。完成存儲數據的工作絕大多數是由 OSD daemon 進程實現。在構建 Ceph OSD的時候,建議採用SSD 磁盤以及xfs文件系統來格式化分區。此外OSD還對其它OSD進行心跳檢測,檢測結果彙報給Monitor
(4 )RADOS :Reliable Autonomic Distributed Object Store。RADOS是ceph存儲集羣的基礎。在ceph中,所有數據都以對象的形式存儲,並且無論什麼數據類型,RADOS對象存儲都將負責保存這些對象。RADOS層可以確保數據始終保持一致。(對象存儲層)
在這裏插入圖片描述

(5 )librados :librados庫,爲應用程度提供訪問接口。同時也爲塊存儲、對象存儲、文件系統提供原生的接口。
(6 )RADOSGW :網關接口,提供對象存儲服務。它使用librgw和librados來實現允許應用程序與Ceph對象存儲建立連接。並且提供S3 和 Swift 兼容的RESTful API接口。
(7 )RBD: :塊設備,它能夠自動精簡配置並可調整大小,而且將數據分散存儲在多個OSD上。
(8 )CephFS :Ceph文件系統,與POSIX兼容的文件系統,基於librados封裝原生接口。

Ceph存儲系統的邏輯層次結構
在這裏插入圖片描述

RADOS的系統邏輯結構
在這裏插入圖片描述

Ceph 數據存儲過程:
在這裏插入圖片描述

無論使用哪種存儲方式(對象、塊、文件系統),存儲的數據都會被切分成Objects。Objects size大小可以由管理員調整,通常爲2M或4M。每個對象都會有一個唯一的OID,由ino與ono生成,雖然這些名詞看上去很複雜,其實相當簡單。

ino :即是文件的File ID,用於在全局唯一標識每一個文件
ono: :則是分片的編號
比如:一個文件FileID爲A,它被切成了兩個對象,一個對象編號0,另一個編號1,那麼這兩個文件的oid則爲A0與A1。

File —— 此處的file就是用戶需要存儲或者訪問的文件。對於一個基於Ceph開發的對象存儲應用而言,這個file也就對應於應用中的“對象”,也就是用戶直接操作的“對象”。

Ojbect —— 此處的object是RADOS所看到的“對象”。Object與上面提到的file的區別是,object的最大size由RADOS限定(通常爲2MB或4MB),以便實現底層存儲的組織管理。因此,當上層應用向RADOS存入size很大的file時,需要將file切分成統一大小的一系列object(最後一個的大小可以不同)進行存儲。爲避免混淆,在本文中將盡量避免使用中文的“對象”這一名詞,而直接使用file或object進行說明。

PG (Placement Group )—— 顧名思義,PG的用途是對object的存儲進行組織和位置映射。具體而言,一個PG負責組織若干個object(可以爲數千個甚至更多),但一個object只能被映射到一個PG中,即,PG和object之間是“一對多”映射關係。
同時,一個PG會被映射到n個OSD上,而每個OSD上都會承載大量的PG,即,PG和OSD之間是“多對多”映射關係。在實踐當中,n至少爲2,如果用於生產環境,則至少爲3。一個OSD上的PG則可達到數百個。事實上,PG數量的設置牽扯到數據分
布的均勻性問題。關於這一點,下文還將有所展開。

OSD —— 即object storage device,前文已經詳細介紹,此處不再展開。唯一需要說明的是,OSD的數量事實上也關係到系統的數據分佈均勻性,因此其數量不應太少。在實踐當中,至少也應該是數十上百個的量級才有助於Ceph系統的設計發揮其應有的優勢。

基於上述定義,便可以對尋址流程進行解釋了。具體而言, Ceph中的尋址至少
要經歷以下三次映射:
(1)File -> object映射
(2)Object -> PG映射,hash(oid) & mask -> pgid
(3)PG -> OSD映射,CRUSH算法
CRUSH,Controlled Replication Under Scalable Hashing,它表示數據存儲的分佈式選擇算法, ceph 的高性能/高可用就是採用這種算法實現。CRUSH 算法取代了在元數據表中爲每個客戶端請求進行查找,它通過計算系統中數據應該被寫入或讀出的位置。CRUSH能夠感知基礎架構,能夠理解基礎設施各個部件之間的關係。並CRUSH保存數據的多個副本,這樣即使一個故障域的幾個組件都出現故障,數據依然可用。CRUSH 算是使得 ceph 實現了自我管理和自我修復

RADOS 分佈式存儲相較於傳統分佈式存儲的優勢在於:
  1. 將文件映射到object後,利用Cluster Map 通過CRUSH 計算而不是查找表方式
定位文件數據存儲到存儲設備的具體位置。優化了傳統文件到塊的映射和Block
MAp的管理。
  2. RADOS充分利用OSD的智能特點,將部分任務授權給OSD,最大程度地實現
可擴展

Ceph IO 流程及數據分佈:
在這裏插入圖片描述

正常IO流程圖:

在這裏插入圖片描述

步驟:

  1. client 創建cluster handler。
  2. client 讀取配置文件。
  3. client 連接上monitor,獲取集羣map信息。
  4. client 讀寫io 根據crshmap 算法請求對應的主osd數據節點。
  5. 主osd數據節點同時寫入另外兩個副本節點數據。
  6. 等待主節點以及另外兩個副本節點寫完數據狀態。
  7. 主節點及副本節點寫入狀態都成功後,返回給client,io寫入完成。

新主IO流程圖:
在這裏插入圖片描述

說明:如果新加入的OSD1取代了原有的 OSD4成爲 Primary OSD, 由於 OSD1 上未創建 PG , 不存在數據,那麼 PG 上的 I/O 無法進行,怎樣工作的呢?

新主IO流程步驟:

  1. client連接monitor獲取集羣map信息。
  2. 同時新主osd1由於沒有pg數據會主動上報monitor告知讓osd2臨時接替爲主。
  3. 臨時主osd2會把數據全量同步給新主osd1。
  4. client IO讀寫直接連接臨時主osd2進行讀寫。
  5. osd2收到讀寫io,同時寫入另外兩副本節點。
  6. 等待osd2以及另外兩副本寫入成功。
  7. osd2三份數據都寫入成功返回給client, 此時client io讀寫完畢。
  8. 如果osd1數據同步完畢,臨時主osd2會交出主角色。
  9. osd1成爲主節點,osd2變成副本。

Ceph Pool 和PG 分佈情況 :
在這裏插入圖片描述

pool:是ceph存儲數據時的邏輯分區,它起到namespace的作用。

每個pool包含一定數量(可配置) 的PG。
PG裏的對象被映射到不同的Object上。
pool是分佈到整個集羣的。
pool可以做故障隔離域,根據不同的用戶場景不一進行隔離。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章