ceph緩存變慢
『壹』 Ceph 分層緩存--Tiering Cache
原文來自Ceph官方文檔: CACHE TIERING
部分摘抄自Ceph中國社區翻譯文檔: 分級緩存
分層緩存為ceph客戶端中的某些存放在存儲層的數據提供更好的IO性能。分級緩存需創建一個由高速而昂貴存儲設備(如 SSD )組成的存儲池、作為緩存層,以及一個相對低速/廉價設備組成的後端存儲池(或糾刪碼編碼的)、作為經濟存儲層。Ceph 的對象處理器決定往哪裡存儲對象,分級代理決定何時把緩存內的對象刷回後端存儲層;所以緩存層和後端存儲層對 Ceph 客戶端來說是完全透明的。
緩存代理層管理著數據在緩存層和存儲層之間的自動遷移。但是, 管理員也可以通過配置來干預遷移規則, 下面是對兩個主要場景的介紹:
Writeback Mode: 當管理員將緩存層配置成回寫模式, Ceph客戶端將數據寫入緩存層,並接收返回的ACK。同時,寫入緩存層的數據遷移到存儲層, 然後從緩存層刷掉。 直觀的看, 緩存層在存儲層之前。 當Ceph客戶端需要存在於存儲層的數據時, 緩存層代理會把這些數據遷移到緩存層,然後再發往 Ceph 客戶端。因此,Ceph 客戶端將與緩存層進行 I/O 操作,直到數據不再被讀寫。此模式對於易變數據來說較理想(如照片/視頻編輯、事務數據等)。
Read-proxy Mode: 這個模式將使用一些已經存在於緩存層的數據,但是,如果數據不在緩存層,請求將被代理轉發到底層。這個模式對於從回寫模式過渡到禁用緩存非常有用的, 因為它潤需負載一直工作到緩存乾涸,不再向緩存添加任何數據。
如果負載過多,分層緩存會降低性能。用戶在使用以下特性時需要極其謹慎。
Workload dependent : 緩存是否能提升性能,高度依賴於負載能力。因為將數據移入或移除緩存會導致額外的開銷,它只在對數據集的訪問有大的偏離時有影響。例如, 眾多的請求訪問小數量的objects,這時,你的緩存池需要非常大,才能在處理所有請求時,避免數據過渡。
Difficult to benchmark : 用戶使用評測性能時,大部分的關於分層緩存bechmarks測試結果,將會是一個糟糕的結果。其中部分原因是很少的bechmarks傾斜於一組小的對象集合的請求 , 這會使緩存經過很長時間後才能「活躍起來」,並且這種「活躍起來」會導致高昂的開銷。
Usually slower : 對於並沒有友好使用分級緩存的工作負載,性能普遍低於一個沒使用分級緩存的普通rados池。
librados object enumeration : 對於librados級別的枚舉對象API並不能連貫存在在這種情況中(The librados-level object enumeration API is not meant to be coherent in the presence of the case)。 如果你的應用直接使用rados,並且依賴於枚舉對象,分級緩存不能向期待的那樣工作. (對於RGW, RBD, or CephFS,沒有這個問題)
Complexity : 在使用RADOS集群時,使用分級緩存意味著大量的額外器械和復雜性。這會增加你遇到未知的BUG(可能其他人未遇到過)的可能性, 並且使你的部署擁有更大的風險。
RGW time-skewed : 如果RGW工作中遇到的大部分操作是朝向最近寫入的數據,一個簡單的分級緩存可以工作得很好。
下面的配置使用分層緩存效果不佳。
RBD with replicated cache and erasure-coded base : 這是一個普遍的需求, 但是通常不能很好工作。即使合理的傾斜工作負載,仍然會遇到一些對於冷門object的寫操作的情況,並且由於糾刪碼類型的池還不支持輕微的讀寫操作,為了適應一些小的寫入操作(通常4kb),整個object塊(通常4MB)必須被全部遷移到緩存 。只有少數用戶成功的應用了這種部署方式,並且這種部署方案只能為他們工作是因為他們的數據是極其「冷門」的(例如備份),並且他們對於性能並不敏感。
RBD with replicated cache and base : 在使用備份類型為基礎層時比以糾刪碼為基礎層時,RBD的表現更為良好, 但是它在工作負載中仍然依賴於大量的傾斜,並且很難驗證。用戶需要對他們的工作負載有更好的理解, 並且需要仔細調整分層緩存參數。
為了建立分層緩存,你必須擁有兩個存儲池。一個作為後端存儲,一個作為緩存。
建立一個後端存儲池包含兩種場景:
標准存儲 : 在這種場景中,這個池在Ceph存儲集群中存儲一個對象的多個副本。
糾刪碼: 在這種場景中,存儲池用糾刪碼高效地存儲數據,性能稍有損失。
在標准存儲場景中,你可以用 CRUSH 規則集來標識失敗域(如 osd 、主機、機箱、機架、排等)。當規則集所涉及的所有驅動器規格、速度(轉速和吞吐量)和類型相同時, OSD 守護進程運行得最優。創建規則集的詳情見 CRUSH 圖 。創建好規則集後,再創建後端存儲池。
在糾刪碼編碼情景中,創建存儲池時指定好參數就會自動生成合適的規則集,詳情見 創建存儲池 。
在後續例子中,我們把cold-storage當作後端存儲池。
『貳』 數據存儲的三種方式
數據存儲的三種方式分別是:內存存儲、硬碟存儲和閃信蘆存存儲。
內存存儲:內存存儲是計算機中一種臨時性的數據存儲方式,其數據存儲速度較快,但是存儲容量比較有限。內存存儲器通常被用來存儲正在使用的程序和數據。
硬碟存儲:硬碟存儲是計算機中一種永久性的數據存儲方式,其數據存儲速度相對較慢,但是存儲容量比較大。硬碟存儲器通常被用來存儲操作系統、應用程序、文檔、圖片、音頻和視頻等大容量數據。
快閃記憶體存儲:快閃記憶體存儲是一種固態存儲器,其數據存儲速度相對較快,而且存儲容量較大。快閃記憶體存儲器通常被用來製作U盤、存儲卡等移動設備。
雙字寬存儲州坦廳器是一種計算機存儲器的類型,其存儲單元的寬度是16個二進制位(即2個位元組),因此可以一次性存儲兩個字冊隱節的數據,稱為「雙字寬存儲器」。雙字寬存儲器在計算機中的應用較廣泛,可以提高數據存儲和訪問的效率。
『叄』 Linux裡面ceph是什麼
Linux裡面ceph
Ceph是一個可靠地、自動重均衡、自動恢復的分布式存儲系統,根據場景劃分可以將Ceph分為三大塊,分別是對象存儲、塊設備存儲和文件系統服務。在虛擬化領域里,比較常用到的是Ceph的塊設備存儲,比如在OpenStack項目里,Ceph的塊設備存儲可以對接OpenStack的cinder後端存儲、Glance的鏡像存儲和虛擬機的數據存儲,比較直觀的是Ceph集群可以提供一個raw格式的塊存儲來作為虛擬機實例的硬碟。
Ceph相比其它存儲的優勢點在於它不單單是存儲,同時還充分利用了存儲節點上的計算能力,在存儲每一個數據時,都會通過計算得出該數據存儲的位置,盡量將數據分布均衡,同時由於Ceph的良好設計,採用了CRUSH演算法、HASH環等方法,使得它不存在傳統的單點故障的問題,且隨著規模的擴大性能並不會受到影響。