自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Ceph的文件系統(tǒng)架構及使用實戰(zhàn)

存儲 存儲架構
CDentry是一個粘合層,它建立了inode與文件名或者目錄名之間的關系。一個CDentry可以鏈接到最多一個CInode。但是一個CInode可以被多個CDentry鏈接。這是因為鏈接的存在,同一個文件的多個鏈接必然名稱是不同的,因此需要多個CDentry數(shù)據(jù)結構。

Ceph提供了塊、對象和文件等多種存儲形式,實現(xiàn)了統(tǒng)一存儲。前文說過,Ceph的對象存儲基于RADOS集群。Ceph的文件系統(tǒng)也是基于RADOS集群的,也就是說Cephfs對用戶側呈現(xiàn)的是文件系統(tǒng),而在其內(nèi)部則是基于對象來存儲的。

CephFS是分布式文件系統(tǒng),這個分布式從兩個方面理解,一個方面是底層存儲數(shù)據(jù)依賴的是RADOS集群;另外一個方面是其架構是CS(客戶端-服務端)架構,文件系統(tǒng)的使用是在客戶端,客戶端與服務端通過網(wǎng)絡通信進行數(shù)據(jù)交互,類似NFS。

圖片圖片

如圖所示客戶端通過網(wǎng)絡的方式連接到Ceph集群,Ceph集群的文件系統(tǒng)映射到客戶端,呈現(xiàn)為一個本地的目錄樹。從用戶的角度來看,這個映射是透明的。

當然,對于CephFS集群來說,數(shù)據(jù)并非以目錄樹的形式存儲的。在CephFS中,數(shù)據(jù)是以對象的形式存儲的,文件的訪問最終也會轉換為(RADOS)對象的訪問。

CephFS集群的安裝與使用

CephFS的安裝總體比較簡單,我們假設現(xiàn)在已經(jīng)有一個Ceph集群了?;谝延械腃eph集群,通過兩個主要步驟就可以提供文件系統(tǒng)服務,一個是啟動MDS服務,該服務是文件系統(tǒng)的元數(shù)據(jù)管理服務;另外一個是創(chuàng)建存儲數(shù)據(jù)的存儲池資源。

對于CephFS,需要創(chuàng)建2個存儲池來存儲數(shù)據(jù),一個存儲池用于存儲元數(shù)據(jù),另外一個存儲池用于存儲數(shù)據(jù)。創(chuàng)建存儲池的步驟如下:

ceph osd pool create fs_data 256
 ceph osd pool create fs_metadata 256
 ceph fs new cephfs fs_metadata fs_data

就這么簡單,然后就可以使用該文件系統(tǒng)了。以內(nèi)核態(tài)文件系統(tǒng)為例,其掛載方法與其它文件系統(tǒng)很類似。

mount -t ceph 192.168.1.100:6789:/ /mnt/cephfs -o -o name=admin,secret=AQDNnfBcuLkBERAAeNj60b+tlY/t31NSScIRhg==

如果一切正常,那么在客戶端就可以使用該分布式文件中的數(shù)據(jù)了。

CephFS客戶端架構

CephFS的客戶端有多種實現(xiàn)方式,一種是在Linux內(nèi)核中客戶端實現(xiàn),還有一種是基于fuse(參考用戶態(tài)文件系統(tǒng)框架FUSE的介紹及示例)的實現(xiàn)。雖然是兩種不同的實現(xiàn)方式,但是沒有本質的區(qū)別。

客戶端對集群的訪問分為兩個主要的流程,一個是通過MDS訪問集群文件系統(tǒng)的元數(shù)據(jù),另一個流程是客戶端對數(shù)據(jù)的訪問(讀寫),這個是客戶端直接與RADOS集群的交互。

圖片圖片

了解了關于CephFS整體的架構和訪問流程,接下來我們介紹一下我們介紹一下客戶端的整體架構及關鍵流程。由于基于FUSE的實現(xiàn)封裝了很多細節(jié),整體邏輯還是比較簡單的,因此我們暫時不介紹該實現(xiàn)。我們先介紹一下基于內(nèi)核的CephFS客戶端的實現(xiàn)。

CephFS是基于VFS實現(xiàn)的,因此其整體架構與其它Linux文件系統(tǒng)非常像。如圖所示,CephFS的位置與Ext4和NFS的關系如圖所示。

圖片圖片

