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

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

翻译术语说明:bash

  • 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 并无提供有效率的列表功能。此外,还有些其余的任务也会用到桶索引,好比维护一套日志功能来实现每一个操做生成一个版本,桶容量的元数据和使用日志对多区域进行同步。桶索引并不会影响对象的读操做,可是写新对象或修改对象须要增长额外的步骤。code

由此带来了两个影响:其一,在一个对象中保存桶索引的数据是有限的。原本,咱们采用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为了让系统更简单,好用,能自动管理而对底层所进行的诸多改造的成果之一。

相关文章
相关标签/搜索