當前位置:首頁 » 服務存儲 » ceph對象存儲分級混合雲
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

ceph對象存儲分級混合雲

發布時間: 2023-03-15 18:24:20

⑴ Linux裡面ceph是什麼

Linux裡面ceph
Ceph是一個可靠地、自動重均衡、自動恢復的分布式存儲系統,根據場景劃分可以將Ceph分為三大塊,分別是對象存儲、塊設備存儲和文件系統服務。在虛擬化領域里,比較常用到的是Ceph的塊設備存儲,比如在OpenStack項目里,Ceph的塊設備存儲可以對接OpenStack的cinder後端存儲、Glance的鏡像存儲和虛擬機的數據存儲,比較直觀的是Ceph集群可以提供一個raw格式的塊存儲來作為虛擬機實例的硬碟
Ceph相比其它存儲的優勢點在於它不單單是存儲,同時還充分利用了存儲節點上的計算能力,在存儲每一個數據時,都會通過計算得出該數據存儲的位置,盡量將數據分布均衡,同時由於Ceph的良好設計,採用了CRUSH演算法、HASH環等方法,使得它不存在傳統的單點故障的問題,且隨著規模的擴大性能並不會受到影響。

⑵ ceph這款雲存儲技術怎麼樣

雲存儲是在雲計算(cloud computing)概念上延伸和發展出來的一個新的概念,是一種新興的網路存儲技術,是指通過集群應用、網路技術或分布式文件系統等功能,將網路中大量各種不同類型的存儲設備通過應用軟體集合起來協同工作,共同對外提供數據存儲和業務訪問功能的一個系統。當雲計算系統運算和處理的核心是大量數據的存儲和管理時,雲計算系統中就需要配置大量的存儲設備,那麼雲計算系統就轉變成為一個雲存儲系統,所以雲存儲是一個以數據存儲和管理為核心的雲計算系統。簡單來說,雲存儲就是將儲存資源放到雲上者桐供人存取的一種新興方案。使用者可以在任何時間、任何地方,透過任何可連網的裝置連接到雲上方便地存取數據。
數據備份、歸檔和災難恢復是雲存儲可能的三個用途。
雲存儲可分為以下三類:
1.公共雲存儲
供應商可以保持每個客戶的存儲、應用都是獨立的,私有的。其中以Dropbox為代表的個人雲存儲服務是公共雲存儲發展較為突出的代表,物嫌並國內比較突出的代表的有搜狐企業網盤,網路雲盤,樂視雲盤[1] ,移動彩雲,金山快盤,堅果雲,酷盤,115網盤,華為網盤,360雲盤,新浪微盤,騰訊微雲,cStor雲存儲等。
2.內部雲存儲
這種雲存儲和私有雲存儲比較類似,唯一的不同點是它仍然位於企業防火牆內部。至2014年可以提供私有雲的罩跡平台有:Eucalyptus、3A Cloud、minicloud安全辦公私有雲、聯想網盤等。
3.混合雲存儲
這種雲存儲把公共雲和私有雲/內部雲結合在一起。主要用於按客戶要求的訪問,特別是需要臨時配置容量的時候。從公共雲上劃出一部分容量配置一種私有或內部雲可以幫助公司面對迅速增長的負載波動或高峰時很有幫助。盡管如此,混合雲存儲帶來了跨公共雲和私有雲分配應用的復雜性。

⑶ CentOS 7部署 Ceph分布式存儲架構

隨著OpenStack日漸成為開源雲計算的標准軟體棧,Ceph也已經成為OpenStack的首選後端存儲。Ceph是一種為優秀的性能、可靠性和可擴展性而設計的統一的、分布式文件系統。

Ceph是一個開源的分布式文件系統。因為它還支持塊存儲、對象存儲,所以很自然的被用做雲計算框架openstack或cloudstack整個存儲後端。當然也可以單獨作為存儲,例如部署一套集群作為對象存儲、SAN存儲、NAS存儲等。

前三台伺服器增加一塊硬碟/dev/sdb實驗, 創建目錄並掛載到/var/local/osd{1,2,3};

規范系統主機名添加hosts文件實現集群主機名與主機名之間相互能夠解析(host 文件添加主機名不要使用fqdn方式)可用 hostnamectl set-hostname [name] 設置分別打開各節點的 /etc/hosts 文件,加入這四個節點ip與名稱的對應關系:

在管理節點使用ssh-keygen 生成ssh keys 發布到各節點

第一步:增加 yum配置文件(各個節點都需要增加yum源) vim /etc/yum.repos.d/ceph.repo

或阿里的ceph源

復制配置文件到其它節點和客戶端

在ceph1更新軟體源並安裝ceph-deploy 管理工具

配置文件的默認副本數從3改成2,這樣只有兩個osd也能達到 active+clean 狀態,添加行 osd_pool_default_size = 2

(如果網路源安裝失敗,手工安裝epel-release 然後安裝yum –yinstall cep-release再yum –y install ceph ceph-radosgw)
錯誤參考: https://blog.csdn.net/yenai2008/article/details/72457463

添加osd節點 (所有osd節點執行)
我們實驗准備時已經創建目錄/var/local/osd{id}

