分布式存储系统 VeSpace 的策略子系统介绍(二)

在 分布式存储系统 VeSpace 的策略子系统介绍(一)中介绍 基于 Raft 算法实现的分布式 KV 模块 RStore,本文介绍元数据存储及调度。

 

1、元数据存储

 

在 RStore 中的 Snapshot 模块是为了防止系统的修改数据过多而进行的状态快照,状 态是由 RStore 中的 FSM 状态机触发的,FSM 根据设置在系统的修改数据状态达到一定的 阈值之后触发状态快照。做了状态快照之后,就会将快照之前的状态数据进行删除,节省存 储空间,同时所做的数据快照也可用于状态恢复和回滚。当服务异常重启后,RStore 会检 测是否存在快照,如果存在快照,则快照的数据会进行重建,RStore 的 Raft 模块就会根据 日志的索引重放那些没有在快照之内的日志条目,这样系统的元数据就快速地得到了恢复。

 

 

Backend Store 模块是 RStore 中元数据索引与存储模块,它负责元数据的内存索引和 数据落地。在 RStore 中,采用元数据逻辑存储和实际底层存储分离的机制,Backend Store 模块既可以处理所有的存储逻辑,同时也实现了一个新的存储后端,可以支持二进制和多版 本的键值对存储,并支持具有低内存使用率的增量快照,最后负责元数据的持久化(即磁盘 上)存储。在实现过程中采用分层排序的 BTree 数据结构来作为元数据存储的内存索引, 并实现了 Bitcask 键值存储模型来作为元数据持久存储层。其中 BTree 中的每个节点就代表 着一个元数据,节点值就指向该元数据在磁盘上的实际值。对于每个元数据都会保留其值的 所有先前数据版本,因此可以很方便地查看系统中元数据的修改记录。由于在实际应用场景 中,对系统元数据的读操作会非常频繁,因此会在系统中构建元数据的内存映射 ClusterPhysicalMap 和 ClusterLogicMap。以此来加快系统对元数据的访问。具体见下节。

 

最后,策略子系统中的基于 Raft 算法的分布式 KV 模块 RStore 对外提供标准的 KV 接 口(Put、Get、Delete 等),同时也提供元数据的事务性操作接口,可接受标准的 RESTfulAPI 请求来访问系统的元数据,也提供元数据批量操作的接口。因此,RStore 对于元数据的访问是非常方便,简单灵活和可靠的。

 

2、元数据在策略子系统中位置

 

在策略子系统中元数据模块是整个系统资源调度、策略控制的基础,正是因为有了元数 据,系统才能实现对整个系统的有效管理。元数据模块在整个策略子系统中的位置如下图所 示:

 

 

3、存储策略

 

策略可以使用户根据自己的需要或业务偏好,设置若干过滤项及权重值,由调度器选出 最合适的存储主机。

 

策略子系统提供了副本数、过滤、权重三类可选策略,用户在创建策略时可自由选择其中任意项。过滤参数是可选的,用户可根据业务需要,例如调度出高性能、低负载或大内存 的存储服务器来进行设置,不设置则不生效;可选权重参数和默认权重一起在调度时对可选 主机进行排序,选出最优存储主机。

 

 

图例是两种场景策略下的不同调度结果。 策略需在创建存储池前添加,在创建存储池时指定某一策略,策略会作用于该存储池下所有卷。策略决定调度器的行为,例如副本数可以让存储池下的卷都拥有指定个数的副本,而不同的过滤及权重也会使调度器返回不同的调度结果,细节请看调度。

 

4、调度

 

调度器(scheduler)的功能是为各基础操作(新建、扩容、克隆等)调度出可用的后 端存储主机。调度器根据用户设定的卷策略,再加上实时的监控信息,从所有可用的存储主 机中调度出最合适的 component 以供使用。

 

调度主要由两个部件组成,一个是过滤器(Filter),一个是权重器(Weighter)。两 者的输入都是可用的存储主机列表;首先根据策略指定的过滤参数,filter 先运行筛选出合 适的主机;然后根据策略指定的权重值,Weighter 进行排序,最终选出最合适的存储主机。

 

从整体来看调度过程如下图:

 

 

从局部来看,单个 component 的调度过程如下图:

 

 

最后调度是以 component 为单位的,即用户创建一个 3 副本 5component 的存储卷, scheduler会内部调度后一次性返回结果给调用程序。这样的设计能保证:


1. 对创建卷的全部调度要么是成功的,要么是失败的


2. 组件分散较均匀,不会出现热点


3. 至少有一个保护域拥有独立、完整的副本


4. 相同 index 的 component 不会出现在同一台主机上,即使某台存储主机宕掉也 不会导致多个副本失效到无法恢复

 

分享:分布式存储系统 VeSpace 的策略子系统介绍(二)

有容云-构筑企业容器云 www.youruncloud.com

温馨提示

对Docker容器技术或容器生产实施感兴趣的朋友欢迎加群讨论。我们汇集了Docker容器技术落地实施团队精英及业内技术派高人,在线为您分享Docker技术干货。我们的宗旨是为了大家拥有更专业的平台交流Docker实战技术,我们将定期邀请嘉宾做各类话题分享及回顾,共同实践研究Docker容器生态圈。

加微信群方法:

1.关注【有容云】公众号

2.留言”我要加群”

QQ群号:454565480

有容云微信二维码