ceph存储数据流程
本文目标:理解ceph存储流程,例如:当client向ceph集群中写入一个文件时,这个文件是如何存储到ceph中的,其存储过程是如何?
# ceph存储流程图
# ceph存储流程详解
- File: 就是我们想要存储和访问的文件,这个是面向我们用户的,是我们直观操作的对象。
- Object:object就是Ceph底层RADOS所看到的对象,也就是在Ceph中存储的基本单位。object的大小由RADOS限定(通常为2m或者4m)。
- PG (Placement Group): PG是一个逻辑的概念,它的用途是对object的存储进行组织和位置的映射,通过它可以更好的分配数据和定位数据。
- OSD (Object Storage Device): 它就是真正负责数据存取的服务。
graph LR
文件-->对象
对象-->归置组
归置组-->OSD
1
2
3
4
2
3
4
- 文件到对象的映射
首先,将file切分成多个object,每个object的大小由RADOS限定(通常为2m或者4m)。每个object都有唯一的id即oid,oid由ino和ono产生的
- ino:文件唯一id(比如filename+timestamp)
- ono:切分后某个object的序号(比如0,1,2,3,4,5等)
- 对象到归置组的映射
对oid进行hash然后进行按位与计算得到某一个PG的id。mask为PG的数量减1。这样得到的pgid是随机的。
注:这与PG的数量和文件的数量有关系。在足够量级的程度上数据是均匀分布的。
- 归置组到OSD的映射
通过CRUSH算法可以通过pgid得到多个osd,简而言之就是根据集群的OSD状态和存储策略配置动态得到osdid,从而自动化的实现高可靠性和数据均匀分布。在ceph中,数据到底是在哪个osd是通过CRUSH算法计算出来的
# 查看一个Object的具体存放位置
# 1. 新建一个test池
root in summer163-200 in ~ via 🐍 v2.7.5
➜ rados lspools
summer60sys000
testpool
1
2
3
4
2
3
4
# 2. 上传一个文件到test池中
root in summer163-200 in ~ via 🐍 v2.7.5
❯ rados -p testpool put xsw xsw.txt
OBJECT COMMANDS
get <obj-name> [outfile] fetch object
put <obj-name> [infile] write object
1
2
3
4
5
6
2
3
4
5
6
# 3. 查看test池中刚上传的对象
root in summer163-200 in ~ via 🐍 v2.7.5
➜ rados -p testpool ls | grep xsw
xsw
1
2
3
2
3
# 4. 查看对象位置
root in summer163-200 in ~ via 🐍 v2.7.5
➜ ceph osd map testpool xsw
osdmap e46 pool 'testpool' (3) object 'xsw' -> pg 3.30bdc57f (3.7) -> up ([3,0], p3) acting ([3,0], p3)
1
2
3
2
3
- 这代表pool test中的xsw这个对象位于3.7这个pg中,并且位于osd3和osd0上(两个副本)
# 5. 进入到对应osd的存储目录,找到对应文件即可
root in summer163-200 in ceph-0/current/3.7_head
➜ pwd
/var/lib/ceph/osd/ceph-0/current/3.7_head
root in summer163-200 in ceph-0/current/3.7_head
➜ ll
total 20508
-rw-r--r-- 1 root root 4194304 Apr 23 09:51 benchmark\udata\usummer163-200\u3243175\uobject20__head_9D317607__3
-rw-r--r-- 1 root root 4194304 Apr 23 09:51 benchmark\udata\usummer163-200\u3243175\uobject37__head_F83C35C7__3
-rw-r--r-- 1 root root 4194304 Apr 23 09:51 benchmark\udata\usummer163-200\u3243175\uobject43__head_78BB75F7__3
-rw-r--r-- 1 root root 4194304 Apr 23 09:51 benchmark\udata\usummer163-200\u3243175\uobject5__head_E2A01F47__3
-rw-r--r-- 1 root root 4194304 Apr 23 09:51 benchmark\udata\usummer163-200\u3243175\uobject64__head_98D1E25F__3
-rw-r--r-- 1 root root 0 Apr 23 09:51 __head_00000007__3
-rw-r--r-- 1 root root 502 Apr 23 14:45 xsw__head_30BDC57F__3
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
- 这个目录下存放了3.7这个pg中所有的object,可以根据指纹30bdc57f来定位到具体的文件。
上次更新: 2/17/2023, 5:59:37 PM