(用ceph-deploy把配置文件和admin密鑰拷貝到所有節點,這樣每次執行Ceph命令行時就無需指定monitor地址和ceph.client.admin.keyring了)

以上基本上完成了ceph存儲集群的搭建。

其中: <pg_num> = 128 ,
關於創建存儲池
確定 pg_num 取值是強制性的,因為不能自動計算。下面是幾個常用的值:

隨著 OSD 數量的增加,正確的 pg_num 取值變得更加重要,因為它顯著地影響著集群的行為、以及出錯時的數據持久性(即災難性事件導致數據丟失的概率)。

創建好存儲池後,你就可以用 fs new 命令創建文件系統了
ceph fs new <fs_name> cephfs_metadata cephfs_data
其中: <fs_name> = cephfs 可自定義

在這里想起沒在/etc/fstab配置ceph1、ceph2、ceph3的sdb自動掛載。

ceph在開源社區還是比較熱門的,但是更多的是應用於雲計算的後端存儲。所以大多數在生產環境中使用ceph的公司都會有專門的團隊對ceph進行二次開發,ceph的運維難度也比較大。但是經過合理的優化之後,ceph的性能和穩定性都是值得期待的。

清理機器上的ceph相關配置

可以參考內容: http://blog.51cto.com/12270625/1887648

⑷ Ceph之對象存儲

RGW 全稱為Rados GateWay,是Ceph 對象存儲網關,用於向客戶端應用程序提供存儲界面,提供RestFul API 介面
Ceph對象網關是一個構建在librados之上的對象存儲介面,它為應用程序訪問Ceph 存儲提供了一個RESTFul 風格的網關。Ceph 對象存儲支持兩種介面:

1.用戶: 對象存儲應用的使用者,一個用戶擁有一個或者多個存儲桶。RGW 向您提供的用戶賬號寶琨了AK(AccessKeyID)和SK(SecretAccessKeyID)。通過使用AK和SK 對稱加密的方法來驗證某個請求的發送至身份。

參考blog: https://blog.z0ukun.com/?p=2765

⑸ ceph(第一步) 基礎架構

ceph 是什麼?
ceph 是一種開源存儲軟體。底層實現了對象存儲,並以此為基礎對外提供對象存儲介面、塊存儲介面、文渣跡穗件級存儲介面。

ceph 結構包含兩個部分:

ceph 版本:Nautilus

官網的一張架構圖:

對於這張圖,一開始沒有看懂它想表達什麼,後來明白了。如下圖:

相關名詞解釋:

ceph 組件分為兩部分:

此部分介紹構成 ceph 集群的基礎組件。
其中包含 OSD、Manager、MDS、Monitor。

此部分介紹 ceph 對外提供各種功能的組件。
其中包含:Block Device、Object Storage、Filesystem。

前面兩個部分主要介紹了 ceph 的一些組件及對外提供的功能。
這部分主要介紹 ceph 的存儲邏輯。

首先,在對象存儲中,一切都是扁平化的,並且存儲的最小單元為對象(obj)。存儲 obj 如下圖:

ceph 在對象存儲的基礎上提供了更加高級的思想。

當對象數量達到了百萬級以上,原生的對象存儲在索引對象時消耗的性能非常大。ceph 因此引入了 placement group (pg)的概念。一個 pg 就是一組對象的集合。如下圖:

obj 和 pg 之間的映射由 ceph client 計算得出。

討論 pg 時,不得不提的另外一個名詞:pgp。
pgp 決定了 pg 和 osd 之間的映射關系。一般將 pgp_num 設置成和 pg_num 一樣大小。

這里還有一個名詞需要提一下,在 ceph 中會經常見到 crush 演算法。簡單來說,crush 演算法就是指 ceph 中數據如何存儲、讀取的過程。如卜

由於 ceph 集群面對許多的獨立項目,因此 ceph 還引入了 ceph pool 的概念用於劃分不同的項目。
ceph pool 是對 ceph 對象的邏輯劃分,並不是物理劃分。

pg 和 ceph pool 的區別:

像大多數集群軟體一樣,ceph 也提供了緩存的概念。稱之為 Cache Tier(緩存層,在具體使用時有時會稱之為緩存池)。
緩存池對用戶來說是透明的,因此不會改變用戶的原有使用邏輯。以下緩存池的介紹,均為底層邏輯。
在沒有緩存池時,ceph client 直接指向存儲池。
在添加緩存池後,ceph client 指向緩存池,緩存池再指向存儲池。

官方原話:
When pg_num is increased for any pool, every PG of this pool splits into half, but they all remain mapped to their parent OSD.
Until this time, Ceph does not start rebalancing. Now, when you increase the pgp_num value for the same pool, PGs start to migrate from the parent to some other OSD, and cluster rebalancing starts. This is how PGP plays an important role.
By Karan Singh
個人翻譯:
當州旦一個池增加 pg 數量時,這個池中的所有 pg 都會變化。但是原 pg 的實際物理存儲位置不會改變。
當一個池增加 pgp 的數量時,pg 的實際物理存儲位置會發生改變。

首先,截至目前,沒有具體查到資料證明以下觀點。(基於一致性hash的猜想)

