ceph中,数据会被平均拆分为4MB(默认值)的Object,然后通过Pool ---(crush)----> PG -----> OSD的流程,最后存放到OSD中。
那么怎么才能获取一个Object的存放位置?
下面演示如何存放一个Object到ceph集群中,以及获取/定位/删除一个集群中的Object。
一、存放一个Object
要存放一个Object到ceph集群中,需要知道:
Object的名字name
指定要存放Object的pool名
查看pools,这儿使用"testpool"这个pool。
# rados lspools
rbdtestpool
新建一个"test.txt"文件,生成名为"test-object-1”的Object,往"testpool"中写入
# echo "test data" > test.txt# rados put test-object-1 test.txt --pool=testpool
查看该Object
# rados -p testpool ls
rbd_directoryrbd_id.barrbd_data.5e3b248a65f6.0000000000000083rbd_data.5e3b248a65f6.0000000000000080rbd_data.5e3b248a65f6.00000000000000e0rbd_data.5e3b248a65f6.0000000000000087rbd_data.5e3b248a65f6.0000000000000000rbd_data.5e3b248a65f6.00000000000000ffrbd_data.5e3b248a65f6.0000000000000084rbd_data.5e3b248a65f6.00000000000000a0rbd_data.5e3b248a65f6.0000000000000060rbd_data.5e3b248a65f6.0000000000000021rbd_data.5e3b248a65f6.0000000000000004rbd_data.5e3b248a65f6.0000000000000085rbd_data.5e3b248a65f6.0000000000000081rbd_data.5e3b248a65f6.0000000000000020rbd_data.5e3b248a65f6.0000000000000086rbd_data.5e3b248a65f6.0000000000000082test-object-1rbd_header.5e3b248a65f6查看该Object在ceph集群中存放的位置。
# ceph osd map testpool test-object-1
osdmap e95 pool 'testpool' (1) object 'test-object-1' -> pg 1.74dc35e2 (1.1e2) -> up ([4,1], p4) acting ([4,1], p4)上述输出信息表明,在osdmap中 "epoch 95" --> pool number 1 "testpool'" 下,存放了“'test-object-1”的object,存放在PG “1.74dc35e2 (1.1e2)”,其osd是osd.4和osd.1,并且osd.4是Primary osd。
二、
获取osdmap的二进制文件
# sudo ceph osd getmap -o osds.map
got osdmap epoch 95使用文本方式查看osdmap
# osdmaptool --print osds.map
osdmaptool: osdmap file 'osds.map'epoch 95fsid ced59665-9de8-42b7-b2c3-5a19cffe97c7created 2016-03-25 21:13:13.595390modified 2016-03-31 12:36:39.588974flags sortbitwisepool 0 'rbd' replicated size 2 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 16 flags hashpspool stripe_width 0
pool 1 'testpool' replicated size 2 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 512 pgp_num 512 last_change 95 flags hashpspool stripe_width 0 removed_snaps [1~3]max_osd 6
osd.0 up in weight 1 up_from 77 up_thru 88 down_at 70 last_clean_interval [54,61) 10.167.225.35:6812/3979 10.167.225.35:6813/3979 10.167.225.35:6814/3979 10.167.225.35:6815/3979 exists,up 5c0194c3-351b-4ce9-9864-083819a3e0cbosd.1 up in weight 1 up_from 74 up_thru 91 down_at 70 last_clean_interval [51,61) 10.167.225.35:6808/3668 10.167.225.35:6809/3668 10.167.225.35:6810/3668 10.167.225.35:6811/3668 exists,up 02327243-d1e4-4ea5-9688-9c5e6f46ec44osd.2 up in weight 1 up_from 68 up_thru 89 down_at 67 last_clean_interval [57,61) 10.167.225.35:6804/3107 10.167.225.35:6805/3107 10.167.225.35:6806/3107 10.167.225.35:6807/3107 exists,up 03a50780-9924-4f66-bf5c-71fa0b37bf2fosd.3 up in weight 1 up_from 63 up_thru 89 down_at 62 last_clean_interval [48,61) 10.167.225.35:6800/2728 10.167.225.35:6801/2728 10.167.225.35:6802/2728 10.167.225.35:6803/2728 exists,up edaf6eda-6683-48bd-adf3-f9c748148036osd.4 up in weight 1 up_from 85 up_thru 90 down_at 80 last_clean_interval [71,84) 10.167.225.63:6804/3048 10.167.225.63:6808/1003048 10.167.225.63:6809/1003048 10.167.225.63:6810/1003048 exists,up f57ba6b1-54e9-4bfc-930f-42adbdd036fbosd.5 up in weight 1 up_from 85 up_thru 91 down_at 80 last_clean_interval [65,84) 10.167.225.63:6800/2559 10.167.225.63:6805/1002559 10.167.225.63:6807/1002559 10.167.225.63:6811/1002559 exists,up 583e265c-11c1-4230-81d6-7c9a58d0f463
三、删除一个Object
使用如下rados rm命令,从pool中删除该名字的object即可。
# rados rm test-object-1 --pool=testpool