1. 程式人生 > 實用技巧 >ceph基本原理(個人見解)

ceph基本原理(個人見解)

1、常見的儲存裝置或者儲存系統
·儲存介質
·磁碟
·sata
·ssd
·sas
·磁帶
·光碟
·軟盤

2、儲存型別
·塊儲存
·分割槽、格式化、掛載
·raw
·物件儲存
·本質上是把資料儲存在檔案系統上的,存檔案一定是存在檔案系統上的。
·物件儲存會將檔案的元資料和資料儲存在一起,普通的檔案儲存系統是分開儲存的。這就是區別
·資料名稱不可修改
·資料也不可修改
·記錄資料名稱、路徑即可

·查詢資料的時候,必須要以絕對路徑查詢資料
·檔案系統儲存
·格式化:裝載檔案系統,需要格式化才能使用的(在格式化時候,會少了點大小,那些少的是儲存元資料資訊。)只要是檔案系統,一定會有元資料。

磁碟由一個個的小格子組成的,每個小格子稱為資料塊,一個塊大小是可以由格式化的時候指定
比如 mkfs.xfs
整個過程是把整個磁碟一個個的拆成小的磁碟塊,可以指定塊的大小,不指定的話,預設大小就是4KB,4096個位元組。
寫資料的時候,就是一塊一塊的寫。如果資料小於4K,剩餘的也不可以給別人用。如果是小檔案太多了(就是說寫入塊的資料不大於4KB,每個塊都裡面寫入的資料都是小於4KB),而且沒順序,諸如此類的稱為磁碟碎片,只是針對機械盤。

為什麼塊儲存被稱為裸磁碟?
因為在裝載檔案系統之前,或者過程中,整個磁碟介質是被劃分為4KB的小格子,每個小格子被稱為塊,所以被稱為塊儲存,而塊儲存也被稱為裸儲存,裸儲存是不可以直接寫資料的,如果要裸儲存要寫資料,必須要格式化。分割槽,格式化,掛載,然後就變成了檔案系統儲存,才可以寫資料。

什麼是塊儲存?
就是一塊裸磁碟,沒做任何格式化。

塊儲存和裸磁碟的區別就是:有沒有格式化,有沒有裝載檔案系統,沒有裝載檔案系統就是塊儲存,裝載了檔案系統或者格式化就是檔案系統儲存。

檔案:
1、元資料
2、真正的資料

元資料包含什麼?
檔案的大小、檔案的許可權、屬組、檔案儲存的位置等這些被稱為元資料,磁碟上有單獨的地方儲存這些元資料資訊。

在這裡插入圖片描述

比如這些東西,許可權,屬組之類的,建立的時候也沒有指定,這些就是元資料資訊。

我們在查詢檔案的時候,返回的也有元資料的資訊。

真正的資料是:真正的檔案

物件儲存會將檔案的元資料和資料儲存在一起,問題是如何查詢資料?
檔案系統會做很多複雜的操作,很多的就是基於元資料去查詢資料。如果在一塊的話,查詢元資料也就是查詢資料。

但是如果元資料和資料在一塊,怎麼找元資料?
物件儲存,資料一旦寫入,資料名稱不可修改,那麼就以資料名字做唯一索引,對於物件儲存而言,沒辦法通過元資料來查詢資料,所以說存進去的資料名是不可修改的,資料也不可修改,物件儲存存上去的東西,一經儲存,什麼都不能改。這樣的話,物件儲存只需要記錄資料名稱,路徑即可。而資料名稱,路徑是自己記錄的。在查詢資料的時候,需要傳入明確的資料名稱以及路徑。

物件儲存資料可以寫入也可以刪除,查詢。
對於物件儲存可以增刪改。但是不可修改。
在這裡插入圖片描述

物件儲存只能通過框柱的方法去查,下面的查不到。

物件儲存適用場景:
網盤、備份、後端資源、映象、視訊、圖片、日誌檔案

既然物件儲存本質也是在檔案系統上的,檔案系統也可以增刪改查,為什麼還要物件儲存呢?
因為物件儲存提供了一套標準的rest介面,支援遠端讀寫。檔案系統是一個系統。
物件儲存本身是一個服務,對於物件儲存而言,本身提供了一個http服務,可以通過這個介面上傳資料,下載資料,本質上是寫在本地儲存上的。
最主要的是提供了http介面,可以讀寫刪除。
好比登陸百度網盤寫入資料。如果是檔案系統的話,就是提供一個檔案系統去寫。。。。這樣不合適。。。
http服務支援增刪查,curl -X POST http://s3.gch.cn/aaa/bbb/111 -d @111.txt 將本地的@111.txt檔案上傳到物件儲存上了。
在這裡插入圖片描述

