扩容概述
集群扩容概述¶
用户可以最小化停机时间,通过增加节点实例和节点主机来扩容SeaboxMPP数据库。
随着收集额外数据并且现有数据的定期增长,数据仓库通常会随着时间的推移而不断增长。 有时,有必要增加数据库能力来联合不同的数据仓库到一个数据库 中。 数据仓库也可能需要额外的计算能力(CPU)来适应新增加的分析项目。 在系统被初始定义时就留出增长的空间是很好的,但是即便用户预期到了高增长率,提前太多在资源上投资通常也不明智。 因此,用户应该寄望于定期地执行一次数据库扩容项目。
SeaboxMPP数据库支持多个对等的coordinator的部署,因此,扩容工具还支持对coordinator实例的扩容,即增加或减少集群中coordinator的数量。
当用户扩容数据库时,会期待如下特性:
-
可伸缩的容量和性能。当用户向一个SeaboxMPP数据库增加资源时,得到的容量和性能就好像该系统一开始就增加资源实现一样。
-
扩容期间不中断服务。常规负载(计划中的或者临时安排的)不会被中断。
-
事务一致性。
-
容错。在扩容期间,标准的容错机制(例如executor镜像)保持活动、一致并且有效。
-
复制和灾难恢复。在扩容期间,任何现有的复制机制都继续发挥作用。在失败或者灾难事件中需要的恢复机制也保持有效。
-
处理透明。扩容处理利用了标准的SeaboxMPP数据库机制,因此管理员能够诊断并且排查任何问题。
-
可配置的处理。扩容可能会是一个长时间运行的处理,但它可以变成按计划执行的一系列操作。扩容Schema的表允许管理员指定表被重新分布的优先级,而且扩容活动可以被暂停并且继续。
扩容项目的规划和实体层面比扩容数据库本身更重要。 需要一个多学科团队来规划和执行项目。 对于内部部署安装,必须为新服务器获取和准备空间。 必须指定,获取,安装,连接,配置和测试服务器。 对于云部署,也应该做类似的计划。 规划新的硬件平台描述了部署新硬件的常规考虑。
在准备好新的硬件平台并且设置好它们的网络之后,配置它们的操作系统并且使用SeaboxMPP的工具运行性能测试。 SeaboxMPP数据库软件发布包括一些工具,这些工具有助于在开始扩容的软件阶段之前对新的服务器进行测试和拷机。 为SeaboxMPP数据库准备新主机的步骤请见准备并增加节点。
一旦新服务器被安装并且测试,SeaboxMPP数据库扩容处理的软件阶段就开始了。 软件阶段被设计为尽量少被打断、事务一致、可靠并且灵活。
-
扩容过程的软件阶段的第一步是准备SeaboxMPP数据库系统: 添加新节点的主机并初始化新的节点实例。 此阶段可以安排在低活动期间进行,以避免中断正在进行的业务运营。 在初始化过程中,执行以下任务:
-
SeaboxMPP数据库软件已被安装。
-
在新的executor主机的新节点实例上创建了数据库和数据库对象。
-
scexpand schema在seaboxsql数据库里被创建。 可以使用schema里的表和视图来监控和管理扩容。
在系统被更新后,新节点主机上的新节点实例已经可以使用了。
-
新节点立即生效并参与到新查询和数据加载里。 但是现有数据会发生倾斜。 它们集中在原节点上并且需要根据新节点总量做重分布。
-
因为有些表的数据已经倾斜了,所以部分查询性能会下降,因为可能需要更多的Motion操作了。
-
-
软件阶段的最后一步就是重新分布表数据。 使用scexpand schema中的扩容控制表作为指导,重新分配表。 对每一个表:
-
scexpand
工具基于分布策略在所有新老机器上重新分布表数据。 -
扩容控制表中的表状态会被更新。
-
在数据重分布之后,查询优化器会基于不倾斜的数据创建更高效的查询计划。
当所有表都完成了重分布,扩容也就完成了。
-
重要:
seabox
工具不能恢复在扩容之前使用seabox
工具备份的数据。因此,建议扩容完成后立即备份数据。
重新分布数据是一个长时间运行的处理,它会创建大量的网络和磁盘活动。 可能需要数天时间来重新分布某些非常大型的数据库。 为了最小化这些活动对业务操作的影响,系统管理员可以随意或者根据一个预定好的计划暂停并且继续扩容活动。 数据集也可以被定义优先级,这样关键的应用可以从扩容中首先获益。
在一种典型的操作中,在完整的扩容处理过程中,用户需要用不同的选项运行scexpand
工具四次。
-
创建扩容输入文件:
scexpand -f hosts_file
-
初始化executor并且创建扩容schema:
scexpand -i input_file
scexpand
会创建一个数据目录、从现有的数据库复制表到新的executor上并且为扩容方案中的每个表捕捉元数据用于状态跟踪。 在这个处理完成后,扩容操作会被提交并且不可撤回。 input_file文件中可以写入coordinator的扩展信息,这样,就可以针对coordinator进行扩容了。 -
重新分布表数据:
scexpand -d duration
在初始化时,
scexpand
增加并初始化新节点实例。 必须运行scexpand
在新增节点实例上重分布数据来完成系统扩容。 取决于系统的大小和规模,重新分布可能在一个单一会话中经过数个利用率较低的小时才会完成,或者用户可以把该处理划分成一个长时段上的批处理。 每个表或分区在扩容期间是无法进行读写操作的。 由于每一个表都会被重新分布在新的executor上,数据库性能应该会逐步提升直到超过扩容前的性能水平。在需要多个重新分布会话的大型系统中,可能需要多次运行
scexpand
来完成扩容。scexpand
可以从显式的表重新分布排名获益,参考规划表的重新分布。用户可以在初始化期间访问SeaboxMPP数据库,但是在严重依赖表的哈希分布的系统上,它们可能会出现性能下降。 尽管用户可能会遇到较慢的响应时间,但ETL作业,用户查询和报告等正常操作仍可继续。
扩容的每一步完成后,scexpand都会在scdcs中进行对应的记录。如果中途因为某种原因而终止,只要重新运行scexpand(可不必再添加参数,必要的参数已经持久化至scdcs中),则scexpand从scdcs中读取对应的记录,跳过那些不需要再次执行的步骤,从中间的某一个步骤重新开始执行。
扩容的类型也会持久化至scdcs中。类型包括:扩容,缩容,coordinator扩容,coordinator缩容,逻辑集群扩容,逻辑集群缩容,通过扩容创建新的逻辑集群,缩容逻辑集群残留实例。
当扩容类型和必要的参数持久化至scdcs之后,重新开始执行时,这些必要的参数不可以再通过命令行参数进行改变,直至本次扩缩容结束,重新开始新一轮扩缩容才可以改变。
-
移除扩容schema:
执行这个命令后,会删除scdcs中所有关于扩缩容的记录,以及系统表的记录。删除后,可开启一个新的扩缩容流程。管理员须保证扩缩容已完全结束后才可以删除。scexpand -c
SeaboxMPP数据库为提升易用性,也提供了集成化命令。用户在编辑完扩容文件之后,可以直接使用如下命令:
``` bash
seabox reconstruct expand -i expand_file
```
这个命令会集成上述扩容步骤,从“初始化executor并且创建扩容schema”开始,如果这一步完成并成功,则直接进入下一步骤,直至所有完成。
有关scexpand
工具和其他用于系统扩容的工具的信息可见SeaboxMPP数据库工具指南。