1. 程式人生 > >004 ceph存儲池

004 ceph存儲池

-s 重要 failure sele rollback replicate 5.4 3.0 分享圖片

介紹:前面已經使用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存儲池