可大可小,弹性高效,分布式存储路由算法发现软件定义之美

2022年04月 · XSKY

前言

在分布式存储系统中,如何在不可靠硬件系统中实现稳定可靠的存储服务一直是工程上的难点,业界一般采用多副本技术来保障数据的可靠性。

在多副本基础上,我们还需要考虑多故障域。但是故障域的需求可能是动态变化的,一个客户在初期可能只有3台机器,那么故障域就是节点,即允许2个节点同时发生故障,剩下1个节点即可提供服务。后面随着业务的增长,需要不断地进行扩容,这时候节点数可能增加到数十台到数百台。随着节点数的增加,多个节点同时发生故障的概率也会增加。如果还是选择节点作为故障域,那么由于多节点同时故障导致的服务不可用的概率就会增加,因此这时候我们需要将节点故障域修改为机架故障域。随着业务的再次增加,机架故障域可能需要扩展到机房故障域,甚至上升到数据中心级别的故障域。

因此,一个高效灵活的分布式存储系统,需要考虑针对业务地不断变化,随时适应其对IT架构灵活配置的需求。因此,在副本算法的选择上,需同时满足以下几点需求:

  1. 可以多副本,也可以纠删码(EC,N + M,N和M灵活配置)

  2. 多故障域支持(节点->机架->机房->数据中心)

  3. 故障域的灵活调整

  4. 各磁盘使用量的“绝对”均衡

针对以上的几点强需求,XSKY星辰天合统一数据平台(XEDP)从底层实现上采用了设计领先的分布式路由算法(以下简称算法),该算法用来决定数据在集群中的分布,包括多副本存放的物理位置。该算法的设计核心是将数据中心、机架、机器和磁盘构建成一颗多叉树,副本策略选择的过程就是从根节点到叶子节点路径选择的过程。基于该算法,XEDP构建了一个弹性灵活高效的存储池。

图片

在线扩容和缩容(自动重平衡)

XEDP支持在线扩容和缩容。在扩容节点或者故障缩容节点时,需考虑在尽可能减少数据迁移的情况下,保证系统中各节点负载的均衡性。该算法具有以下特点:

  1. 均衡性:数据能够均匀地分布到所有的节点中;

  2. 隔离性:当有新节点加入系统中,系统会重新做数据分配,数据迁移仅涉及新增节点,现有节点上的数据不需要做很大调整;

  3. 适应性:在做数据分布计算时,算法是可以动态调整的,当系统中出现性能、负载不一致的节点时,算法可以根据调整输入参数优化算法,重新平衡负载。

但是由于节点异构,节点中各磁盘裸容量有可能不一致等情况,数据的重构可能会导致数据在各磁盘或节点间分布不均衡。为了解决这个问题,XEDP在产品上支持自动数据重平衡和手动重平衡。

自动重平衡模式是为了减少运维投入而开发的一款智能运维工具,在该模式下,算法会根据集群的负载,选择在业务压力小的情况下自动进行数据重平衡。

图片

手动数据重平衡下用户可以自行决定是否立即触发数据的重平衡,用户可以在综合评估负载和容量需求的情况下按需操作。

XEDP支持集群数十倍甚至数百倍的扩容。扩容过程中,算法会预先分析扩容后各个磁盘需要承担多少数据,然后在此基础上进行智能的微调,算法能保证在扩容数十倍后各个磁盘的容量使用率差值不超过3%,基本实现了数据在磁盘间的绝对均衡分布。

整池扩容

当容量使用紧张时需要进行扩容,虽然XEDP自带恢复QoS可以将对业务的影响减少到最小,但是扩容毕竟涉及到大量的数据重平衡,重平衡的过程将会持续较长时间。在对象和文件场景,如果是规模化扩容,XEDP支持“整池扩容”特性。整池扩容即将所有的新增磁盘组成一个全新的资源池,新的数据会写入新的资源池,而所有已经写入的数据都会存放在老资源池,老资源池仅支持支持读,修改和删除。整池库容特性完全避免了数据的恢复,对业务没有丝毫的影响。

在线副本数调整

随着业务或者IT预算的调整,可能需要调整副本数来应对这些变化。XEDP支持在线调整副本数,增加或者减少副本一键操作,方便灵活。

image.png

精简EC<——>普通EC

纠删码(Erasure  Coding,EC)是实现在同样的硬件条件下,扩大可用容量的常用方式。例如三副本的得盘率是33.3%,EC 4+2的得盘率是66.6%,EC 8+2 的得盘率是 80%。纠删码K+M会将数据按照条带切分,每个条带再分为K个数据切片,然后对K个数据分片计算出M个校验分片。

