Ceph ERASURE CODE(糾刪碼)


一個 Ceph 池與一種類型相關聯,以維持 OSD 的丟失(即一個磁盤,因為大多數時候每個磁盤都有一個 OSD)。創建池時的默認選擇是已復制,這意味着每個對象都復制到多個磁盤上。可以改用糾刪碼池類型來節省空間。

創建示例糾刪碼池

最簡單的糾刪碼池相當於RAID5,至少需要三台主機:

$ ceph osd pool create ecpool erasure
pool 'ecpool' created
$ echo ABCDEFGHI | rados --pool ecpool put NYAN -
$ rados --pool ecpool get NYAN -
ABCDEFGHI

糾刪碼配置文件

默認糾刪碼配置文件支持丟失兩個 OSD。它相當於一個大小為 3 的復制池,但需要 2TB 而不是 3TB 來存儲 1TB 數據。默認配置文件可以顯示為:

$ ceph osd erasure-code-profile get default
k=2
m=2
plugin=jerasure
crush-failure-domain=host
technique=reed_sol_van

選擇正確的配置文件很重要,因為在創建池后無法對其進行修改:需要創建具有不同配置文件的新池,並將前一個池中的所有對象移至新池。

配置文件中最重要的參數是K、M和 crush-failure-domain,因為它們定義了存儲開銷和數據持久性。例如,如果所需的架構必須承受損失兩個機架,存儲開銷為 67%,則可以定義以下配置文件:

$ ceph osd erasure-code-profile set myprofile \
   k=3 \
   m=2 \
   crush-failure-domain=rack
$ ceph osd pool create ecpool erasure myprofile
$ echo ABCDEFGHI | rados --pool ecpool put NYAN -
$ rados --pool ecpool get NYAN -
ABCDEFGHI

NYAN對象將被分成三部分(K=3 ),並且將創建兩個額外的塊( M=2)。M的值定義了可以同時丟失多少個 OSD 而不會丟失任何數據。crush-failure-domain=rack將創建一個 CRUSH 規則,確保沒有兩個塊存儲在同一個機架中。

更多信息可以在糾刪碼配置文件文檔中找到。

帶覆蓋的糾刪碼

默認情況下,糾刪碼池僅適用於執行完整對象寫入和追加的 RGW 之類的用途。

由於 Luminous,糾刪碼池的部分寫入可以通過每個池設置啟用。這讓 RBD 和 CephFS 將它們的數據存儲在糾刪碼池中:

ceph osd pool set ec_pool allow_ec_overwrites true

這只能在駐留在 bluestore OSD 上的池上啟用,因為 bluestore 的校驗和用於在深度清理期間檢測 bitrot 或其他損壞。除了不安全之外,與 bluestore 相比,使用具有 ec 覆蓋的文件存儲會產生較低的性能。

糾刪碼池不支持 omap,因此要將它們與 RBD 和 CephFS 一起使用,您必須指示它們將數據存儲在 ec 池中,並將其元數據存儲在復制池中。對於 RBD,這意味着--data-pool在鏡像創建期間使用糾刪碼池:

rbd create --size 1G --data-pool ec_pool replicated_pool/image_name

對於 CephFS,可以在文件系統創建期間或通過文件布局將糾刪碼池設置為默認數據池。

糾刪碼池和緩存分層

糾刪碼池比復制池需要更多資源,並且缺少一些功能,例如 omap。 為了克服這些限制,可以在糾刪碼池之前設置一個緩存層。

例如,如果池熱存儲由快速存儲組成:

$ ceph osd tier add ecpool hot-storage
$ ceph osd tier cache-mode hot-storage writeback
$ ceph osd tier set-overlay ecpool hot-storage

將熱存儲池作為ecpool的層以回寫模式放置,以便對ecpool的每次寫入和讀取實際上都在使用熱存儲,並從其靈活性和速度中受益。

更多信息可以在緩存分層文檔中找到。

糾刪碼池恢復

