多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
ceph的数据管理始于ceph client的写操作,鉴于ceph使用多副本及强一致性策略来保证数据的安全性和完整性,一个写请求的数据会首先被写入到primary OSD上去,然后primary OSD会进一步将数据复制到secondary和其它tertiary OSD上去并一直等待他们的完成通知,然后再将最终的完成确认发送给client。这篇文章主要从ceph数据管理这个方面入手,通过具体的实例介绍一下如何在ceph中找到数据的存放位置。 1. 我们先创建一个包含数据的test文件、一个ceph pool并且设置pool的副本数为3 $ echo "Hello ceph, I'm learning the data management part." > /tmp/testfile $ cat /tmp/testfile Hello ceph, I'm learning the data management part. $ ceph osd pool create helloceph 192 192 pool 'helloceph' created $ ceph osd pool set helloceph size 3 set pool 3 size to 3 2. 将文件写入到创建的pool中 $ rados -p helloceph put object1 /tmp/testfile $ rados -p helloceph ls object1 3. 查看object1的pg map $ ceph osd map helloceph object1 osdmap e8 pool 'helloceph' (3) object 'object1' -> pg 3.bac5debc (3.bc) -> up ([0,1,2], p0) acting ([0,1,2], p0) 其中, osdmap e8 OSD map的版本号 pool 'helloceph' (3) pool的名字和ID object 'object1' object的名字 pg 3.bac5debc (3.bc) pg number,即3.bc up ([0,1,2], p0) OSD up set,因为我们设置的是3副本,所以每个pg都会被存放在3个OSD上 acting ([0,1,2], p0) acting set,即OSD.0(primary)、OSD.1(secondary)和OSD.2(tertiary) 4. 查看三个OSD的信息,主要是host信息即OSD在哪个机器上 $ ceph osd tree # id weight type name up/down reweight -1 3 root default -3 3 rack unknownrack -2 3 host server-185 0 1 osd.0 up 1 1 1 osd.1 up 1 2 1 osd.2 up 1 因为我搭建的是All-in-one的环境,所以所有的OSD都在一个机器上。 5. 从osd中找出testfile文件(这里以osd.1为例) $ df -h|grep osd.1 /dev/mapper/ceph-osd.1 99G 37M 99G 1% /var/ceph/osd.1 $ ls -l|grep 3.bc drwxr-xr-x 2 root root 38 2015-07-12 09:52 3.bc_head $ ls -l total 4 -rw-r--r-- 1 root root 51 2015-07-12 09:52 object1__head_BAC5DEBC__3 $ cat object1__head_BAC5DEBC__3 Hello ceph, I'm learning the data management part. 同样,我们也可以在osd.0和osd.2中找到object1. **/var/lib/ceph/osd下面有磁盘与osd的对应关系。** 6、ceph 文件数: getfattr -d -m ".*" /ceph