ceph學習筆記

2021-09-10 03:53:09 字數 3622 閱讀 9330

ceph學習:

ceph 儲存集群:

配置與部署:

準備硬碟:

作業系統和 ceph osd 守護程序資料分別放到不同的硬碟。如果必須把資料和系統放在同一硬碟裡,最好給資料分配乙個單獨的分割槽!

檔案系統:

osd 守護程序有賴於底層檔案系統的擴充套件屬性( xattr )儲存各種內部物件狀態和元資料。底層檔案系統必須能為 xattr 提供足夠容量, btrfs 沒有限制隨檔案的 xattr 元資料總量; xfs 的限制相對大( 64kb ),多數部署都不會有瓶頸; ext4 的則太小而不可用。

使用 ext4 檔案系統時,一定要把下面的配置放於 ceph.conf 配置檔案的 [osd] 段下;用 btrfs 和 xfs 時可以選填。

filestore xattr use omap = true

配置檔案:

ceph 配置檔案使用 ini 風格的語法,以分號 (;) 和井號 (#) 開始的行是注釋

確定 pg_num 取值是強制性的,因為不能自動計算。下面是幾個常用的值:

少於 5 個 osd 時可把 pg_num 設定為 128

osd 數量在 5 到 10 個時,可把 pg_num 設定為 512

osd 數量在 10 到 50 個時,可把 pg_num 設定為 4096

osd 數量大於 50 時,你得理解權衡方法、以及如何自己計算 pg_num 取值

為 s3 訪問建立 radosgw 使用者

sudo radosgw-admin user create --uid="testuser" --display-name="first user"

儲存池在建中

建立儲存池時,它會建立指定數量的歸置組。 ceph 在建立一或多個歸置組時會顯示 creating ;建立完後,在其歸置組的 acting set 裡的 osd 將建立互聯;

一旦互聯完成,歸置組狀態應該變為 active+clean ,意思是 ceph 客戶端可以向歸置組寫入資料了

執行時¶

如果你想檢視一程序的執行時配置,必須先登入對應主機,然後執行命令:

ceph daemon config show | less

例如:ceph daemon osd.0 config show | less

集群執行圖¶:

ceph 依賴於 ceph 客戶端和 osd ,因為它們知道集群的拓撲,這個拓撲由 5 張圖共同描述,統稱為「集群執行圖」:

montior map: 包含集群的 fsid 、位置、名字、位址和埠,也包括當前版本、建立時間、最近修改時間。要檢視監視器圖,用 ceph mon dump 命令。

osd map: 包含集群 fsid 、建立時間、最近修改時間、儲存池列表、副本數量、歸置組數量、 osd 列表及其狀態(如 up 、 in )。要檢視osd執行圖,用 ceph osd dump 命令。

pg map::** 包含歸置組版本、其時間戳、最新的 osd 執行圖版本、佔滿率、以及各歸置組詳情,像歸置組 id 、 up set 、 acting set 、 pg 狀態(如 active+clean ),和各儲存池的資料使用情況統計。

crush map::** 包含儲存裝置列表、故障域樹狀結構(如裝置、主機、機架、行、房間、等等)、和儲存資料時如何利用此樹狀結構的規則。要檢視 crush 規則,執行 ceph osd getcrushmap -o 命令;然後用 crushtool -d -o 反編譯;然後就可以用 cat 或編輯器檢視了。

mds map: 包含當前 mds 圖的版本、建立時間、最近修改時間,還包含了儲存元資料的儲存池、元資料伺服器列表、還有哪些元資料伺服器是 up 且 in 的。要檢視 mds 圖,執行 ceph mds dump 。

cephx 用共享金鑰來認證,即客戶端和監視器集群各自都有客戶端金鑰的副本。這樣的認證協議使參與雙方不用展現金鑰就能相互認證,就是說集群確信使用者擁有金鑰、而且使用者相信集群有金鑰的副本。

呼叫 ceph auth get-or-create-key 來生成乙個使用者及其金鑰

儲存池至少可設定以下引數:

物件的所有權/訪問許可權;

歸置組數量;以及,

使用的 crush 規則集。

radosgw充分利用了librados底層的4類api完成資料儲存的目的,實際上radosgw用的是c++ api,但是這裡使用c api便於說明問題

rados_read/rados_write 這組api主要用來儲存物件的實際內容,他會根據使用者物件的名稱生產oid,然後對映到多個osd上,然後寫入實際資料, 比較簡單, 對應於rados命令列的

rados put/get

rados_write_op_omap_set/rados_read_op_omap_get_vals 這組api主要用來儲存bucket的元資料。 每個ceph osd在初始化的時候會生產乙個嵌入式的資料庫. (filestore對應leveldb,bluestore對應rocksdb。用這組api 可以給object設定key-value值。這個api在radosgw裡面主要儲存重要的bucket下有哪些檔案。比如s3裡面有乙個bucket叫document,裡面有3個檔案,名字分別是 :ab

c那麼對應的在.rgw.index的pool裡面會有乙個叫document.***x,這裡面的***x是bucket的instance id,他的omap對應的就是

key  value

a  value

b  value

c  value

在ceph的j版本之前的,bucket下的檔案列表都是由乙個object對應的omap記錄的。在後續的版本中加入bucket sharding的功能,讓檔案列表可以由 多個嵌入式kv儲存。

rados_getxattrs/rados_setxattrs 這個api主要儲存每個物件的元資料,包括每個分片的資訊,acl,contenttype這些資訊都用這組api儲存和讀取。 它們對應的就是filestore的xfs使用的xattrs,或者bluestore的rocksdb裡面的kv對。

radosgw使用這個api做原子的操作,或者記錄日誌

對於大檔案,相比與radosgw每次使用512k的buf,用rados_write的api寫入ceph集群,yig使用動態的buf,根據使用者上傳的速度的大小調整buf在(512k~1m)之間。 並且使用rados striping的api提高寫入的併發程度。讓更多的osd參與到大檔案的寫入,提高併發程度。 拆分方法如圖:

問題:bucket sharding

filestore對應leveldb,bluestore對應rocksdb。

為什麼radosgw儲存小檔案會有效能問題?

從上面的rados儲存原理可以看到,要在乙個s3相容的系統裡儲存資料,它需要儲存

資料本身

元資料(acl,contentype,分片資訊)

修改bucket的元資料(bucket下面多了乙個key) 所以可以看出,儘管使用者只上傳了乙個幾百位元組的檔案,甚至還沒有乙個sector大。但是ceph的多個osd都要發生寫操作。如果這是乙個大檔案,比如 4m,這些overhead就完全可以忽略。檔案越小,數量越大,硬碟的隨機讀寫越多。

這種情況在filestore的情況尤其糟糕,filestore所有的寫入都先寫入自己的jouranl,然後在fflush到檔案系統。這種情況在bluestore會好一些, 因為s3的寫入都是新檔案,沒有覆蓋或者更新的情況,所有不用寫journal,資料直接下盤

Ceph學習(1) Ceph簡介

隨著大資料時代的到來,對儲存設施的效能以及安全等要求也越來越高。軟體體系架構也從曾經的saas 軟體即服務 到paas 平台即服務 再到iaas 基礎設施即服務 的發展。ceph就是這麼乙個iaas的雲儲存服務的乙個開源解決方案。它是統一儲存系統。接下來介紹一下儲存 海量資料儲存 網路儲存技術 ne...

Ceph學習之路(一)之ceph初識

在學習ceph之前,需要了解元資料的概念。元資料又稱為中介資料 中繼資料,為描述資料的資料。主要描述資料屬性的資訊,用來支援如指示儲存位置 歷史資料 資源查詢 檔案記錄等功能。通俗地說,就 是用於描述乙個檔案的特徵的系統資料,比如訪問許可權 檔案擁有者以及檔案資料庫的分布資訊 inode 等等。在集...

ceph學習之路 修改Ceph集群IP監聽位址

環境centos 6.7 ceph 版本 0.94.10 主機名原ip 新ipnode214 155.8.3.214 155.8.15.214 node215 155.8.3.215 155.8.15.215 node216 155.8.3.216 155.8.15.216 修改方法 1.匯出mon...