Ceph RBD:条带(stripe)详解

引言

条带的概念

基本概念

条带(stripe)是把连续的一段数据按照一定size切分成多个数据块,这些数据块可以存储在指定数量的磁盘中。主要有如下两个概念:

  • 条带大小(stripe_unit):即每个数据块的大小,如设置为1M,那么5M的数据就可以切分成5个1M的数据块。
  • 条带宽度(stripe_num):即连续的数据可以存储在多少个磁盘中,如设置为6,那么12M的数据就可以存储在6个磁盘中。

条带数据如何分布?

如果stripe_unit设置为1M,stripe_num设置为6,那么10M的数据是如何存储的呢?

  • 首先将10M的数据按照stripe_unit拆分成10段,uint0-uint9,每一段数据1M。
  • 将10段数据依次循环存放到stripe_num设置的6块盘中。
disk0 disk1 disk2 disk3 disk4 disk5
uint0(1M) uint1(1M) uint2(1M) uint3(1M) uint4(1M) uint5(1M)
uint6(1M) uint7(1M) uint8(1M) uint9(1M)

为什么要有条带?

  • 优势:将数据拆分写入不同的磁盘,自动实现负载均衡,防止单盘出现的性能瓶颈。
  • 劣势:数据存储在不同的磁盘上,读取时需要进行数据的合并,stripe_unit如果设置过小,数据合并和磁盘IOPS瓶颈也会产生。

Ceph RBD如何使用条带?

Ceph RADOS层本身是无条带概念的,需要RBD进行控制。RBD将RADOS对象看作是磁盘,其他概念与前文介绍相同。如果stripe_unit设置为1M,stripe_num设置为6,每个RADOS对象可以存储4M数据,那么40M的是按照如下存储的。

radosobj0 radosobj1 radosobj2 radosobj3 radosobj4 radosobj5
uint0(1M) uint1(1M) uint2(1M) uint3(1M) uint4(1M) uint5(1M)
uint6(1M) uint7(1M) uint8(1M) uint9(1M) uint10(1M) uint11(1M)
uint12(1M) uint13(1M) uint14(1M) uint15(1M) uint16(1M) uint17(1M)
uint18(1M) uint19(1M) uint20(1M) uint21(1M) uint22(1M) uint23(1M)
radosobj6 radosobj7 radosobj8 radosobj9 radosobj10 radosobj11
uint24(1M) uint25(1M) uint26(1M) uint27(1M) uint28(1M) uint29(1M)
uint30(1M) uint31(1M) uint32(1M) uint33(1M) uint34(1M) uint35(1M)
uint36(1M) uint37(1M) uint38(1M) uint39(1M) - -
- - - - - -

条带观察实践

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值