暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

扩容时间窗口不够?福音来了--数据重分布过程控制

原创 灵魂摆渡者 2023-05-16
342

    现在社会的信息化高度发达,随着可移动电子终端、人口增多以及物联网的到来等因素,数据迅速膨胀,传统的数据库很难存储与处理庞大的各种数据。1984年以来,数据库行业内以Postgres为主推出了MPP(Massive Parallel Processing)技术,MPP是一种并行化的模型,是通过管理协调多个处理单元来运行一个程序的不同部分并最终完成整个程序的计算模式,而每个处理单元都有自己相对独立的运行环境和资源。MPP技术用到数据库中就是每个处理单元就是一个关系数据库,通过大规模并行的关系数据库的协同来提升数据库能够处理的数据的量级和性能,示意图如下:

    MPP数据库主要的特性之一就是其灵活的扩展性,业务中的MPP数据库规模节点数并不是一成不变的,往往随着业务数据量增加或者承载的业务太多都会导致性能下降,一旦性能降低到容忍水平线以下时,就需对MPP数据库进行扩容,这里讲的扩容不是单个计算单元资源的扩容,而是MPP常用的横向扩容技术,即增加MPP的计算节点数。那么随之而来从运维角度就要考虑扩容对在线系统的影响程度,专业术语称之为RTO(Recovery Time Objective),它是指灾难发生后从系统停服开始,到系统恢复服务之间的时间段,RTO越短代表停服时间越短,对用户影响越小。所以RTO也常常用来评估一个产品对容错恢复指标的重要依据。


    MPP数据库中数据基本都是按照某种规则进行分布式存储,比如HASH、随机分布(RANDOM)分布方式,在需要对MPP数据库进行扩容时,往往需要把现有集群中各个节点存放的数据进行重分布,最终达到扩容后各个计算节点的数据仍旧保持均匀,降低MPP数据库的木桶效应带来的影响。假设有3个节点的MPP数据库扩容到5个节点,其数据重分布示意图如下。


    从图中可以看出数据需要把三个节点的数据重新打散到五个节点,在数据量非常大的情况下,是不是消耗时间特别长(RTO很长)?如果MPP数据库不能在线扩容或者说扩容重分布过程中占用大量资源,比如网络带宽、IO资源,是不是导致业务暂停或者是业务性能收到严重冲击?怎么办?扩容必须做,业务又不受影响,写到这里问题点就非常突出了,就是如何解决MPP扩容(还有缩容)过程中对业务的影响。

     引入主题,GBase 8a MPP数据库在设计扩容重分布能力的时候就考虑到了这个问题,设计出扩容重分布过程可控的功能,该功能可使用户在线扩容,且扩容过程不再受时间窗口的限制,随时可以暂停扩容数据重分布,可以断点续传继续扩容过程。业务忙就暂停扩容,空闲了继续扩容,重分布完成之前,业务不受任何影响,下面就具体介绍GBase 8a MPP数据库的数据重分布可管理能力。 数据重分布支持图形化及SQL命令方式进行,这里仅仅对命令方式进行说明。数据重分布命令是rebalance,此命令可实现以下四种重点能力:

l  支持实例级、库级、表级的数据重分布,用户可以根据不同的场景选择合适的分布级别;

l  对于需要大批量表的数据搬移,还提供了分布优先级和并发分布数量来进行更细粒度的控制;

l  任务下发到后台后即返回结果,数据库提供执行过程信息的查询,可以按数据表查询开始分布和结束分布的时间、分布进度、分布优先级等信息,用户可以通过访问 gclusterdb.rebalancing_status 进行查看;

l  提供取消和暂停功能,对后台任务进行控制。

    数据重分布的粒度是表,表在数据重分布时有五种状态(STARTING、 RUNNING、 COMPLETED、PAUSED、 CANCELED),根据不同的用户操作,状态之间会发生转变,状态之间的可转换关系图如下:


状态转换说明:

v  表处于STARTING状态时,Coordinator后台线程开始执行表的Rebalance操作,表状态转换成RUNNING。

v  表处于PAUSED状态时,对这个表执行Continue Rebalance 操作,表状态转换成RUNNING。

v  表处于RUNNING 状态时,Coordinator后台线程执行表的Rebalance操作失败,表状态转换成 STARTING

v  表处于RUNNING状态时,Coordinator后台线程完成了表的Rebalance操作,表状态转换成COMPLETED。

下面分别对数据重分布不同状态转换的命令进行介绍,主要包括Rebalance、Pause、Continue、Cancel四个命令。

Rebalance命令

Rebalance 默认往最新的 distribution 上分布,也可以通过 to distributionid 语法往指定拓扑上分布。在进行分布之前,需要确gclusterdb.rebalancing_status 中没有该表的分布记录,如果有可以使用 delete from 语句删除记录,否则会影响分布命令的执行。语法格式如下:

rebalance <rebalance_options> [to distribution_id]

rebalance_options:

| Table [[vc_name.]database_name.]table_name

| Database [vc_name.]database_name

| instance

 使用示例:

实例级重分布命令


数据库级重分布命令

表级重分布命令

Pause命令

如果正在进行的 rebalance 操作的对象处于处于 STARTING 或者 RUNNING 状态,可以使用 pause rebalance table 命令暂停 rebalance 操作。 如果 pause rebalance table命令返回影响行数为 1,则该任务暂停成功;如果返回影响行数为 0,则该任务暂停失败。Pause语法格式如下:

pause rebalance <rebalance_options>
rebalance_options
:
Table
[[vc_name.]database_name.]table_name
| Database [vc_name.]database_name
| instance

使用示例:

实例级暂停


数据库级暂停


表级暂停


Continue命令

如果rebalance对象处于PAUSED状态,可以使用continue rebalance命令使其继续rebalanceContinue的语法格式如下:

continue rebalance <rebalance_options>
rebalance_options
:
| Table [[vc_name.]database_name.]table_name
| Database [vc_name.]database_name
| instance

使用示例:

实例级继续


库级继续


表级继续


Cancel命令

如果rebalance对象处于STARTING、RUNNING、PAUSED状态,可以使用cancelrebalance命令终止rebalance操作。如果cancel rebalance命令返回影响行数为 1,则rebalance 操作终止成功;如果返回影响行数为 0,则终止操作失败。Cancel命令的语法格式如下:

cancel rebalance <rebalance_options>
rebalance_options
:
| Table [[vc_name.]database_name.]table_name

| Database [vc_name.]database_name
| instance

使用示例:

实例级取消


库级取消


表级取消


    利用上述命令,GBase 8a MPP数据库实现了扩容/缩容过程数据重分布过程的可控制。但GBase 8a MPP的扩容/缩容数据搬迁可不仅仅是重分布这一种方式,还有另外一种快速方式—直接搬数据分片,但这种方式使用有点局限性,后续抽时间再聊这个主题,感谢读者对GBase的支持。

最后修改时间:2023-05-17 09:29:20
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论