Luminous的新特性: RGW 动态桶分片

本文翻译自: https://ceph.com/community/new-luminous-rgw-dynamic-bucket-sharding/

翻译术语说明:

  • bucket sharding : 桶分片

  • dynamic bucket sharding:动态桶分片

  • backet reshading:桶重分片

  • capability: 功能
  • bucket index objects: 桶索引对象
  • features :特性
  • components: 组件
  • property :特征
  • IO  capacity : IO吞吐量

Luminous为RGW增加了一种新的特性:自动管理RGW中桶的索引对象的分片。在这之前,Ceph的管理员需要时刻操心那些有很大的桶的用户因为桶太大而导致性能和可靠性问题,现在,Luminous将完全自动地管理RGW的内部索引对象。

背景

Ceph最重要的设计理念之一就是:万物皆可扩展。Ceph从一开始就设计成允许以水平方式进行扩展,同时也要求所有后续增加的特性也能水平扩展。这种设计哲学在Ceph内部的所有组件(比如mon,osd,mds,rgw等)中已经得到了很好的体现:当资源快用完时,总是可以通过增加新的机器,在新机器上部署新节点来使得集群的整体性能得到提升。

RADOS(Ceph的底层对象存储)的一个特征是它并不在系统里保存所有对象的索引,而是使用CRUSH算法,根据对象的名称,集群配置和集群状态来计算出对象所在的节点。由于不需要使用元数据服务器,所有的IO操作都不需要与元数据服务器进行交互,这样所有的IO吞吐可以分散到多个OSD节点上,这个特征使得水平扩展成为可能。RADOS网关(RGW)是在RADOS的基础上实现的,它提供了一套兼容S3接口的对象存储服务,通过RGW来访问对象时不需要用到任何索引。

然而,RGW仍然为每个桶维护了一个索引,在这个索引里保存了桶里面所有对象的元数据列表。之所以这样做是因为根据s3接口的定义,RGW需要提供访问这些数据的接口(比如,列出RGW的桶内容接口),但是底层的 RADOS 并没有提供有效率的列表功能。此外,还有些其他的任务也会用到桶索引,比如维护一套日志功能来实现每个操作生成一个版本,桶容量的元数据和使用日志对多区域进行同步。桶索引并不会影响对象的读操作,但是写新对象或修改对象需要增加额外的步骤。

由此带来了两个影响:其一,在一个对象中保存桶索引的数据是有限的。本来,我们采用RADOS对象的key-value接口来实现桶索引是没有限制的,每个桶默认只有一个RADOS对象用来保存索引。但当这个索引对象变得很大时,就会产生性能和可靠性问题,在极端情况下甚至可能因为恢复操作变得很慢从而导致OSD节点下线。其二,因为桶的所有写操作都需要修改和序列化桶索引所使用到的那个 RADOS 对象,所以最终会有性能瓶颈。

在Hammer版本中引入了桶分片特性来解决这个问题。每个桶索引可以使用多个 RADOS 对象来保存,每个 RADOS 对象称为一个分片,通过将索引分片的方式来支持一个桶里面保存对象数量的持续增长。但是,这个机制只适应于那些新创建的桶,并且需要提前规划好桶的最终容量。于是我们又增加了一套桶重分片的管理指令,通过些套指令可以修改桶索引的分片数量。但是,往往只有当桶索引已经开始出现问题时管理员才会意识到要开始进行重分片,并且在重分片的过程中不能对桶有写操作(这会很不方便甚至做不到)。

动态桶重分片

最终,Luminous版本引入了动态桶重分片功能。随着桶里面的对象数量增长桶的索引将会自动进行重分片。而且,在重分片的过程中,不再需要停止向对桶的IO操作(尽管在重分片进行过程中一些并发操作的时延可能会变长)。 radosgw进程会自动判断桶是否到了需要重分片的时机(当每个分片索引的对象数量过大时),由一个单独的线程来负责安排重分片操作。

配置

自动重分片特性默认是开启的,管理员不需要做额外的动作也不需要关心实现细节。

把rgw dynamic resharding设置为false 可以关闭自动重分片特性 。"rgw max objs per shared"控制每个分片索引的对象数量(默认为10w)。重分片线程会定时执行,执行的时间间隔由配置项“rgw reshard thread interval”决定(默认为10分钟)。

有一些新的radosgw-admin指令可以用来监控和控制重分片的执行过程:

  • 手动对桶增加一个重分片任务计划
$ radosgw-admin reshard add --bucket=<bucket> --num-shards=<num_shards>
  • 查看桶的分片任务计划列表
$ radosgw-admin reshard list
  • 手动执行重分片任务计划
$ radosgw-admin reshard process
  • 取消一个桶的重分片任务计划
$ radosgw-admin reshard cancel --bucket=<bucket>

结论

在Luminous版的RGW中,用户不再需要操心索引的内部分片了。这个功能是Ceph为了让系统更简单,好用,能自动管理而对底层所进行的诸多改造的成果之一。

 

 

转载于:https://my.oschina.net/u/150599/blog/3017345

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值