讀取的時候 curl http://s3.gch.cn/aaa/bbb/111 這樣就是讀取下來了。但是不支援修改,如果要修改,下載到本地再POST上去,但是那又是一個新的,和之前的沒半毛錢關係。
curl -X DELETE http://s3.gch.cn/aaa/bbb/111 刪除上傳的內容。

集中式儲存:
·DAS:直連式儲存,通過磁碟匯流排連線,行動硬碟就是個很好的例子。
·SAN:本質上和DAS沒區別,只不過SAN是通過網路連線,全稱是儲存區域網路
·光纖儲存fcsan
·iscsiscan掛載的是裸磁碟,需要自己格式化,分割槽,裝載檔案系統
·NAS:也是網路連線,區別是SAN提供的是塊儲存,NAS是提供的網路系統儲存,在NAS上面已經格式好了,可以直接使用,但是SAN是裸磁碟,需要自己裝載檔案系統。所以說NAS只是比SAN多做了一步。最典型的NAS就是NFS,CIFS(CIFS針對windows實現SMB服務)

淘寶的大戰略:去IOE,去除IBM的aix,去除Oracle資料庫,去除EMC儲存。這些東西太貴了,能嚇死人,所以說淘寶將這些東西全部去除。
將Oracle替換為—>mysql---->alisql
aix替換為—>x86服務—>linux---->alios(centos)

因為EMC儲存就是用的SAN和NAS,當磁碟插滿的時候就得買,但是太貴了。

分散式儲存就是因為商業儲存太貴才發展起來的:
1、便宜
·可以用普通的商業伺服器甚至是普通的家用伺服器就可以組建起來分散式儲存,對硬體要求不是很大
2、能解決商業儲存的裝置:可以擴充套件到任意大小,擴充套件性。
·當磁碟空間不足時,可以隨意新增磁碟空間
3、可用性。
·一臺伺服器一塊盤或者一塊伺服器出現宕機時候,資料服務不會丟失,還可正常提供服務。
4、效能還過得去。只有資料庫對這種需求比較大,但是資料庫也不會放到分散式儲存上。資料庫基本是DAS
·保障基本的業務效能需求。

分散式儲存:
·moosefs
·metaserver:
·1、與客戶端建立連線並返回資料相關的資訊,比如說chunkserver在哪,讀取的資料在哪,應該寫到哪個chunkserver上。
·2、儲存元資料資訊
·3、只要儲存元資料的就叫metaserver

·glusterfs
·ceph

對於儲存而言,客戶端是業務伺服器。儲存視訊,圖片之類的是由業務伺服器存的。
為什麼分散式儲存效能會差?
因為在寫入資料的時候,為了分佈會將資料寫入到每個伺服器裡面,而且再加上網路的傳輸延遲,所以說效能不是很好,而且還有一個重要的是,網路要強壯,網路必須要好。不然直接影響效能。

mkfs —>分散式的檔案系統儲存
chunkserver:資料伺服器。chunkserver之間會互相讀資料。掛掉一個chunkserver也只是丟掉一個副本而已,不影響業務。除非全掛了。因為是多個副本,所以說不需要做raid,掛了就掛了,掛了直接拔掉再換一個新的。

metaserver:元資料伺服器。有所有chunkserver的資訊,儲存資料的大小、屬組屬主、mode、副本數、每個磁碟的獨立標識。讀資料直接從meteserver找。然後將對應的chunkserver返回給客戶端。
1、與客戶端建立連線並返回資料相關的資訊,比如說chunkserver在哪,讀取的資料在哪,應該寫到哪個chunkserver上。
2、儲存元資料資訊

但是如果chunkserver有幾百臺,那麼metaserver怎麼辦?
對於moosefs分散式儲存而言,metaserver是無法擴充套件的,如果滿了就完了。這也是一個最大弊端。

萬一metaserver掛了怎麼辦呢?
於是出現了metalogserver,元資料在寫入的同時會出現日誌,metalogserver會實時同步metaserver上的資料,如果metaserver掛了,將metalogserver的備份匯入到metaserver。但是這樣的最大問題,就是儲存會中斷了,那就找死了。所以說metalogserver是一個雞肋。

做一個NFS,將幾臺metaserver掛載到同一個NFS,這樣就可以共享儲存資料,因為moosefs的工作機制,只能有一臺metaserver工作。

