前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ceph存储数据流程

ceph存储数据流程

作者头像
summerking
发布2022-09-16 11:58:53
9390
发布2022-09-16 11:58:53
举报
文章被收录于专栏:summerking的专栏

本文目标:理解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): 它就是真正负责数据存取的服务。
代码语言:javascript
复制
graph LR
文件-->对象
对象-->归置组
归置组-->OSD

  1. 文件到对象的映射

首先,将file切分成多个object,每个object的大小由RADOS限定(通常为2m或者4m)。每个object都有唯一的id即oid,oid由ino和ono产生的

  • ino:文件唯一id(比如filename+timestamp)
  • ono:切分后某个object的序号(比如0,1,2,3,4,5等)
  1. 对象到归置组的映射

对oid进行hash然后进行按位与计算得到某一个PG的id。mask为PG的数量减1。这样得到的pgid是随机的。

注:这与PG的数量和文件的数量有关系。在足够量级的程度上数据是均匀分布的。

  1. 归置组到OSD的映射

通过CRUSH算法可以通过pgid得到多个osd,简而言之就是根据集群的OSD状态和存储策略配置动态得到osdid,从而自动化的实现高可靠性和数据均匀分布。在ceph中,数据到底是在哪个osd是通过CRUSH算法计算出来的

# 查看一个Object的具体存放位置

# 1. 新建一个test池

代码语言:javascript
复制
root in iscloud163-200 in ~ via 🐍 v2.7.5 
➜ rados lspools
summer60sys000
testpool

# 2. 上传一个文件到test池中

代码语言:javascript
复制
root in iscloud163-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

# 3. 查看test池中刚上传的对象

代码语言:javascript
复制
root in iscloud163-200 in ~ via 🐍 v2.7.5 
➜ rados -p testpool ls | grep xsw
xsw

# 4. 查看对象位置

代码语言:javascript
复制
root in iscloud163-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)

  • 这代表pool test中的xsw这个对象位于3.7这个pg中,并且位于osd3和osd0上(两个副本)

# 5. 进入到对应osd的存储目录,找到对应文件即可

代码语言:javascript
复制
root in iscloud163-200 in ceph-0/current/3.7_head 
➜ pwd
/var/lib/ceph/osd/ceph-0/current/3.7_head
root in iscloud163-200 in ceph-0/current/3.7_head 
➜ ll
total 20508
-rw-r--r-- 1 root root 4194304 Apr 23 09:51 benchmark\udata\uiscloud163-200\u3243175\uobject20__head_9D317607__3
-rw-r--r-- 1 root root 4194304 Apr 23 09:51 benchmark\udata\uiscloud163-200\u3243175\uobject37__head_F83C35C7__3
-rw-r--r-- 1 root root 4194304 Apr 23 09:51 benchmark\udata\uiscloud163-200\u3243175\uobject43__head_78BB75F7__3
-rw-r--r-- 1 root root 4194304 Apr 23 09:51 benchmark\udata\uiscloud163-200\u3243175\uobject5__head_E2A01F47__3
-rw-r--r-- 1 root root 4194304 Apr 23 09:51 benchmark\udata\uiscloud163-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

  • 这个目录下存放了3.7这个pg中所有的object,可以根据指纹30bdc57f来定位到具体的文件。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # ceph存储流程图
  • # ceph存储流程详解
  • # 查看一个Object的具体存放位置
    • # 1. 新建一个test池
      • # 2. 上传一个文件到test池中
        • # 3. 查看test池中刚上传的对象
          • # 4. 查看对象位置
            • # 5. 进入到对应osd的存储目录,找到对应文件即可
            相关产品与服务
            对象存储
            对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档