004 ceph存儲池
介紹:前面已經使用deploy和ansble部署了ceph集群,現在對集群的池進行簡單介紹和簡單操作
一、部分概念
池是ceph存儲集群的邏輯分區,用於存儲對象
對象存儲到池中時,使用CRUSH規則將該對象分配到池中的一個PG,PG根據池的配置和CRUSH算法自動映射一組OSD池中PG數量對性能有重要影響。通常而言,池應當配置為每個OSD包含的100-200個歸置組
創建池時。ceph會檢查每個OSD的PG數量是否會超過200.如果超過,ceph不會創建這個池。ceph3.0安裝時不創建存儲池。
二、存儲池(復制池)
2.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的有效數,通常與pg相等
replicated 指定為復制池,即使不指定,默認也是創建復制池
crush-ruleset-name 用於這個池的crush規則的名字,默認為osd_pool_default_crush_replicated_ruleset
expected-num-objects 池中預期的對象數量。如果事先知道這個值,ceph可於創建池時在OSD的文件系統上準備文件夾結構。否則,ceph會在運行時重組目錄結構,因為對象數量會有所增加。這種重組一會帶來延遲影響
[root@ceph2 ceph]# ceph osd pool create testpool 128
沒有寫的參數即使用默認值
[root@ceph2 ceph]# ceph -s
查詢集群有哪些pool
[root@ceph2 ceph]# ceph osd pool ls
[root@ceph2 ceph]# ceph osd lspools
[root@ceph2 ceph]# ceph df
註:創建了池後,無法減少PG的數量,只能增加
如果創建池時不指定副本數量,則默認為3,可通過osd_pool_default_size參數修改,還可以通過如下命令修改:ceph osd pool set pool-name size number-of-replicas osd_pool_default_min_size參數可用於設置最對象可用的最小副本數,默認為2
查看pool屬性
[root@ceph2 ceph]# ceph osd pool get testpool all
2.2 為池啟用ceph應用
創建池後,必須顯式指定能夠使用它的ceph應用類型:(ceph塊設備 ceph對象網關 ceph文件系統)
如果不顯示指定類型,集群將顯示HEALTH_WARN狀態(使用ceph health detail命令查看)
為池關聯應用類型:
ceph osd pool application enable pool-name app
指定池為塊設備
[root@ceph2 ceph]# ceph osd pool application enable testpool rbd enabled application ‘rbd‘ on pool ‘testpool‘ [root@ceph2 ceph]# [root@ceph2 ceph]# ceph osd pool ls detail pool 1 ‘testpool‘ replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 33 flags hashpspool stripe_width 0 application rbd
[root@ceph2 ceph]# ceph osd pool stats
[root@ceph2 ceph]# ceph osd pool stats testpool
2.3 設置配額
[root@ceph2 ceph]# ceph osd pool set-quota testpool max_bytes 1048576 set-quota max_bytes = 1048576 for pool testpool [root@ceph2 ceph]# [root@ceph2 ceph]# ceph osd pool set-quota testpool max_bytes 0 set-quota max_bytes = 0 for pool testpool
2.4 池的重命名
[root@ceph2 ceph]# ceph osd pool rename testpool mytestpool pool ‘testpool‘ renamed to ‘mytestpool‘ [root@ceph2 ceph]# ceph osd pool ls mytestpool
2.5 數據處理
[root@ceph2 ceph]# rados -p mytestpool put test /root/anaconda-ks.cfg
查看數據
[root@ceph2 ceph]# rados -p mytestpool ls
查看數據內容,只能下載下來,進行源文件對比
[root@ceph2 ceph]# rados -p mytestpool get test /root/111
[root@ceph2 ceph]# diff /root/111 /root/anaconda-ks.cfg
命名修改後,不影響數據
[root@ceph2 ceph]#ceph osd pool rename mytestpool testpool pool ‘mytestpool‘ renamed to ‘testpool‘ [root@ceph2 ceph]#rados -p testpool ls test
上傳與下載數據
[root@ceph2 ceph]# echo "111111111111" >> /root/111 [root@ceph2 ceph]# rados -p testpool put test /root/111 [root@ceph2 ceph]# rados -p testpool ls test [root@ceph2 ceph]# rados -p testpool get test /root/222 [root@ceph2 ceph]# diff /root/222 /root/anaconda-ks.cfg 240d239 < 111111111111
2.6 池的快照
創建池快照
[root@ceph2 ceph]# ceph osd pool mksnap testpool testpool-snap-20190316 created pool testpool snap testpool-snap-20190316 [root@ceph2 ceph]# rados lssnap -p testpool 1 testpool-snap-20190316 2019.03.16 22:27:34 1 snaps
再上傳一個數據
[root@ceph2 ceph]# rados -p testpool put test2 /root/anaconda-ks.cfg [root@ceph2 ceph]# rados -p testpool ls test2 test
使用快照的場景:(防止誤刪除,防止誤修改,防止新增錯誤文件)
ceph針對文件回退
[root@ceph2 ceph]# ceph osd pool mksnap testpool testpool-snap-2 created pool testpool snap testpool-snap-2 [root@ceph2 ceph]# rados lssnap -p testpool 1 testpool-snap-20190316 2019.03.16 22:27:34 2 testpool-snap-2 2019.03.16 22:31:15 2 snaps
文件刪除並恢復
root@ceph2 ceph]# rados -p testpool rm test [root@ceph2 ceph]# rados -p testpool get test /root/333 error getting testpool/test: (2) No such file or directory [root@ceph2 ceph]# rados -p testpool -s testpool-snap-2 get test /root/444 selected snap 2 ‘testpool-snap-2‘ [root@ceph2 ceph]# ll /root/444 #可以直接從444恢復test文件 -rw-r--r-- 1 root root 7317 Mar 16 22:34 /root/444 [root@ceph2 ceph]# rados -p testpool rollback test testpool-snap-2 從快照中還原 rolled back pool testpool to snapshot testpool-snap-2 [root@ceph2 ceph]# rados -p testpool get test /root/555 [root@ceph2 ceph]# diff /root/444 /root/555 #對比文件沒有區別,還原成功
2.7 配置池屬性
[root@ceph2 ceph]# ceph osd pool get testpool min_size min_size: 2 [root@ceph2 ceph]# ceph osd pool set testpool min_size 1 set pool 1 min_size to 1 [root@ceph2 ceph]# ceph osd pool get testpool min_size min_size: 1 [root@ceph2 ceph]# ceph osd pool set testpool min_size 2 set pool 1 min_size to 2 [root@ceph2 ceph]# ceph osd pool get testpool min_size min_size: 2
三、存儲池(糾刪碼池)
3.1 糾刪碼池的特性
糾刪碼池使用糾刪碼而非復制來保護對象數據
相對於復制池,糾刪碼池會節約存儲空間,但是需要更多的計算資源
糾刪碼池只能用於對象存儲
糾刪碼池不支持快照
3.2 創建糾刪碼池
3.2.1 語法
ceph osd pool create <pool-name> <pg-num> [pgp-num] erasure [erasure-code-profile] [cursh-ruleset-name] [expected_num_objects]
erasure用於指定創建一個糾刪碼池
erasure-code-profile是要使用的profile的名稱,可以使用ceph osd erasure-code-profile set 命令創建新的profile。profile定義使用的插件類型以及k和m的值。默認情況下,ceph使用default profile
查看默認profile
[root@ceph2 ceph]# ceph osd erasure-code-profile get default
k=2 m=1 plugin=jerasure technique=reed_sol_van
3.2.2 自定義一個profile
[root@ceph2 ceph]# ceph osd erasure-code-profile set EC-profile k=3 m=2
[root@ceph2 ceph]# ceph osd erasure-code-profile get EC-profile
crush-device-class= crush-failure-domain=host crush-root=default jerasure-per-chunk-alignment=false k=3 m=2 plugin=jerasure technique=reed_sol_van w=8
3.2.3 創建一個糾刪碼池
[root@ceph2 ceph]# ceph osd pool create EC-pool 64 64 erasure EC-profile pool ‘EC-pool‘ created [root@ceph2 ceph]# ceph osd pool ls testpool EC-pool [root@ceph2 ceph]# ceph osd pool ls detail pool 1 ‘testpool‘ replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 42 flags hashpspool stripe_width 0 application rbd snap 1 ‘testpool-snap-20190316‘ 2019-03-16 22:27:34.150433 snap 2 ‘testpool-snap-2‘ 2019-03-16 22:31:15.430823 pool 2 ‘EC-pool‘ erasure size 5 min_size 4 crush_rule 1 object_hash rjenkins pg_num 64 pgp_num 64 last_change 46 flags hashpspool stripe_width 12288
3.3 關於糾刪碼池的其他操作
列出現有的配置:ceph osd erasure-code-profile ls
[root@ceph2 ceph]# ceph osd erasure-code-profile ls EC-profile default
刪除現有的配置:ceph osd erasure-code-profile rm profile-name
查看糾刪碼池狀態:ceph osd dump |grep -i EC-pool
[root@ceph2 ceph]# ceph osd dump |grep -i EC-pool pool 2 ‘EC-pool‘ erasure size 5 min_size 4 crush_rule 1 object_hash rjenkins pg_num 64 pgp_num 64 last_change 46 flags hashpspool stripe_width 12288
添加數據到糾刪碼池:rados -p EC-pool ls,rados -p EC-pool put object1 hello.txt
查看數據狀態:ceph osd map EC-pool object1
讀取數據:rados -p EC-pool get object1 /tmp/object1
004 ceph存儲池