圖中出現了一個新詞: vosd ,這個是指虛擬 osd。它的數量等於 pgp 的數量,而 pgp 一般又等於 pg。

pgp 的數量就是 vosd 的數量。

引入 pg 可以實現 pool 概念,以及優化碎片管理(這一點十分不確定)。

引入 pgp(vosd),是為了在增加 osd 時可以讓數據更加均衡的分布。

如猜想圖:
當我們增加池的 pg 數量時,不會改變 vosd,因此原 pg 與 vosd 之間的映射未變,原 pg 的實際物理位置也不會發生變化。只是會影響同一個池中 obj 的分布。
當我們增加池的 pgp 數量時,相當於改變了 vosd,通過 hash 計算出的部分 pg 與 vosd 之間的映射就要發生改變,從而導致 pg 的實際物理位置發生改變。

與一致性hash不同的地方:
一般情況下,一致性hash只有一層虛擬化層,並且虛擬化層是根據物理硬體而變化的。但是ceph卻是一種反著來的意思。

當 ceph 增加一個 osd 時,pg 的物理位置也會發生改變。
在該猜想下:
當增加 osd 時,並不會增加 vosd 的數量,原部分 vosd 會映射到新的 osd 上,因此產生一種部分 pg 的實際物理位置發生變化的情況。

創建池時,會分配固定的 pg,以及設置與 pg 一樣大小的 pgp。
注意,一般 pg 數量都設置為 2 的次方。

嚴格意義上,我們無論為池分配多少個 pg 都沒有問題。但有時候 pg num 配置小了會報錯,配置大了也會報錯。這不是因為這么配置不對,是因為有其它的參數在限制我們隨意配置 pg num。

比如:
osd 有兩個配置,當每個 osd 的 pg num 過少(默認30)時會告警,當每個 osd 的 pg num 過多(默認300)也會告警。

所以,想要入門使用 ceph,還是需要了解許多基礎知識才可以。否則,各種意外。

https://docs.ceph.com/docs/master/architecture/

https://ceph.com/pgcalc/

⑹ 信息以文件形式存儲,文件用什麼分類分層存放

文件、塊和對象是三種以不同的方式來保存、整理和呈現數據的存儲格式。這些格式各有各的功能和限制。文件存儲會以文件和文件夾的層次結構來整理和呈現數據;塊存儲會將數據拆分到任意劃分且大小相同的卷中; 對象存儲會管理數據並將其鏈接至關聯的元數據。

塊存儲
塊存儲會將數據拆分成塊,並單獨存儲各個塊。每個數據塊都有一個唯一標識符,所以存儲系統能將較小的數據存放在最方便的位置。這意味著有些數據可以存儲在 Linux 環境中,有些則可以存儲在 Windows 單元中。

塊存儲通常會被配置為將數據與用戶環境分離,並會將數據分布到可以更好地為其提供服務的多個環境中。然後,當用戶請求數據時,底層存儲軟體會重新組裝來自這些環境的數據塊,並將它們呈現給用戶。它通常會部署在存儲區域網路 (SAN) 環境中,而且必須綁定到正常運行的伺服器。

由於塊存儲不依賴於單條數據路徑(和文件存儲一樣),因此可以實現快速檢索。每個塊都獨立存在,且可進行分區,因此可以通過不同的操作系統進行訪問,這使得用戶可以完全自由地配置數據。它是一種高效可靠的數據存儲方式,且易於使用和管理。它適用於要執行大型事務的企業和部署了大型資料庫的企業。這意味著,需要存儲的數據越多,就越適合使用塊存儲。

塊存儲有一些缺點。塊存儲的成本高昂。它處理元數據的能力有限。

操作對象:磁碟

存儲協議:SCSI、iSCSI、FC

介面命令:以SCSI為例,主要有Read/Write/Read Capacity

存儲架構:DAS、SAN

文件存儲
文件存儲也稱為文件級存儲或基於文件的存儲,數據會以單條信息的形式存儲在文件夾中。當需要訪問該數據時,計算機需要知道相應的查找路徑。存儲在文件中的數據會根據元數據來進行整理和檢索,這些元數據會告訴計算機文件所在的確切位置。

請試想一下塞滿文件櫃的儲藏室。每個文檔都會按照某種類型的邏輯層次結構來排放 ——按文件櫃、抽屜、文件夾,然後再是紙張。「分層存儲」這個術語就是這么來的,而這就是文件存儲。它是適用於直接和網路附加存儲(NAS)系統的最古老且運用最為廣泛的一種數據存儲系統;當訪問保存在個人計算機上的文件中的文檔,就是在使用文件存儲。文件存儲具有豐富多樣的功能,幾乎可以存儲任何內容。它非常適合用來存儲一系列復雜文件,並且有助於用戶快速導航。

問題是基於文件的存儲系統必須通過添置更多系統來進行橫向擴展,而不是通過增添更多容量來進行縱向擴展。

操作對象:文件和文件夾

存儲協議:NFS、SAMBA(SMB)、POSIX

介面命令:以NFS為例,文件相關的介面命令包括:READ/WRITE/CREATE/REMOVE/RENAME/LOOKUP/ACCESS 等;文件夾相關的介面命令包括:MKDIR/RMDIR/READDIR 等

