共计 1849 个字符,预计需要花费 5 分钟才能阅读完成。
一、背景
开务数据库是一款云原生分布式数据库,基于分布式架构特点其存储数据默认有 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 大问题,丰盛了分布式数据库的应用场景,大幅晋升可用性。