CephFS的差異點在于CephFS是基于網(wǎng)絡將數(shù)據(jù)存儲在RADOS集群,而不像Ext4一樣將數(shù)據(jù)存儲在磁盤上。

圖片圖片

如果按照CephFS的邏輯架構來劃分,CephFS可以分為如圖所示的幾層。其中最上面是接口層,這一層是注冊到VFS的函數(shù)指針。用戶態(tài)的讀寫函數(shù)最終會調用到該層的對應函數(shù)API。而該層的函數(shù)會優(yōu)先(根據(jù)配置情況而定)與緩存交換。

圖片圖片

頁緩存是所有文件系統(tǒng)公用的,并非CephFS獨享。我們暫且將頁緩存歸為CephFS客戶端的一層。以寫數(shù)據(jù)為例,請求可能將數(shù)據(jù)寫入緩存后就返回了。而緩存數(shù)據(jù)的刷寫并非實時同步的,而是根據(jù)適當?shù)臅r機通過數(shù)據(jù)讀寫層的接口將數(shù)據(jù)發(fā)送出去。

然后是數(shù)據(jù)讀寫層,數(shù)據(jù)讀寫層實現(xiàn)的是對請求數(shù)據(jù)與后端交互的邏輯。對于傳統(tǒng)文件系統(tǒng)來說是對磁盤的讀寫,對于CephFS來說是通過網(wǎng)絡對集群的讀寫。

消息層位于最下面,消息層主要完成網(wǎng)絡數(shù)據(jù)收發(fā)的功能。該模塊在Linux內(nèi)核的網(wǎng)絡模塊中,不僅僅CephFS使用該模塊,塊存儲RBD也使用該模塊網(wǎng)絡收發(fā)的功能。

CephFS集群架構

傳統(tǒng)文件系統(tǒng)是通過磁盤數(shù)據(jù)塊來組織文件系統(tǒng)的,數(shù)據(jù)分為元數(shù)據(jù)和數(shù)據(jù)兩種類型。其中元數(shù)據(jù)是管理數(shù)據(jù)的數(shù)據(jù),比如某個文件數(shù)據(jù)的位置信息或者文件的大小和創(chuàng)建時間等。而數(shù)據(jù)則是指文件的實際數(shù)據(jù),或者目錄中的文件或者子目錄信息。

CephFS有些差異,因為其底層是RADOS對象集群,其提供的是一個對象的集合。前面我們創(chuàng)建文件系統(tǒng)的時候也看到了,其實是創(chuàng)建了兩個對象存儲池。因此,CephFS的數(shù)據(jù)和元數(shù)據(jù)其實都是以對象的形式存在的。我們看一下上面實例中創(chuàng)建的文件系統(tǒng),其實已經(jīng)有很多對象了(1.0000000為根目錄的元數(shù)據(jù)對象)。

圖片圖片

在客戶端的文件系統(tǒng)有一個樹型的結構,CephFS組織數(shù)據(jù)的邏輯形式也是樹型結構。為了容納數(shù)據(jù),每個文件系統(tǒng)必然需要一個根目錄,CephFS也是有一個根目錄的,這個根目錄在前面創(chuàng)建文件系統(tǒng)的時候創(chuàng)建。根目錄的inode ID是1,這個在前面提示過。

文件存儲在目錄當中,在CephFS中是以元數(shù)據(jù)的方式存儲的。在CephFS中,目錄中的文件是以omap的形式存儲的。也就是每個目錄會以其inode ID作為名稱在元數(shù)據(jù)存儲池創(chuàng)建一個對象,而目錄中的文件(子目錄)等數(shù)據(jù)則是以該對象omap的形式存在的,而非對象數(shù)據(jù)的形式。

圖片圖片

例如,我們在前面創(chuàng)建的文件系統(tǒng)中的根目錄創(chuàng)建5個空文件,分別是testa、testb、testc ...等,此時我們可以在根目錄的對象中獲取omap的所有Key信息。

圖片圖片

這里面的omap是以KV的形式存在的,其中Value對應的為inode信息,如下是testa對應的inode信息,這些信息包括該文件關鍵的元數(shù)據(jù)信息,例如inode ID和創(chuàng)建時間等等。

圖片圖片