如果糾刪碼池丟失了一些分片,它必須從其他分片中恢復它們。這通常涉及從剩余的分片中讀取數據、重構數據並將其寫入新的對等方。在 Octopus 中,只要有至少K個可用分片,糾刪碼池就可以恢復。(如果分片少於K,您實際上已經丟失了數據!)

在 Octopus 之前,糾刪碼池至少需要min_size分片可用,即使min_size大於K也是如此。(我們通常建議 min_size 為K+2或更大,以防止寫入和數據丟失。)這個保守的決定是在設計新的池模式時非常謹慎而做出的,但也意味着無法使用 OSD 丟失但沒有數據丟失的池無需人工干預即可恢復並激活以更改min_size。

詞匯表

  • chunk

當調用編碼函數時,它返回相同大小的塊。可以連接以重建原始對象的數據塊和可用於重建丟失的塊的編碼塊。

  • K

數據塊的數量,即原始對象被划分的塊的數量。例如,如果K=2,一個 10KB 的對象將被分成K個每個 5KB 的對象。

  • M

編碼塊的數量,即由編碼函數計算的附加塊的數量。如果有 2 個編碼塊,則意味着 2 個 OSD 可以 out 而不會丟失數據。

糾刪碼插件

ceph中的EC編碼是以插件的形式來提供的。EC編碼有三個指標:空間利用率、數據可靠性和恢復效率。ceph提供以下幾種糾刪碼插件:clay(coupled-layer)、jerasure、lrc、shec、isa。

clay:用於在修復失敗的節點/OSD/rack時節省網絡帶寬和磁盤IO。

jerasure:開源庫,目前ceph默認的編碼方式。

isa:isa是Intel提供的EC庫,利用intel處理器指令加速計算,只能運行在Intel CPU上。

lrc:將校驗塊分為全局校驗塊和局部校驗塊,減少單個節點失效后恢復過程的網絡開銷。

shec:shec(k,m,l),k為data chunk,m為coding chunk,l代表計算coding chunk時需要的data chunk數量。其最大允許失效數據塊為:ml/k,恢復失效的單個數據塊(data chunk)只需要額外讀取l個數據塊。

technique

可以選擇具體技術technique。

更靈活的技術是reed_sol_van:足以設置k和m。

該cauchy_good技術可以更快,但你需要選擇的PACKETSIZE 小心。

從只能使用m = 2進行配置的意義上來說,所有reed_sol_r6_op,liberation, blaum_roth,liber8tion都是RAID6等效項。

支持的技術是:

’reed_sol_van’,’reed_sol_r6_op’,’cauchy_orig’,’cauchy_good’,’liber8tion’用於jerasure。
’reed_sol_van’,’cauchy’用於isa。
’single’,’multiple’用於shec。

默認:reed_sol_van (for jerasure, isa), single (for shec)

糾刪碼示例

糾刪碼4+2:1的profile和crush規則

[root@node-1 cluster]# ceph osd erasure-code-profile get pool1-profile
crush-device-class=
crush-failure-domain=osd
crush-root=default
k=4
m=2
plugin=isa
technique=reed_sol_van
rule pool1-rule {
        id 2
        type erasure
        min_size 1
        max_size 20
        step take pool1-root
        step choose indep 3 type host
        step chooseleaf indep 2 type osd
        step emit
}
pool 2 'pool1' erasure size 6 min_size 4 crush_rule 2 object_hash rjenkins pg_num 256 pgp_num 256 last_change 239 flags hashpspool,ec_overwrites stripe_width 16384 aggressive_async_recovery_max_updates 0 async_recovery_max_updates 60 osd_backfillfull_ratio 0.85 osd_full_ratio 0.9 osd_heavy_slowio_threshold 600 osd_nearfull_ratio 0.8 osd_omap_backfillfull_ratio 0.85 osd_omap_full_ratio 0.98 osd_omap_nearfull_ratio 0.7 tier_balance_read 1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM