管理ceph快取池

2022-06-25 23:51:18 字數 3814 閱讀 1832

目錄配置快取池

刪除快取池

ceph的快取分層特性是在ceph的f版當中正式發布的。所謂的快取分層其實就是在更快的磁碟(通常是ssd)上建立乙個儲存池。然後將這個儲存池放置在常規的複製池或者糾刪碼池的前端充當快取。這樣所有的客戶端i/o操作都首先由快取池處理,之後再將資料寫回到現有的資料儲存池中,使得客戶端能夠在快取池上享受更好的效能,而最終資料還是寫回到常規池中。

一般來說,快取池會被構建在更昂貴的或者說速度更快的ssd盤上,這樣才能提供更好的i/o效能。而快取池後端的儲存池則由普通的hdd盤組成。在這種型別的設定中,客戶端將i/o請求提交至快取池,不管是讀還是寫操作,它的請求都能立即獲得響應。速度更快的快取層為客戶端請求提供響應。一段時間後,快取層將所有資料再寫回後端的儲存存,以便它可以快取來自客戶端的新請求。在快取層和資料層之間的資料遷移都是自動觸發且對客戶端透明的。

快取池能以以下兩種模式進行配置:

read-only模式:當快取池配置為read-only模式時,它只適用於處理客戶端的讀操作。客戶端的寫操作不涉及快取分層,所有的客戶端寫都在儲存層上完成。在處理來自客戶端的讀操作時,快取分層**將請求的資料從儲存層複製到快取層。快取池基於我們為其配置的策略,將不活躍的物件從快取池中刪除。這種方法非常適合多個客戶端需要讀取大量類似資料的場景。

假設我們已經有了乙個基於ssd的crush_rule,我們建立乙個儲存池,使用該crush rule即可。關於如何建立乙個基於ssd的crush_rule,可直接參考《crushmap磁碟智慧型分組》。

下面是建立乙個基於ssd的儲存池的示例:

# 假設ssd_rule即基於ssd的cursh_rule

ceph osd create pool cache 64 64 ssd_rule

# 將上面建立的cache池繫結至儲存池的前端,cephfs_data即為我們的後端儲存池

ceph osd tier add cephfs_data cache

# 設定快取模式為writeback

ceph osd tier cache-mode cache writeback

# 將所有客戶端請求從標準池引導至快取池

ceph osd tier set-overlay cephfs_data cache

root@ceph:~# ceph osd dump |egrep 'cephfs_data|cache'

pool 4 'cache' replicated size 3 min_size 1 crush_rule 1 object_hash rjenkins pg_num 64 pgp_num 64 last_change 3100 lfor 3079/3079 flags hashpspool,incomplete_clones tier_of 2 cache_mode writeback target_bytes 1099511627776 hit_set bloom 0s x0 decay_rate 0 search_last_n 0 stripe_width 0

對於生產環境的部署,目前只能使用bloom filters資料結構(看官方文件的意思,好像目前只支援這一種filter):

ceph osd pool set cache hit_set_type bloom
設定當快取池中的資料達到多少個位元組或者多少個物件時,快取分層**就開始從快取池重新整理物件至後端儲存池並驅逐:

# 當快取池中的資料量達到1tb時開始刷盤並驅逐

ceph osd pool set cache target_max_bytes 1099511627776

# 當快取池中的物件個數達到100萬時開始刷盤並驅逐

ceph osd pool set cache target_max_objects 10000000

ceph osd pool set cache cache_min_flush_age 600

ceph osd pool set cache cache_min_evict_age 600

定義當快取池中的髒物件(被修改過的物件)佔比達到多少時,快取分層**開始將object從快取層刷至儲存層:

# 當髒物件佔比達到10%時開始刷盤

ceph osd pool set cache cache_target_dirty_ratio 0.4

# 當髒物件佔比達到60%時開始高速刷盤

cache_target_dirty_high_ratio: 0.6

當快取池的使用量達到其總量的一定百分比時,快取分層**將驅逐物件以維護可用容量(達到該限制時,就認為快取池滿了),此時會將未修改的(乾淨的)物件刷盤:

ceph osd pool set cache cache_target_full_ratio 0.8
配置好快取池以後,我們可以先將其驅逐物件的最小時間設定為60s:

ceph osd pool set cache cache_min_evict_age 60

ceph osd pool set cache cache_min_flush_age 60

然後,我們往儲存池中寫乙個資料

rados -p cephfs_data put test /tmp/test.txt
檢視儲存池,這時應該無法檢視到該資料,檢視快取池,則可以看到資料儲存在快取池中:

rados -p cephfs_data ls |grep test

rados -p cache ls |grep test

等60s之後,資料刷盤,此時即可在儲存池中看到該資料,則快取池中,該資料即被驅逐。

需要說明的是,根據快取池型別的不同,刪除快取池的方法也不同。

由於唯讀快取不具有修改的資料,因此可以直接禁用並刪除它,而不會丟失任何最近對快取中的物件的更改。

將快取模式個性為none以禁用快取:

ceph osd tier cache-mode cache none
刪除快取池:

# 解除繫結

ceph osd tier remove cephfs_data cache

由於回寫快取可能具有修改的資料,所以必須採取措施以確保在禁用和刪除快取前,不丟失快取中物件的最近的任何更改。

將快取模式更改為**,以便新的和修改的物件重新整理至後端儲存池:

ceph osd tier cache-mode cache forward
檢視快取池以確保所有的物件都被重新整理(這可能需要點時間):

rados -p cache ls
如果快取池中仍然有物件,也可以手動重新整理:

rados -p cache cache-flush-evict-all
刪除覆蓋層,以使客戶端不再將流量引導至快取:

ceph osd tier remove-overlay cephfs_data
解除儲存池與快取池的繫結:

ceph osd tier remove cephfs_data cache
參考:

Ceph安裝步驟2 ceph儲存池

ceph安裝步驟1完成之後,即可進行該步驟的操作。本文中以對sas池進行操作為例。一 建立ceph pool 1.計算每個池所需要的pg數目。在建立池之前,首先需要計算pg數目 簡單來說,pg就是負責管理物件都儲存在哪些osd上 計算公式如下 pg 數目 osd數目 x 100 副本數 如果是糾刪碼...

CEPH快速搭建四 ceph的pool池

pool是ceph儲存資料時的邏輯分割槽,它起到namespace的作用。其他分布式儲存系統,比如mogilefs couchbase swift都有pool的概念,只是叫法不同。每個pool包含一定數量的pg,pg裡的物件被對映到不同的osd上,因此pool是分布到整個集群的。除了隔離資料,我們也...

ceph資源池建立命令

下面總結了一下ceph 資源池建立相關的命令 1 建立group ceph osd crush add bucket root 2 建立host ceph osd crush add bucket host 3 將host移入group ceph osd crush move root 4 給hos...