对于绝大多数客户而言,可用容量是极其敏感的,XEDP支持一种精简EC的模式。在精简EC模式下,用较少的节点可以实现EC的需求。以精简EC 4 + 2:1为例,每2个数据切片(或校验分片)存在1个节点的2个磁盘中,因此我们只需要3个节点即可满足上述的要求(这种情况可以损坏2个磁盘,但是只支持1个节点故障)。后续随着集群扩容到6个节点,我们可以把精简EC扩展为普通EC。普通EC模式下,不同数据分片存放在不同节点中,调整后可以支持2个节点同时故障。

同样在缩容场景下,我们也支持将普通EC降级为精简EC。

image.png

故障域调整

随着业务增加,集群节点数可能从3节点扩展到了100个节点,这时候发生多节点故障概率大增(例如交换机故障或者机架电源故障),因此我们需要调整将集群故障域的级别从节点上升到机架。

XEDP中故障域的调整是非常灵活的,可以实现从节点故障域上升到机架或者机房等。见下图:

image.png

算法对于多故障域的支持是天然的。在算法中,数据中心、机房、机架、节点、磁盘组成了一颗树,磁盘是叶子节点,其余(数据中心,机房,机架,节点)的组成中间节点。故障域的调整就是在现有故障域的基础上,通过增加或者减少对应中间节点的类型,因此故障域的调整其实就是重画整颗树的过程。

本地集群<——>延展集群

随着业务的再次增加,有些业务需要进行容灾,避免业务宕机,保障业务持续可用的目的考虑,很多企业开始兴建双活数据中心,特别是金融行业。这时候我们需要将故障域从机架上升到数据中心。在多数据中心的基础上,我们可以构建业务双活方案。

XEDP将提供的存储池跨站点双活方案称为延展集群。延展集群将存储池从单个站点扩展到两个站点,存储池中数据副本可以跨站点分布,实现了更高级别的可用性。延展集群可以替代传统共享存储集群或存储镜像集群等解决方案,实现园区或同城的数据中心级双活及灾难恢复。

XEDP分布式存储系统支持将集群内的存储节点放置在不同的数据中心中,确保一个数据对象的多个副本保存在不同地理位置的存储节点上,实现多副本数据高可用。 

延展集群基于多级故障域的跨数据中心分布策略基础上,提供对主副本读取优先级的设置,提供就近读取能力,优化了业务的读取性能。延展集群设置故障域级别为数据中心,并设置两个数据中心级故障域,两个数据站点和一个仲裁站点,仲裁站点用于故障场景的决策判断并防止脑裂,数据在两个数据中心站点以副本的形式分布。

image.png

XEDP支持从本地的集群扩展到延展集群,见下图:

image.png

图片

随着业务的调整,前些年构建的延展集群方案需要调整为本地多副本策略(存储集群承载的应用的关键性下降,可能需要降低保护级别,这样可以节省广域网带宽和备份数据中心的开销)。XEDP同样支持延展集群在线动态调整为本地集群,可大可小,体现软件定义存储之美。

总结

以上介绍数据安全策略的需求,可以简单总结如下:

  1. 动态调整副本数;

  2. 在线扩容和缩容(调整节点数);

  3. 支持异构(磁盘数量和容量可以不同);

  4. 在线(上)延展和(下)延展;

XEDP依赖的分布式路由算法对上述场景的支持是非常灵活且自然的。它的灵活性体现在其能够根据业务的需要进行实时的副本方案以及故障域的调整。

XSKY星辰天合这些特性,在很多客户的生产环境得到验证:

  1. 某客户容量突然爆发式增长,但新采购的服务器由于疫情原因迟迟没有到货。客户被迫把数据保护级别从3副本临时降级为2副本,保证了业务的正常运行。等新服务器加入到货扩容后,重新调整为3副本。整个过程,业务没有受到影响。

  2. 某客户特别重视容灾,初期存储集群直接采用延展集群双活数据中心方案。但后来疫情来临,公司的业务有所调整,客户希望压缩成本,不再租备份数据中心,希望把延展集群在线降级为普通集群。经过XSKY星辰天合的指导,客户平滑实现了降级,业务没有受到影响。

业务很多的软件定义存储(SDS)公司,都是把扩容做得很完善,毕竟这样可以多卖存储。但对于缩容,减少规模这样的事情,支持程度很差,有些干脆就不支持,觉得这些付出没有回报。但XSKY星辰天合,真正从客户需求出发,把减少节点,减少副本数,甚至减少一个数据中心这样的需求都完美支持了,而且支持在线调整,业务无需停机,得到客户的高度赞扬。