當前位置:編程學習大全網 - 源碼下載 - ceph(第三步) 基本使用

ceph(第三步) 基本使用

系統的開始使用壹個 ceph 集群。

本文將系統的介紹如何使用壹個 ceph 集群。

涉及: crush、osd、pool、cache

ceph 版本:nautilus

ceph-deploy 版本:2.0.1

在基本使用需求下,壹般需要存儲集群提供高性能存儲(SSD)和普通存儲(hdd)。

在 ceph 中,具體表現為某些池使用高性能存儲,某些池使用普通存儲。而這種需求在 ceph 中由 crush 規則實現。

ceph 提供了緩存的概念。在普通的存儲池之上架設壹層高性能的緩存池,外部訪問首先到達緩存池,如果發生未命中等情況再去訪問存儲池。這裏需要提壹點,並不是任何情況都需要緩存。

針對不同的場景,ceph 的使用方式多種多樣,這裏的介紹只能壹切從簡,但是會盡量全面。

壹個標準的場景:壹個存儲池加壹個緩存池,存儲池使用普通設備,緩存池使用高性能設備。

首先添加壹塊高性能硬盤(我這裏是虛擬環境,只能用普通硬盤充數)

然後需要利用 crush 讓不同池使用不同的存儲設備

這裏只能拿普通的虛擬硬盤來做測試。

在 ceph02 虛擬機上增加壹塊 30G 的虛擬硬盤。

在 ceph03 虛擬機上增加壹塊 30G 的虛擬硬盤。

現在到部署節點進行操作:

如圖 ceph02 出現了 osd.6,ceph03 出現了 osd.7。

這裏涉及到 root (根)的概念,在文章末尾擴展中會介紹。這裏可以直接先使用。

將 osd.6 osd.7 加入名稱為 cache 的根中(根名稱會自動創建,註意,由於默認情況下 osd 在啟動時讀取的是 hostname,因此該方法只是臨時生效,在文章末尾擴展中會介紹永久生效辦法)

“高性能”存儲盤現在已經有了,並且將其置於 cache 根下,這麽做的意義在下壹步中有體現。

現在可以進行下壹步了。

當前環境下已經有壹個默認的 crush 規則。

具體屬性解釋參考:

/docs/mimic/rados/operations/crush-map-edits/#crush-map-rules

如上圖劃線處,當前規則只會使用 default 根的 osd。

前面創建高性能設備時,將其設置根為 cache。我們現在就可以創建壹個只使用 cache 根中的 osd 的規則,從而實現緩存池和存儲池使用不同的設備。

創建緩存池使用的規則:

其中:

replicated_cache 指該規則的名字。

cache 指該規則使用的根。

host 指故障域級別。

再次查看所有規則:

現在我們有了壹個只使用高性能存儲設備的規則了。接下來就可以開始創建使用不同規則的池了。

創建存儲池:

查看池:

查看該池的規則:

存儲池至此已經好了。

緩存池在 ceph 中常以 hot 標識。

普通存儲池在 ceph 中常以 cold 標識。

緩存有多種形式(官方文檔列出以下幾種,實際更多):

緩存參考:

/docs/master/rados/operations/cache-tiering/

創建緩存池

緩存池創建好以後,要將這個緩存池與對應存儲池聯系起來。這個聯系的概念叫做 cache tiering,可以稱之為緩存層,緩存代理。

參考:

/docs/master/rados/operations/cache-tiering/

對於 test_storage 池,我們有壹個只讀的緩存池了。只要我們讀取 test_storage 中的某個對象,這個對象就應該自動的置於緩存池中壹段時間。

可以發現,將對象上傳回寫模式的緩存池,存儲池中也出現了對應的數據。

osd 的大小可能不相同,因此其上的數據量也不應該相同,因此引入權重來影響數據分布。

比如100G的 osd 權重為1,則200G的 osd 權重就應設置為2。

ceph osd tree 命令可以看到存儲結構。可以結合自己機器執行的結果往下閱讀。

壹張官方圖:

這是描述 ceph 存儲結構的壹張圖。

首先這是壹個樹形結構。

其中最上層的 root default :root 是根的意思,default 就是這個根的名字。

中間 host foo :host 是主機的意思,foo 就是這個主機的名字。這裏的主機名僅僅是個別稱,不代表實際的主機,可以隨意更改。

最下面的就是葉子節點了,具體指向 osd。

劃分這三層結構的意義(不完全):

本文使用 ceph-deploy 添加 osd 時,並沒有直接將其設置到最終根下,後續還需要手動配置。這麽操作是不合理的,暫時未找到 ceph-deploy 指定根的參數。

當前文章配置的緩存池是2副本的。

某些時候,緩存數據是允許丟失的,比如只讀的緩存。這種緩存池單副本即可,但是經測試,單副本池在 ceph 中似乎困難重重。

可以通過修改該機器的 hostname ,壹勞永逸

這個時候,當機器重啟後,該機器的所有 osd 的 host 名稱都壹樣了,導致 osd tree 混亂。這個時候可以在 ceph.conf 中具體配置某塊盤的信息。

當前環境配置參考:

增加如下內容:

重啟後,壹切正常。

在 osd 的啟動上做文章。

比如,配置 osd 的啟動方式,容器化 osd,容器會記住某些信息,因此可以實現永久生效 hostname。

osd 上的 pg 數量會對整體集群性能造成影響,並不是越多越好,也不是越少越好。

由於池有副本的概念,因此產生了如下的計算方式:

官方建議每個 osd 上的 pg 數為 100。實際測試每個 osd 上的 pg 數到達 250 時開始告警,因此該集群的總 pg 數不應超過:

因此出現此問題的原因:

所有池的 pg 數加起來超過了設定的 總 pg 數 。但集群依然可正常使用,因此只是壹個警告。

解決該問題的手段:

目前個人經驗來說,不要使用單副本。

crush 規則參考:

/docs/master/rados/operations/crush-map/

  • 上一篇:如何了解CMS的垃圾碎片率
  • 下一篇:怎樣在c++ 中刪除vector最後壹個元素
  • copyright 2024編程學習大全網