ceph同时提供对象存储、块存储、文件存储三种接口,但本质上其实是对象存储,也就是说一个rbd image实际上包含了多个对象(默认情况下是image_size/4M)。
备注:使用ceph RBD是无法像目录文件一样看到文件内容等的,因为虽然我们是创建了一个文件,实际上是把文件作为对象存储,所以我们只能看到这个文件确实存在了osd上,且有副本。
ceph RBD无法查看文件内容,但使用快照导出文件,保留数据是很好用的
此处以块存储(RBD)为例进行演示,因为三种接口最终存储文件的操作单元都是对象,所以其他接口的方法类似:
前提:在bloc接口下有一个池:pool1,创建另一个volume(rbd image):vol1。
因为这个vol1里其实包含了很多object,我们首先要查找object的位置:
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rados lspools
device_health_metrics
replicapool
my-store.rgw.control
my-store.rgw.meta
my-store.rgw.log
my-store.rgw.buckets.index
my-store.rgw.buckets.non-ec
.rgw.root
my-store.rgw.buckets.data
1.查找volume(rbd image)的指纹信息
一个rbd image实际上包含了多个对象(默认情况下是image_size/4M)
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rbd info replicapool/csi-vol-e31e16b6-6069-11eb-b9c5-0e28ddb26a3c
rbd image 'csi-vol-e31e16b6-6069-11eb-b9c5-0e28ddb26a3c':
size 2 GiB in 512 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 3a34255bcd45c
block_name_prefix: rbd_data.3a34255bcd45c
format: 2
features: layering
op_features:
flags:
create_timestamp: Wed Jan 27 06:35:46 2021
access_timestamp: Wed Jan 27 06:35:46 2021
modify_timestamp: Wed Jan 27 06:35:46 2021
查看真实使用空间:
rbd diff hzb-mysql | awk ‘{ SUM += $2 } END { print SUM/1024/1024 " MB" }’
上面的红色加粗部分就是该image的指纹,如果image是以 --image-format 2创建的,则上面的红色部分显示为: rbd_data.1979a96b8b4567这样的形式。下面利用该指纹可以查出该image的所有对象:
2.根据指纹找到这个volume的object
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# rados -p replicapool ls|grep rbd_data.3a34255bcd45c
rbd_data.3a34255bcd45c.0000000000000000
rbd_data.3a34255bcd45c.0000000000000100
rbd_data.3a34255bcd45c.0000000000000008
rbd_data.3a34255bcd45c.0000000000000020
rbd_data.3a34255bcd45c.00000000000000e0
rbd_data.3a34255bcd45c.0000000000000120
rbd_data.3a34255bcd45c.00000000000000a0
rbd_data.3a34255bcd45c.0000000000000060
…还有很多,以上就是这个volume里所包含的object
从上面的查询结果中可以看出,一个image对象是由上面的object组成的,他们每一个的存储位置可能都不一样。我们以第一行的紫色object来查询它的真实存储位置。
3.查看object所在的PG和OSD
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# ceph osd map replicapool rbd_data.3a34255bcd45c.0000000000000060
osdmap e298 pool 'replicapool' (2) object 'rbd_data.3a34255bcd45c.0000000000000060' -> pg 2.2d90c0db (2.1b) -> up ([19,2,15], p19) acting ([19,2,15], p19)
这代表在pool rbd中的 rb.0.11895f.6b8b4567.000000000006 这个对象位于2.0这个pg中,并且位于osd3和osd0上(两个副本)。
4.查看osd所在host主机
[root@rook-ceph-tools-6f5694c655-hzpj5 /]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 26.18628 root default
-3 8.72876 host node1
0 hdd 1.09109 osd.0 up 1.00000 1.00000
3 hdd 1.09109 osd.3 up 1.00000 1.00000
6 hdd 1.09109 osd.6 up 1.00000 1.00000
9 hdd 1.09109 osd.9 up 1.00000 1.00000
12 hdd 1.09109 osd.12 up 1.00000 1.00000
15 hdd 1.09109 osd.15 up 1.00000 1.00000
18 hdd 1.09109 osd.18 up 1.00000 1.00000
21 hdd 1.09109 osd.21 up 1.00000 1.00000
-7 8.72876 host node2
1 hdd 1.09109 osd.1 up 1.00000 1.00000
4 hdd 1.09109 osd.4 up 1.00000 1.00000
7 hdd 1.09109 osd.7 up 1.00000 1.00000
10 hdd 1.09109 osd.10 up 1.00000 1.00000
13 hdd 1.09109 osd.13 up 1.00000 1.00000
16 hdd 1.09109 osd.16 up 1.00000 1.00000
19 hdd 1.09109 osd.19 up 1.00000 1.00000
23 hdd 1.09109 osd.23 up 1.00000 1.00000
-5 8.72876 host node3
2 hdd 1.09109 osd.2 up 1.00000 1.00000
5 hdd 1.09109 osd.5 up 1.00000 1.00000
8 hdd 1.09109 osd.8 up 1.00000 1.00000
11 hdd 1.09109 osd.11 up 1.00000 1.00000
14 hdd 1.09109 osd.14 up 1.00000 1.00000
17 hdd 1.09109 osd.17 up 1.00000 1.00000
20 hdd 1.09109 osd.20 up 1.00000 1.00000
22 hdd 1.09109 osd.22 up 1.00000 1.00000
5、进入机器osd3上,进入下面目录
[root@nc3 2.0_head]# cd /var/lib/ceph/osd/ceph-3/current/2.0_head
[root@nc3 2.0_head]# ll
total 8196
-rw-r--r-- 1 root root 0 Mar 28 18:52 __head_00000000__2
-rw-r--r-- 1 root root 4194304 Apr 14 14:49 rb.0.11895f.6b8b4567.000000000003__head_7494AE80__2
-rw-r--r-- 1 root root 4194304 Apr 14 14:49 rb.0.11895f.6b8b4567.000000000006__head_E1382280__2
下面的蓝色加粗的这个文件就是rb.0.11895f.6b8b4567.000000000006这个object的真实位置,同理,我们可以找出第2步当中的所有object的真实位置。
osd0上的跟osd3上的方法一样,不再说了。
ceph 存储池PG查看和PG存放OSD位置
1. 查看PG
1 (ceph-mon)[root@controller /]# ceph pg stat
2 512 pgs: 512 active+clean; 0 bytes data, 1936 MB used, 447 GB / 449 GB avail
3 (ceph-mon)[root@controller /]# ceph pg dump
2. pg映射OSD位置
1 (ceph-mon)[root@controller /]# ceph pg map 3.5d
2 osdmap e53 pg 3.5d (3.5d) -> up [6,15,4] acting [6,15,4]