在Ceph文件系統(tǒng)中,文件的元數(shù)據(jù)存儲在MDS集群中,而數(shù)據(jù)則是直接與OSD集群交互。以默認配置為了,文件被拆分為4MB大小的對象存儲。由于原則確定,當客戶端通過MDS創(chuàng)建文件后,客戶端可以直接根據(jù)請求在文件中邏輯位置確定數(shù)據(jù)所對應的對象名稱。

文件數(shù)據(jù)對應的對象名稱為文件的inode ID與邏輯偏移的的組合,這樣可以根據(jù)該對象名稱實現(xiàn)數(shù)據(jù)的讀寫。

圖片圖片

以testa為例,我們在其中寫入16MB的數(shù)據(jù),此時可以產(chǎn)生4個對象。通過stat查看testa的inode ID為1099511627776(0x10000000000)。查看一下數(shù)據(jù)存儲池中對象列表如下:

圖片圖片

可以看到與該文件相關的對象列表,其前半部分為inode ID,后半部分是文件以4MB為單位的邏輯偏移。

在具體實現(xiàn)層面,Ceph通過如下幾個數(shù)據(jù)結構來表示文件系統(tǒng)中的文件和目錄等信息。這些數(shù)據(jù)結構的關系如圖所示。

圖片圖片

可以看到這里主要有三個數(shù)據(jù)結構來維護文件的目錄樹關系,分別是CInode、CDentry和CDir。下面我們介紹一下這些數(shù)據(jù)結構的作用。

CInode數(shù)據(jù)結構

CInode包含了文件的元數(shù)據(jù),這個跟Linux內(nèi)核的inode類似,每個文件都有一個CInode數(shù)據(jù)結構對應。該數(shù)據(jù)結構包含文件大小和擁有者等信息。

CDentry數(shù)據(jù)結構

CDentry是一個粘合層,它建立了inode與文件名或者目錄名之間的關系。一個CDentry可以鏈接到最多一個CInode。但是一個CInode可以被多個CDentry鏈接。這是因為鏈接的存在,同一個文件的多個鏈接必然名稱是不同的,因此需要多個CDentry數(shù)據(jù)結構。

CDir數(shù)據(jù)結構

CDir用于目錄屬性的inode,它用來在目錄下建立與CDentry的鏈接。如果某個目錄有分支,那么一個CInode是可以有多個CDir的。

上述類的關系如圖所示,其中CDir中存在著一個與CDentry的一對多的關系,表示目錄中的文件或者子目錄關系。CInode與CDentry則是文件的元數(shù)據(jù)信息與文件名稱的對應關系。

圖片圖片

上述數(shù)據(jù)結構是內(nèi)存中的數(shù)據(jù)結構,除了需要持久化到對象的數(shù)據(jù)結構,這部分內(nèi)容本文暫時不做介紹。

今天我們大致的介紹了一下CephFS的整體架構,使用和集群端的架構。

責任編輯:武曉燕 來源: 數(shù)據(jù)存儲張
相關推薦

2020-01-03 08:33:57

Ceph硬件系統(tǒng)

2020-10-29 08:34:48

Linux - tmp

2014-12-22 11:30:54

DockerAUFS云計算

2018-05-02 08:35:33

LinuxTripwire文件系統(tǒng)

2010-03-05 17:43:00

Linux XFS文件

2010-03-05 17:20:23

Linux XFS文件

2014-04-02 09:39:15

Ceph分布式文件系統(tǒng)

2020-07-22 14:53:06

Linux系統(tǒng)虛擬文件

2009-12-17 14:49:47

Linux文件系統(tǒng)

2012-10-11 14:03:56

FastDFS分布式文件系統(tǒng)

2013-05-27 14:46:06

文件系統(tǒng)分布式文件系統(tǒng)

2010-04-30 15:51:48

Unix系統(tǒng)

2015-05-29 12:47:53

Ceph云存儲開源

2010-03-16 14:42:16

linux環(huán)境

2009-12-14 13:33:31

linuxramdisk文件系統(tǒng)

2012-05-10 14:04:07

分布式文件系統(tǒng)架構

2011-01-13 14:10:30

Linux文件系統(tǒng)

2009-11-26 11:31:34

NFS網(wǎng)絡文件系統(tǒng)設定

2012-09-19 13:48:33

pNFS文件系統(tǒng)

2009-11-06 10:05:18

Linux系統(tǒng)環(huán)境GFS
點贊
收藏

51CTO技術棧公眾號