但是對接的時候,第二臺metaserver要載入第一臺metaserver的記憶體快取到自己的伺服器上,這個過程,會非常非常慢,效能非常差。
在這個載入的時間,雖然能正常提供mfs服務,但是一邊要載入記憶體快取,一邊還要提供服務,這個時候的效能是非常差的,非常非常的卡。

所以這也是mfs不適合超大儲存規模的一個原因。

ceph:
提供的最早功能是:物件儲存,在此基礎上擴充套件了塊儲存(效能不好),最後才有了檔案系統儲存(效能也不好)。但是對檔案系統的支援是很差。
物件儲存最早誕生於:AWS(亞馬遜雲),當初也不叫物件儲存,叫s3,最大的意義就是解決了上傳下載大檔案的問題。
最主要的意義是定義了一套標準的介面, curl -X POST完成上傳,curl -X GET 完成下載,curl-X DELETE完成刪除,根據這些規範完成s3的操作。

然後全球巨大的山寨之王:OpenStack—>swift,也定義了一套物件儲存的規範,因為S3和swift名氣非常大,所以說,所有云的物件儲存規範都會支援S3和swift。

moosefs和glusterfs是隻支援檔案系統儲存
moosefs的檔案系統儲存就只有一個元資料伺服器,glusterfs的檔案儲存將元資料伺服器拆成兩份,客戶端承受一部分功能,服務端也承受一部分功能。

ceph同時支援三種類型,而且不存在單點故障(高可靠性),每個元件都可以擴充套件(高擴充套件性),可以執行在任何普通商業硬體之上(所有分散式儲存都是這樣),每個元件都儘可能擁有自我管理和自我修復能力:
ceph的物件儲存:
非常好

ceph的塊儲存:底層是物件。
如果要使用ceph的塊儲存,沒有nvme-ssd和SATA-ssd就別用了。本身就是依靠ssd的效能,自己真的很一般。

ceph的檔案系統儲存:
是最差的,

sds—>software define storage 軟體定義儲存 #通過分散式軟體實現分散式儲存
sdn—> software define network 軟體定義網路 #通過分散式軟體實現分散式網路

ceph的發行版本以的26字母為準。最新版本是P版16.X 。2020年10月11日11:29:11。
當前最新穩定版是N版,14.X。偶數是穩定版,奇數是開發版。N版相當於L版有了巨大的效能提升。
在這裡插入圖片描述

對於ceph而言,也要有客戶端,只需要安裝客戶端包就行了。客戶端基於寫物件是http

monitor:是整個叢集入口,負責與客戶端建立連線,並返回叢集狀態資訊給客戶端。
所以說monitor記錄的資料:叢集中有多少個數據節點,每個資料節點有多少塊磁碟,每塊磁碟有多大容量。

OSD:真正儲存資料,每一個儲存節點成為OSD節點,每一個儲存資料的磁碟成為OSD磁碟,磁碟大小不需要一樣。ceph內部對每個磁碟大小不同的磁碟有一個權重(優先順序)。物件儲存在儲存資料的時候會進行切片。每個OSD之間都互相同步資料。對於ceph而言,一個數據塊為4M,檔案大於4M就會進行切片。

對ceph而言,如果是做檔案系統掛載呢?
元資料伺服器是獨立的元資料伺服器,只對於ceph而言。
但是在ceph中,做檔案系統掛載,元資料伺服器是一定需要的,元資料伺服器是用來儲存元資料的,元資料實際上是儲存在OSD上面的,客戶端首先請求monitor拿到叢集狀態資訊,然後通過叢集狀態資訊就可以找到元資料是哪個,找到元資料之後會請求元資料伺服器,元資料伺服器回去找OSD拿到元資料,然後在元資料伺服器的本地快取一份,然後元資料伺服器把元資料返回給客戶端。所以說元資料資訊是由元資料伺服器返回給客戶端的,客戶端請求OSD只是拿資料,不是拿元資料,元資料只是找MDS拿的。

Ceph的元資料伺服器叫MDS,只在檔案系統儲存中才有。

MGR:主要作用是監控,通常與monitor裝在一起,不需要任何配置。

一個OSD程序代表一塊磁碟。

磁碟都是單盤,所以說不用raid。如果必須要做raid,那就針對所有單盤都做個raid0。好處就是加速磁碟寫入。
ceph主要是用副本來保護資料的。


-----來自河南經貿19級計算機工程學院的一名普通學生,通過部落格來分享自己日常收穫到的新知識,會持續堅持,感謝大家的閱讀,希望可以幫到你!
PS:初步學習Ceph,理解不到位之處多謝包涵!

轉載的希望可以放上本文章的連結,謝謝!