一、背景

开务数据库是一款云原生分布式数据库,基于分布式架构特点其存储数据默认有 3 份,别离存储在各节点下的不同 Store 中。在多节点多 Store 的状况下,如何抉择存储数据的 Store 就显得尤为重要。

开务数据库中通过特定算法,依据 Store 的存储容量、磁盘介质以及每个 Store 的 QPS 等综合因素,计算出最佳的 Store 以实现数据存储,咱们把这个过程称之为 Store 的 Rebalance。然而此过程从集群初始化就继续地进行,因而将会带来 2 大问题:

1)在数据量很大的状况下,如果从初始即进行 Store Rebalance,那么就会重大影响性能;

2)如果存放数据的磁盘呈现问题则需及时更换,那就意味着需暂停集群服务,期待更换结束之后能力重启服务。

为此,开务数据库研发了 Store 的禁用启用性能,接下来为大家具体介绍具体的设计思路。

二、设计思路

针对第 1 个问题,咱们须要通过特定伎俩,在特定工夫管制 Store 的行为,使它参加或不参加 Rebalance。这样即可实现在业务忙碌的场景下,禁止 Store 参加失常的 Rebalance,防止性能耗费;等到闲暇时段,再启用 Store 进行 Rebalance。

至于第 2 个问题,咱们仅需禁用呈现问题的 Store,再将该 Store 上的数据全副迁徙到其余可用的 Store 上,从而实现不停机磁盘更换操作。

三、总体设计

Store 的禁用启用性能次要作用于 Rebalance,因为 Rebalance 是在 Store 级别上的,所以该需要能够转换为退出节点后,不会将集群中其余 Store 上的数据正本迁徙到退出集群节点上挂载的 Store 中。

在启动命令上给挂载 Store 加一个属性 STATE(DISABLE/ENABLE)用来示意该 Store 此时的状态;而后在进行 Rebalance 时将属性 STATE 为 DISABLE 的 Store 全副过滤掉,仅留下 ENABLE 的 Store 进行 Rebalance。这样的做法能够防止 STATE 为 DISABLE 的 Store 参加 Rebalance 。

在用户闲暇的时间段,通过 Update 命令将该 Store 的 STATE 变为 ENABLE,使得该 Store 重新加入 Rebalance,这样即可实现管制 Store 的 Rebalance。此外如果想要实现更换磁盘操作,咱们须要将该 Store 上的正本全副都转移到其余 Store 上,转移结束后更换该 Store 则不会对业务造成影响,如此便可实现禁用和启用 Store。

四、逻辑架构

执行命令启动节点时,通过命令解析获取 STATE 值,将解析到的 STATE 值保留在存储层,之后依据存储层记录状态实现 Store 的初始化,使得该 Store 中蕴含命令中的 STATE 属性。

正本层在进行 Rebalance 时,会从现有的 Store 中依据抉择一批 Store 组成一个 List,在这里需减少一个束缚:过滤掉 STATE 值为 DISABLE 的 Store,即可获取到由用户管制的 List,如此便可实现手动管制 Rebalance。

在执行 Update 命令时,依据 STATE 值来实现存储层初始化的 STATE 值批改,批改的值为 Update 命令中解析进去的 STATE 值。这样即可扭转 Store 的 STATE 状态,之后通过节点之间的通信形式来播送到其余的 Store,使得其余的 Store 获取到该节点最新的 STATE 值。

正本层因为该 Store 的 STATE 值为 ENABLE,所以不会受到新加束缚限度,从而使得该 Store 能够重新加入 Rebalance 的 List。至此,即可实现由用户管制在特定工夫实现特定 Store 的 Rebalance。将 STATE 值为 DISABLE 的 Store 依照节点服役的逻辑来进行配置,转移走该 Store 上的所有正本,即可实现磁盘更换的操作。

五、性能介绍

Store 的禁用启用性能在启动数据库集群时,须要在启动命令中增加"--STATE"参数来管制该节点 Store 的初始化状态。如果是 DISABLE,那么该 Store 从刚开始就不会参加 Rebalance。

在集群运行过程中,咱们也能够应用"Store STATE"的命令来随时批改特定的 Store 状态。批改胜利之后,该 Store 即可参加或不参加 Rebalance。

六、总结回顾

开务数据库为了晋升数据多备份性能,实现不停机更换磁盘操作,设计开发了 Store 的禁用启用性能。通过批改 Store 的状态来管制该 Store 是否参加 Rebalance,从而解决上述 2 大问题,丰盛了分布式数据库的应用场景,大幅晋升可用性。