ceph rbd数据写入流程
ceph rbd数据写入流程
拓补图:
图片解析:存储过程:
一个文件切割为很多部分 比如一个100M的文件最终会切割成25个4M(默认4M)的文件切割之后:
每个object
都会有一个object id object id
需要存储到pg里面去 此处进行一个运算把object id 作为一个哈希 >> 对其进行掩码运算 >> 得到pgid
pg上面:存储多个object
>> 通过crush
算法把pg
做一次运算分配到 集群中对应的osd
节点上(根据crush
层次的不同osd
也会落到不同的地方 )
比如crush
算法定义的是以机架为单位的 此时便会落到不同的机架上的osd
上从而确保数据的高可用性
实际操作演示:
文件切割大小验证 演示文件 id: rbd_data.38074c091b82.0000000000000200
1 | rbd info ceph-demo/rbd-demo.img 或 rbd -p ceph-demo info rbd-demo.img (查看命令) |
解析:
共:11G 分为:2816个文件 每个文件:4M
object的前缀都是以: rbd_data.38074c091b82 开头
查看验证:rados -p ceph-demo ls |grep rbd\_data.38074c091b82
(查看所有文件)
查看大小:rados -p ceph-demo stat rbd\_data.38074c091b82.0000000000000200
(每个都是4M)
查看文件最终落在的地方:
1 | ceph osd map ceph-demo rbd_data.38074c091b82.0000000000000200 (查看文件最终落于) |
解析: 文件pool池deph-demo >> 落在pgid为:1.7811abdf 上面 >> 解析掩码哈希分配于 >> osd.0 osd.1上面一个文件拆分为多个object这些object都会落在不同的pg上 pg最终落在不同的osd上
验证:for循环验证
1 | for i in \`rados -p ceph-demo ls |grep rbd\_data.38074c091b82\` ; do ceph osd map ceph-demo \$i; done |
落于不同的pg上
rbd是瘦分配的会根据使用情况去自动的扩这些空间
1 | rados -p ceph-demo ls |grep rbd_data.38074c091b82 |wc -l # 当前这个块有五十多个object |
当前这个块有五十多个object 每个4M 实际分配了也就二百多M的空间 当前只用了40多M 使用增长的话会动态的去扩容object的数量 满足 我们需要的空间
1 | watch -n 1 'rados -p ceph-demo ls |grep rbd_data.38074c091b82 |wc -l ' (动态监视object文件变化) |
往挂载的目录写入数据:
1 | cd /mnt/rbd-demo |
可以看到最终object增加到313个