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