一 前期準備 提示:相關部署參考《001.Ansible部署RHCS存儲集群》。 二 存儲池概述 2.1 存儲池 Red Hat Ceph存儲池池是Red Hat Ceph存儲集群用於存儲對象的邏輯分區。 池有特定的屬性:池類型,它確定池用於確保數據持久性的保護機制。 replication類型在集 ...
一 前期準備
1 [kiosk@foundation0 ~]$ ssh ceph@serverc #登錄Ceph集群節點 2 [ceph@serverc ~]$ ceph health #確保集群狀態正常 3 HEALTH_OK提示:相關部署參考《001.Ansible部署RHCS存儲集群》。
二 存儲池概述
2.1 存儲池
Red Hat Ceph存儲池池是Red Hat Ceph存儲集群用於存儲對象的邏輯分區。 池有特定的屬性:池類型,它確定池用於確保數據持久性的保護機制。 replication類型在集群中分佈每個對象的多個副本。 erasure coding類型將每個對象分割成塊,並將它們與其他擦除編碼塊一起分發,以使用自動糾錯機制保護對象。 池中存在一定的數量的PG,它們將它們的對象存儲在一組由CRUSH演算法確定的osd中。 Ceph使用CRUSH規則集來標識哪個放置組應該包含它存儲的每個對象。 訪問級別用於確定不同用戶的訪問許可權的訪問許可權。 當Ceph在池中存儲對象時,它使用CRUSH演算法將對象分配給池中的一個PG。根據池的配置和CRUSH演算法,PG自動映射到一組OSDs。這決定了Ceph用來存儲對象的OSDs。池類型決定該對象如何在該集合的OSDS中複製或存儲。 存儲管理員可以配置CRUSH,以便Ceph存儲使用特定類型存儲設備(如ssd)或位於不同物理位置的設備上的osd來存儲對象。 提示:池中放置組的數量對性能有重要影響。如果在池中配置太少的放置組,那麼需要在每個PG中存儲太多的數據,如果您在一個池中配置了太多的放置組,OSDs將需要大量的RAM和CPU資源。通常,一個池應該配置為每個OSD包含100-200個放置組。預設情況下,當您創建一個池時,Ceph會檢查每個OSD的pg數量是否已經超過200,如果是,Ceph將不會創建池。如果一個池已經達到了這個限制,ceph health命令還會顯示一個警告。這個限制由/etc/ceph/ceph conf配置文件中的mon_max_pg_per_osd參數控制。三 存儲池常見操作
3.1 啟用存儲池
創建池之後,管理員必須顯式地配置能夠使用它的Ceph應用程式的類型:Ceph塊設備(也稱為RADOS塊設備或RBD)、Ceph對象網關(也稱為RADOS網關或RGW)、Ceph文件系統(CephFS)。 命令:ceph osd pool application enable pool-name app 解析: app通常指: cephfs:用於Ceph文件系統; rbd:用於Ceph塊設備; rgw:用於Ceph對象網關。3.2 池相關命令
3.3 池配額
管理員可以設置配額來限制可以存儲在池中的最大位元組數或最大對象數。 命令:ceph osd pool set-quota pool-name max_objects obj-count max_bytes bytes 提示:當Ceph達到池配額時,操作將被無限期阻塞。3.4 池快照操作
重命名池:ceph osd pool rename current-name new-name 提示:重命名不會影響存儲在池中的數據。 管理快照:ceph osd pool mksnap pool-name snap-name #創建快照 管理快照:ceph osd pool rmsnap pool-name snap-name #刪除快照 檢索快照:rados -p pool-name -s snap-name get object-name file 回滾快照:rados -p pool-name rollback object-name snap-name 註意:Ceph不支持對erasure類型池進行快照。3.5 池的修改操作
設置池參數:ceph osd pool set pool-name parameter value 查看池參數:ceph osd pool get pool-name parameter 查看池所有參數:ceph osd pool get pool-name all 常見參數:size參數控制池的副本數量,並映射到osd_pool default_size配置文件參數(預設為3)。pg_num參數控制池的放置組的數量,並映射到osd_pool_default_pg_num配置文件參數(預設為8)。3.6 刪除池
命令:ceph osd pool delete pool-name pool-name --yes-i-really-really-mean-it 註意:在Red Hat Ceph Storage 3中,為了提供更高的保護,Ceph將mon allow pool delete confiquration參數設置為false。當配置此參數後,使用--yes-i-really-really-mean-it選項,ceph osd池刪除命令不會導致池的刪除。您可以將mon允許池刪除參數設置為true,並重新啟動mon服務以允許池刪除。 在配置mon_alow_pool_delete為true後,仍然可以通過在池級別將no delete選項設置為ture來保護池不被刪除,命令:ceph osd pool set pool-name nodelete true。 提示:刪除池之後,應該刪除與該池相關的所有配置,包括專用於池的用戶和CRUSH map規則。3.7 池的命名空間
在池中配置的命名空間是池中對象的邏輯組。限制用戶用戶對池的訪問,使用戶只能在該名稱空間中存儲或檢索對象。名稱空間的優點是可以使用它們來限制用戶對池的一部分的訪問,它們允許對池進行邏輯分區,並將應用程式限制在池中特定的名稱空間內。因此,幾個應用程式可以安全地共用一個池,並且不至於池的數量過多。 提示:名稱空間目前只支持直接使用librados的應用程式。 要將對象存儲在命名空間中,客戶機應用程式必須提供池和名稱空間名稱。預設情況下,每個池包含一個名稱空間,名稱為空,稱為defaul名稱空間。 例如,從池中存儲和檢索對象的rados命令接受-N name或--namespace=name選項來指定要使用的名稱空間。 命令:rados -p mytestpool -N system put srv /etc/services 解析:將/etc/services文件作為srv對象存儲在mytestpool池中的system命名空間中。 命令:rados -p mytestpool -N system ls 解析:在所有名稱空間中列出池中的所有對象。 提示:若需要以JSON格式返回結果,可添加--format=ison選項。四 複製存儲池
4.1 創建複製存儲池
命令:ceph osd pool create pool-name pg-num [pgp-num] [replicated] [crush-ruleset-name] \ [expected-num-objects] 解析: pool-name:池名稱; pg-num:池中的pg總數; pgp-num:池的有效放置組數。通常,這應該等於pg的總數。 duplicate:指定這是一個複製池,如果不包含在命令中,則通常是預設值。 crush-ruleset-name是:用於此池的CRUSH名稱。預設值為:osd_pool_default_crush_replicated_ruleset。 提示:一個OSD需要管理的PGs越多,它需要的資源就越多。同時配置紅帽Ceph存儲重要的創建池之後,不能減少池中放置組的數量。但是,可以增加放置組的數量。五 糾刪碼池
5.1 糾刪碼池概述
糾刪碼池使用擦除糾刪碼而不是複製來保護對象數據。當將一個對象存儲在糾刪碼池中時,該對象被劃分為許多數據塊,這些數據塊存儲在單獨的OSDs中。此外,還根據數據塊計算了大量的糾刪碼塊,並將其存儲在不同的osd中。如果包含塊的OSD失敗,可以使用糾刪碼塊來重構對象的數據。 糾刪碼池與複製池不同,它不依賴於存儲每個對象的多個完整副本。 每個對象的數據被分成k個數據塊。 計算了m個編碼塊大小與數據塊大小相同的糾刪碼塊。 對象存儲在總共k + m 個OSDS上。 提示:糾刪碼池比複製池需要更少的存儲空間來獲得類似級別的數據保護。可以降低存儲集群的成本和大小。然而,計算糾刪碼塊會增加CPU和記憶體開銷,從而降低糾刪碼池的性能。此外,在Red Hat Ceph Storage 3中,需要部分對象寫的操作不支持擦除編碼池。目前糾刪碼池的使用限制在執行完整對象寫入和追加的應用程式中,比如Ceph對象網關。即Red Hat Ceph存儲目前只支持通過Ceph對象網關訪問的糾刪碼池。5.2 創建糾刪存儲池
命令:ceph osd pool create pool-name pg-num [pgp-num] erasure [erasure-code-profile] \[crush-ruleset-name] [expected-num-objects] 解析: pool-name:池名稱; pg-num:池中的pg總數; pgp-num:池的有效放置組數。通常,這應該等於pg的總數。 erasure:指定這是一個糾刪碼池,如果不包含在命令中,則預設是複製池。 erasure-code-profile:指定是要使用的配置文件。可以使用ceph osd erasure-code-profile創建新的配置文件,配置文件定義要使用的k和m值以及erasure插件。 crush-ruleset-name是:用於此池的CRUSH名稱。如果沒有設置,Ceph將使用erasure-code-profile文件中定義。 提示:一個OSD需要管理的PGs越多,它需要的資源就越多。同時配置紅帽Ceph存儲重要的創建池之後,不能減少池中放置組的數量。但是,可以增加放置組的數量。5.3 糾刪池配置文件
糾刪池配置文件配置糾刪池用於存儲對象的數據塊和糾刪塊的數量,以及要使用的擦除codinq插件和演算法。可以創建新的配置文件來定義一組新的糾刪參數。Ceph在安裝期間創建名為default的配置文件。這個配置文件被配置為將對象分成兩個數據塊和一個編碼塊。Ceph有一個基於插件的系統來控制擦除編碼是如何實現的,並且已經創建了許多不同的插件,它們以不同的方式管理擦除編碼。預設配置文件使用Jerasure插件,這是最靈活和通用的選項。Red Hat Ceph Storage 3還支持本地可修複擦除代碼(LRC)插件。 提示:紅帽Ceph存儲只支持Jerasure和本地可修複擦除代碼(LRC)插件。 查看參數:ceph osd erasure-code-profile get default 設置參數:ceph osd erasure-code-profile set profile-name arguments六 Ceph配置文件
6.1 Ceph配置文件介紹
預設情況下,Ceph守護進程和客戶機/etc/ceph/ceph.conf文件讀取配置。修改配置參數時,必須確保所有集群節點和客戶端/etc/ceph/ceph.conf文件一致。若使用Ansible來管理您的Red Hat Ceph存儲集群配置,它將使您的Ceph配置文件在其所有節點上保持同步。 ceph.conf文件使用基於ini的文件格式,包含幾個部分,其中包括與Ceph守護進程和客戶機相關的配置。 提示:參數名稱可以使用空格、下劃線或破折號作為分隔符,例如osd journal size、osd_journal_size和osd-journal-size都是有效的等效參數名稱。 使用特定守護進程的設置進行分組:- [global]:存儲所有守護進程共有的一般配置和設置。任何進程都會讀取該配置,包括客戶機。在其他更具體的配置中會重寫global設置的參數。
- [mon]:存儲與monitors(mon)相關的配置。
- [osd]:存儲與osd守護進程相關的配置。
- [mgr]:存儲與managers(MGR)相關的配置。
- [mds]:存儲與元數據伺服器(mds)相關的配置。
- [client]:存儲應用於所有Ceph客戶機的配置。
6.2 常見配置
global模塊定義全局參數,即定義集群範圍的參數。它通常包括以下配置設置:
- 帶有所有監視器列表的mon主機。
- mon初始成員設置為必須在集群啟動時啟動的監視器列表,以建立仲裁。
- 啟用或禁用Ceph組件之間使用cephx身份驗證的設置(預設啟用)。
- Ceph環境中使用的網路,通常一個用於OSDs(集群網路),一個用於客戶機(公共網路)。
6.3 查看配置
命令:ceph daemon type.id config show #查看所有參數和值 示例:ceph daemon osd.0 config show 命令:ceph daemon type.id config get parameter #查看指定參數 示例:ceph daemon type.id config get mds_data6.4 Ansible Ceph配置文件
在部署節點上使用Ansible部署,調用/usr/share/ceph-ansible中的Ansible Playbook部署或更新Red Hat Ceph存儲集群時,它都會在每個節點上重新創建/etc/ceph/ceph.conf文件。 在/usr/share/ceph-ansible_group_vars/,編輯ceph_conf_overrides變數,以添加新的節或配置參數。Ansible將該變數轉換為INI格式,並將其添加到生成的ceph.conf文件。 提示:部署新的配置到節點時候,需要在/usr/share/ceph-ansible目錄使用ansibe-playbook site.yml命令。七 啟動和停止Ceph
7.1 概述
使用systemct1命令管理Ceph服務。systemctl命令可用於管理Ceph服務。有一個systemd命令控制所有Ceph守護進程,也存在獨立的命令只控制特定類型的守護進程。- ceph.target:啟動或停止當前節點上的所有守護進程
- ceph-type.target:啟動或停止特定類型的所有守護進程