存儲架構:NAS (【Linux】NAS存儲_Jacky_Feng的博客-CSDN博客)
對象存儲
對象存儲,也稱為基於對象的存儲,是一種扁平結構,其中的文件被拆分成多個部分並散布在多個硬體間。在對象存儲中,數據會被分解為稱為「對象」的離散單元,並保存在單個存儲庫中,而不是作為文件夾中的文件或伺服器上的塊來保存。

對象存儲卷會作為模塊化單元來工作:每個卷都是一個自包含式存儲庫,均含有數據、允許在分布式系統上找到對象的唯一標識符以及描述數據的元數據。元數據包括年齡、隱私/安全信息和訪問突發事件等詳細信息。為了檢索數據,存儲操作系統會使用元數據和標識符,這樣可以更好地分配負載,並允許管理員應用策略來執行更強大的搜索。

對象存儲需要一個簡單的 HTTP 應用編程介面 (API),以供大多數客戶端(各種語言)使用。對象存儲經濟高效:您只需為已用的內容付費。它可以輕松擴展,因而是公共雲存儲的理想之選。它是一個非常適用於靜態數據的存儲系統,其靈活性和扁平性意味著它可以通過擴展來存儲極大量的數據。對象具有足夠的信息供應用快速查找數據,並且擅長存儲非結構化數據。
它的缺點是無法修改對象 ,即必須一次性完整地寫入對象。對象存儲也不能很好地與傳統資料庫搭配使用,因為編寫對象是一個緩慢的過程,編寫應用以使用對象存儲 API 並不像使用文件存儲那麼簡單。

操作對象:對象(Object)

存儲協議:S3、Swift

介面命令:主要有PUT/GET/DELETE等

存儲架構:去中心化框架

對象存儲概念
對象存儲的數據組成

存儲桶(Bucket):存放對象的「容器」,且該「容器」無容量上限。對象以扁平化結構存放在存儲桶中,無文件夾和目錄的概念,用戶可選擇將對象存放到單個或多個存儲桶中。存儲桶的容量大小需要通過累加各個對象的大小得到。

每個存儲桶可容納任意數量的對象,但同一個主賬號下存儲桶數量最多僅能夠創建200個。(???)

對於存儲桶,應當以用途為粒度進行劃分,確保每個存儲桶的用途盡可能單一。例如,針對存放個人文件、發布靜態網站、存儲備份等用途都應該創建不同的存儲桶。此外,不同項目的數據、不同的網站,或者完全私人的文件與工作性質、需要分享的文件,也應該劃分不同的存儲桶。

對象存儲中也沒有「文件夾」的概念。對象存儲的管理平台為了模仿本地存儲的使用習慣,並與本地存儲系統互相兼容而模擬了目錄結構,背後的原理也僅僅是根據 / 這個字元對 key 進行分隔。為了表示空目錄,部分雲平台也提供「文件夾」對象,實際上只是 key 以 / 結尾的空存儲對象。

存儲桶所在地域(Regin)

指對象存儲的數據中心所在地域。對象存儲允許用戶在不同地域創建存儲桶,可以選擇在離業務最近的地域上創建存儲桶,以滿足低延遲、低成本以及合規性要求。

Bucket讀寫許可權

Bucket讀寫許可權包括:私有讀寫、公有讀私有寫和公有讀寫。

私有讀寫
只有該存儲桶的創建者及有授權的賬號才對該存儲桶中的對象有讀寫許可權,其他任何人對該存儲桶中的對象都沒有讀寫許可權。存儲桶訪問許可權默認為私有讀寫,推薦使用。
公有讀私有寫
任何人(包括匿名訪問者)都對該存儲桶中的對象有讀許可權,但只有存儲桶創建者及有授權的賬號才對該存儲桶中的對象有寫許可權。
公有讀寫
任何人(包括匿名訪問者)都對該存儲桶中的對象有讀許可權和寫許可權,不推薦使用。
對象(Object):對象存儲的基本單元,可理解為任何格式類型的數據,例如圖片、文檔和音視頻文件等。

每個對象都由對象鍵(Key)、對象值(Data)、和對象元數據(Metadata)組成。

對象鍵(Key):對象鍵是對象在存儲桶中的全局唯一標識(UID),可以理解為文件(名)路徑。
key用於檢索對象,文件對象的 key 與實際存儲路徑無關,伺服器和用戶不需要知道數據的物理地址,通過key就能找到對象。

對象值(Data):即存儲對象內容數據,可以理解為文件內容(Object Content)。
對象元數據(Metadata):是一組鍵值對,可以通俗的理解為文件的屬性,例如文件的修改時間、存儲類型等。(傳統的文件存儲,元數據屬於文件本身,和文件一起封裝存儲。而對象存儲,元數據獨立出來,並不在數據內部封裝。)
對象訪問地址

對象的訪問地址由存儲桶訪問地址和對象鍵組成,其結構形式為<存儲桶域名>/<對象鍵> 。

例如:上傳對象exampleobject.txt到廣州(華南)的存儲桶examplebucket-1250000000中,那麼exampleobject.txt的訪問地址是:examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/exampleobject.txt。其中examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com為存儲桶域名,exampleobject.txt為對象鍵。

目錄和文件夾

對象存儲中本身是沒有文件夾和目錄的概念的,對象存儲不會因為上傳對象project/a.txt而創建一個project文件夾。為了滿足用戶使用習慣,對象存儲在控制台、COS browser 等圖形化工具中模擬了「文件夾」或「目錄」的展示方式,具體實現是通過創建一個鍵值為project/,內容為空的對象,展示方式上模擬了傳統文件夾。

對象操作

用戶通過控制台、工具、API、SDK等多種方式管理對象。

對象存儲架構
對象存儲設備(OSD)
OSD由存儲介質、處理器、內存以及網路系統等組成,負責管理本地的對象,是對象存儲系統的核心。和塊設備相比,它們的差異在於提供的訪問介面。OSD的主要功能是數據存儲和安全訪問。

數據存儲:OSD管理對象數據,並將它們放置在標準的磁碟系統上,OSD不提供塊介面訪問方式,Client請求數據時用對象ID、偏移進行數據讀寫。

智能分布:OSD用其自身的CPU和內存優化數據分布,並支持數據的預取。由於OSD可以智能地支持對象的預取,從而可以優化磁碟的性能。

對象元數據管理:OSD管理存儲的對象元數據與傳統的inode元數據相似,通常包括對象的數據塊和對象的長度。而在傳統的NAS系統中,這些元數據是由文件伺服器維護的,對象存儲架構將系統中主要的元數據管理工作由OSD來完成,降低了Client的開銷。

元數據伺服器(MDS)
MDS控制Client與OSD對象的交互,為客戶端提供元數據,主要是文件的邏輯視圖(文件與目錄的組織關系、每個文件所對應的OSD等)。主要功能如下:

對象存儲訪問:MDS構造和管理描述每個文件分布的邏輯視圖,允許Client直接訪問對象。MDS為Client提供訪問該文件所含對象的能力,OSD在接收到每個請求時將先驗證該能力,然後才可以訪問。

文件和目錄訪問管理:MDS在存儲系統上構建一個文件結構,包括限額控制、目錄和文件的創建和刪除、訪問控制等。

Client Cache一致性:為了提高Client性能,在對象存儲系統設計時通常支持Client方的Cache。由於引入Client方的Cache,帶來了Cache一致性問題,MDS支持基於Client的文件Cache,當Cache的文件發生改變時,將通知Client刷新Cache,從而防止Cache不一致引發的問題。

客戶端(Client)
對象存儲系統提供給用戶的也是標準的POSIX文件訪問介面。介面具有和通用文件系統相同的訪問方式,同時為了提高性能,也具有對數據的Cache功能和文件的條帶功能。同時,文件系統必須維護不同客戶端上Cache的一致性,保證文件系統的數據一致。

文件系統讀訪問流程:

① 客戶端應用發出讀請求;

② 文件系統向元數據伺服器發送請求,獲取要讀取的數據所在的OSD;

③ 直接向每個OSD發送數據讀取請求;

④ OSD得到請求以後,判斷要讀取的Object,並根據此Object要求的認證方式,對客戶端進行認證,如果此客戶端得到授權,則將Object的數據返回給客戶端;

⑤ 文件系統收到OSD返回的數據以後,讀操作完成。

對象存儲的優缺點
(1)優點:

容量大,高擴展性
對象存儲的容量是EB級以上,對象存儲的所有業務、存儲節點採用分布式集群方式工作,各功能節點、集群都可以獨立擴容。從理論上來說,某個對象存儲系統或單個桶(bucket),並沒有總數據容量和對象數量的限制,即服務商就可以不停地往架構里增加資源,這個存儲空間就是無限的,也是支持彈性伸縮的。

高安全性,可靠性
對象存儲採用了分布式架構,對數據進行多設備冗餘存儲(至少三個以上節點),實現異地容災和資源隔離。數據訪問方面,所有的桶和對象都有訪問控制策略,所有連接都支持SSL加密,訪問用戶進行身份許可權鑒定。

高性能,支持海量用戶的並發訪問
(2)缺點:

不支持直接在存儲上修改
對象存儲系統保存的Object不支持修改(追加寫Object需要調用特定的介面,生成的Object也和正常上傳的Object類型上有差別)。用戶哪怕是僅僅需要修改一個位元組也需要重新上傳整個Object。因此,它不適合存儲需要頻繁擦寫的數據。

參考鏈接:

對象存儲,為什麼那麼火? - 知乎 (hu.com)
對象存儲 存儲桶概述 - 開發者指南 - 文檔中心 - 騰訊雲 (tencent.com)
基本概念 (aliyun.com)
文件存儲、塊存儲還是對象存儲? (redhat.com)
linux
駐馬店市民請關注領取補貼!
巨魔-抽手機公告
廣告

對比塊存儲、文件存儲、對象存儲
1242閱讀·0評論·3點贊
2019年2月27日
ShapeFile的文件格式設計
90閱讀·0評論·0點贊
2009年3月20日
應用ceph對象存儲(ceph-13.2.10)
72閱讀·0評論·0點贊
2022年11月26日
三種存儲類型比較-文件、塊、對象存儲
4.8W閱讀·0評論·13點贊
2016年7月26日
常見圖片存儲格式文件簡介
4534閱讀·0評論·0點贊
2020年5月4日
s3cmd常用命令
781閱讀·0評論·0點贊
2022年11月17日
駐馬店發布,你有一台5G手機待領取

00:23
巨摩互動
廣告
常見的存儲格式
1083閱讀·0評論·0點贊
2022年2月15日
文件、對象、塊區別
1399閱讀·0評論·0點贊
2020年7月13日
對象存儲、文件存儲、塊存儲的區別和聯系
7330閱讀·2評論·5點贊
2021年10月16日
數據分析中常見的存儲方式
1537閱讀·0評論·0點贊
2021年11月16日
三種存儲類型:塊存儲、文件存儲、對象存儲
1.5W閱讀·3評論·55點贊
2020年11月2日
如何設計二進制文件格式
1940閱讀·0評論·1點贊
2020年3月6日
BMP文件存儲格式
472閱讀·0評論·2點贊
2021年8月2日
hive 的存儲格式
1765閱讀·0評論·1點贊
2022年6月18日
數據存儲格式
446閱讀·0評論·0點贊
2022年12月21日
總結:對象存儲、塊存儲、文件存儲的區別
6606閱讀·0評論·3點贊
2022年4月9日
c語言中文件rw,什麼是「塊文件」?
386閱讀·0評論·0點贊
2021年5月23日
【存儲】塊存儲、文件存儲和對象存儲的區別?
350閱讀·0評論·0點贊
2022年7月22日
塊存儲、文件存儲與對象存儲的區別與應用場景
1846閱讀·1評論·0點贊
2022年6月5日
數據在內存中的存儲方式
272閱讀·0評論·0點贊
2022年8月21日
去首頁
看看更多熱門內容

⑺ 關於ceph rgw storage_class 的使用研究(amazon S3 智能分層 )

為什麼要研究這個?
因為rgw 沒找到橫向擴容的比較好的辦法。有些人是在rgw 上層再加一個接入層,在上面加數據記錄。比如一個「虛擬大bucket」,對應了下面多個集群的多個 bucket 。
無論哪一種辦法,都要增加額外的元數據管理系統。
看到amazon 的這個 storage class 被ceph rgw (Nautilus)支持後
我打算研究一下利用這個新功能做到幾件事
1 橫向 在bucket 下擴pool
2 通過 bucket 下同時支持多個 pool,提高讀寫吞吐。
3 利用 生命周期。前置ssd pool 。達到時間後把對象遷移到後面的廉價 COLD pool 比如 大容量sata 。

ceph 官網文檔 地址 https://docs.ceph.com/docs/master/radosgw/placement/

這個功能 amazon s3 在 2018年推出

發布於: Nov 26, 2018

S3 智能分層是一種新的 Amazon S3 存儲類,專為希望在數據訪問模式發生變化時自動優化存儲成本而不會影響性能或運營開銷的客戶而設計。S3 智能分層是第一個雲對象存儲類,通過在訪問模式發生變化時在兩個訪問層(頻繁訪問層和不頻繁訪問層)之間移動數據來實現自動節省成本,非常適用於訪問模式未知或不斷變化的數據。

ceph 官方在rgw Nautilus 版本中引入

首先說說 palcement 和 storage class 的區別

placement 是指 bucket 的放置屬性 ,storage class 是bucket 內每個對象的放置屬性。

placement 下面默認有個標准層 STANDARD 他對應的pool 默認default.rgw.buckets.data (這個pool 可修改為你想存放的 pool,)
"STANDARD": {
"data_pool": 「default.rgw.buckets.data」

每個 placemetn 都有個 STANDARD
你可以 添加自定義分層 比如 COLD 不只限於一個。可以多個。

上圖是我測試的placement 加的2個class。 可以分別對應不同的pool 。
pool 可以根據你的需要新建在不同的設備上 比如 ssd sas sata
根據我們以前的測試結果

bucket ==> placement storage class ==>pool
創建bucket 通過指定 placement 制定了 放置池組
PUT 對象時候 可以制定 storage_class 指定具體的pool

下面說說具體做法 ,我就在默認 的 default-placement操作測試

根據官網命令 To add a new storage class named COLD to the default-placement target, start by adding it to the zonegroup

先在 zonegroup 加入 tag
1)
$ radosgw-admin zonegroup placement add
--rgw-zonegroup default
--placement-id default-placement
--storage-class COLD
2)zone 中加入 具體 pool 官網例子加上了壓縮。這個可以根據需要配置是否加上
radosgw-admin zone placement add
--rgw-zone default
--placement-id default-placement
--storage-class COLD
--data-pool default.rgw.cold.data
--compression lz4

結果如下

placement_pools": [
{
"key": "default-placement」,
"val": {
"index_pool": 「default.rgw.buckets.index」,
"storage_classes": {

我們用 s3cmd 測試上傳
對我的 測試placement 做put 文件測試 (這里我用自定義 的placemet 做測試

指定 -storage-class=TEMPCOLD

s3cmd put cirros-0.3.5-x86_64-disk.img s3://bucket2/clodtest1 --storage-class=TEMPCOLD
upload: 'cirros-0.3.5-x86_64-disk.img' -> ' s3://bucket2/clodtest1' [1 of 1]

s3cmd info s3://bucket2/clodtest1
s3://bucket2/clodtest1 (object):
File size: 13267968
Last mod: Sun, 29 Mar 2020 07:03:34 GMT
MIME type: application/octet-stream
Storage: TEMPCOLD
MD5 sum:

如果不加參數

s3cmd put cirros-0.3.5-x86_64-disk.img s3://bucket2/clodtest3
upload: 'cirros-0.3.5-x86_64-disk.img' -> ' s3://bucket2/clodtest3' [1 of 1]
13267968 of 13267968 100% in 0s 27.25 MB/s done

數據會落在 STANDARD

s3://bucket2/clodtest3 (object):
File size: 13267968
Last mod: Sun, 29 Mar 2020 07:06:24 GMT
MIME type: application/octet-stream
Storage: STANDARD

經過測試 讀數據不需要知道對象屬於哪一個 Storage


=====
官方說明
所有放置目標都有一個STANDARD存儲類,默認情況下該存儲類適用於新對象。用戶可以使用覆蓋此默認設置 default_storage_class。

要在非默認存儲類中創建對象,請在請求的HTTP標頭中提供該存儲類名稱。S3協議使用 X-Amz-Storage-Class標頭,而Swift協議使用 X-Object-Storage-Class標頭。

結論:
1
如果需要 提高性能。可以同時在一個placement 下加入多個 Storage 對應多個 pool。 客戶端寫數據的時候可以均衡指定 storage-class
具體可以參考s3 api .
或者可以在nginx 接入層做 靈活的指定 X-Amz-Storage-Class (對多個 storage-class 做自定義輪詢或者打開關閉)
2
如果需要在pool 將近滿了。可以新增一個 storage-class。 客戶端讀寫 指定到新的 storage-class。
3
如果需要用ssd 加速。可以 用ssd pool 作為STANDARD
用 廉價 sata 作為 COLD 進行遷移。 具體要研究 Lifecycle 的設置

我這里就沒時間做測試了。

目前我測試的 ceph 是 14.2.5. 不是最新。 感覺這個功能還有寫莫名其妙的情況。
建議各位有需要的可以做大規模的測試。

⑻ Ceph 架構與原理

Ceph 是一個開源項目,它提供軟體定義的、統一的存儲解決方案 。Ceph 是一個具有高性能、高度可伸縮性、可大規模擴展並且無單點故障的分布式存儲系統 。
Ceph 是軟體定義存儲解決方案
Ceph 是統一存儲解決方案
Ceph 是雲存儲解決方案

高可用性

高擴展性

特性豐富

Ceph獨一無二地統一的系統提供了對象存儲、塊存儲和文件存儲功能。Ceph存儲集群由幾個不同的軟體守護進程組成(比較重要的兩個是MON和OSD),每個守護進程負責Ceph的一個獨特功能並將值添加到相應的組件中。

RADOS是CEPH存儲系統的核心,也稱為Ceph 存儲集群。Ceph的數據訪問方法(如RBD,CephFS,RADOSGW,librados)的所有操作都是在RADOS層之上構建的。當Ceph 集群接收到來自客戶端的請求時,CRUSH演算法首先計算出存儲位置,最後將這些對象存儲在OSD中,當配置的復制數大於1時,RADOS負責的形式將數據分發到集群內的所有節點,最後將這些對象存儲在OSD中。當配置的復制數大於1時,RADOS負責數據的可靠性,它復制對象,創建副本並將它們存儲在不同的故障區域中。
RADOS包含兩個核心組件: OSD和MON

OSD 是Ceph 存儲集群中最重要的一個基礎組件,他負責將實際的數據以對象的形式存儲在每一個集群節點的物理磁碟中。對於任何讀寫操作,客戶端首先向MON請求集群MAP,然後客戶端舊可以直接和OSD進行I/O操作。
一個Ceph 集群包含多個OSD。一個典型的Ceph集群方案會為集群節點上的每個物理磁碟創建一個ODS守護進程,這個是推薦的做法。OSD上的每個對象都有一個主副本和幾個輔副本,輔副本分散在其他OSD。一個OSD對於一些對象是主副本,同時對於其他對象可能是輔副本,存放輔副本的OSD主副本OSD控制,如果主副本OSD異常(或者對應的磁碟故障),輔副本OSD可以成為主副本OSD。
OSD是有一個已經存在的Linux文件系統的物理磁碟驅動器和OSD服務組成。Ceph 推薦OSD使用的文件系統是XFS。OSD的所有寫都是先存到日誌,再到存儲.

MON 負責監控整個集群的健康狀況。它以守護進程的形式存在,一個MON為每一個組件維護一個獨立的MAP,如OSD,MON,PG,CRUSH 和MDS map。這些map 統稱為集群的MAP。MON 不為客戶端存儲和提供數據,它為客戶端以及集群內其他節點提供更新集群MAP的服務。客戶端和集群內其他節點定期與MON確認自己持有的是否是集群最新的MAP.一個Ceph集群通常包含多個MON節點,但是同一時間只有一個MON。

librados是一個本地的C語言庫,通過它應用程序可以直接和RADOS通信,提高性能

Ceph 塊存儲,簡稱 RBD,是基於 librados 之上的塊存儲服務介面。RBD 的驅動程序已經被集成到 Linux 內核(2.6.39 或更高版本)中,也已經被 QEMU/KVM Hypervisor 支持,它們都能夠無縫地訪問 Ceph 塊設備。Linux 內核 RBD(KRBD)通過 librados 映射 Ceph 塊設備,然後 RADOS 將 Ceph 塊設備的數據對象以分布式的方式存儲在集群節點中

RGW,Ceph對象網關,也稱做RADOS網關,它是一個代理,可以將HTTP請求轉換為RADOS,也可以把RADOS轉換為HTTP請求,從而提供restful介面,兼容S3和Swift。Ceph對象網關使用Ceph對象網關守護進程(RGW)與librgw、librados交互。Ceph對象網關支持三類介面:S3、Swift、管理API(通過restful介面管理Ceph集群)。RGW有自己的用戶管理體系

Ceph 元數據伺服器服務進程,簡稱 MDS。只有在啟用了 Ceph 文件存儲(CephFS)的集群中才需要啟用 MDS,它負責跟蹤文件層次結構,存儲和管理 CephFS 的元數據。MDS 的元數據也是以 Obejct 的形式存儲在 OSD 上。除此之外,MDS 提供了一個帶智能緩存層的共享型連續文件系統,可以大大減少 OSD 讀寫操作頻率。

CephFS在RADOS層之上提供了一個兼容POSIX的文件系統。它使用MDS作為守護進程,負責管理其元數據並將它和其他數據分開。CephFS使用cephfuse模塊(FUSE)擴展其在用戶空間文件系統方面的支持(就是將CephFS掛載到客戶端機器上)。它還允許直接與應用程序交互,使用libcephfs庫直接訪問RADOS集群。

Ceph管理器軟體,可以收集整個集群的所有狀態。有儀錶板插件

一個對象通常包含綁定在一起的數據和元數據,並且用一個全局唯一的標識符標識。這個唯一的標識符確保在整個存儲集群中沒有其他對象使用相同的對象ID,保證對象唯一性。基於文件的存儲中,文件大小是有限制的,與此不同的是,對象的大小是可以隨著大小可變的元數據而變得很大。對象不使用一個目錄層次結構或樹結構來存儲,相反,它存儲在一個包含數十億對象且沒有任何復雜性的線性地址空間中。對象可以存儲在本地,也可以存放在地理上分開的線性地址空間中,也就是說,在一個連續的存儲空間中。任何應用程序都可以基於對象ID通過調用restful API從對象中獲取數據。這個URL可以以同樣的方式工作在網際網路上,一個對象ID作為一個唯一的指針指向對象。這些對象都以復制的方式存儲在OSD中,因為能提供高可用性。

對於Ceph集群的一次讀寫操作,客戶端首先聯系MON獲取一個集群map副本,然後使用對象和池名/ID將數據轉換為對象。接著將對象和PG數一起經過散列來生成其在Ceph池中最終存放的那一個PG。然後前面計算好的PG經過CRUSH查找來確定存儲或獲取數據所需的主OSD的位置。得到准確的OSD ID之後,客戶端直接聯系這個OSD來存取數據。所有這些計算操作都由客戶端來執行,因此它不會影響Ceph集群的性能。一旦數據被寫入主OSD,主OSD所在節點將執行CRUSH查找輔助PG和OSD的位置來實現數據復制,進而實現高可用。
  簡單地說,首先基於池ID將對象名和集群PG數應用散列函數得到一個PG ID,然後,針對這個PG ID執行CRUSH查找得到主OSD和輔助OSD,最後寫入數據。

PG是一組對象地邏輯集合,通過復制它到不同的OSD上來提供存儲系統的可靠性。根據Ceph池的復制級別,每個PG的數據會被復制並分發到Ceph集群的多個OSD上。可以將PG看成一個邏輯容器,這個容器包含多個對象,同時這個邏輯容器被映射到多個OSD。
  計算正確的PG數對一個Ceph存儲集群來說是至關重要的一步。PG數計算公式如下

Ceph池是一個用來存儲對象的邏輯分區,每個池都包含一定數量的PG,進而實現把一定數量的對象映射到集群內部不同OSD上的目的。每一個池都是交叉分布在集群所有節點上的,這樣就能提供足夠的彈性。池可以通過創建需要的副本數來保障數據的高可用性。
  Ceph的池還支持快照功能,我們可以使用ceph osd pool mksnap命令來給特定的池製作快照。此外,Ceph池還允許我們為對象設置所有者和訪問許可權。

數據管理始於客戶端向Ceph池中寫數據。一旦客戶端准備寫數據到Ceph池中,數據首先寫入基於池副本數的主OSD中。主OSD再復制相同的數據到每個輔助OSD中,並等待它們確認寫入完成。只要輔助OSD完成數據寫入,就會發送一個應答信號給主OSD。最後主OSD再返回一個應答信號給客戶端,以確認完成整個寫入操作。