系统扩容概述

系统扩容概述

用户可以最小化停机时间,通过增加节点实例和节点主机来扩容Greenplum数据库。

随着收集额外数据并且现有数据的定期增长,数据仓库通常会随着时间的推移而不断增长。 有时,有必要增加数据库能力来联合不同的数据仓库到一个数据库中。 数据仓库也可能需要额外的计算能力(CPU)来适应新增加的分析项目。 在系统被初始定义时就留出增长的空间是很好的,但是即便用户预期到了高增长率,提前太多在资源上投资通常也不明智。 因此,用户应该寄望于定期地执行一次数据库扩容项目。

当用户扩容数据库时,会期待如下特性:
  • 可伸缩的容量和性能。当用户向一个Greenplum数据库增加资源时,得到的容量和性能就好像该系统一开始就用增加后的资源实现一样。
  • 扩容期间不中断服务。常规负载(计划中的或者临时安排的)不会被中断。
  • 事务一致性。
  • 容错。在扩容期间,标准的容错机制(例如Segment镜像)保持活动、一致并且有效。
  • 复制和灾难恢复。在扩容期间,任何现有的复制机制都继续发挥作用。在失败或者灾难事件中需要的恢复机制也保持有效。
  • 处理透明。扩容处理利用了标准的Greenplum数据库机制,因此管理员能够诊断并且排查任何问题。
  • 可配置的处理。扩容可能会是一个长时间运行的处理,但它可以变成按计划执行的一系列操作。扩容Schema的表允许管理员指定表被重新分布的优先级,而且扩容活动可以被暂停并且继续。

扩容项目的规划和实体层面比扩容数据库本身更重要。 需要一个多学科团队来规划和执行项目。 对于内部部署安装,必须为新服务器获取和准备空间。 必须指定,获取,安装,连接,配置和测试服务器。 对于云部署,也应该做类似的计划。 规划新的硬件平台描述了部署新硬件的常规考虑。

在准备好新的硬件平台并且设置好它们的网络之后,配置它们的操作系统并且使用Greenplum的工具运行性能测试。 Greenplum数据库软件发布包括一些工具,这些工具有助于在开始扩容的软件阶段之前对新的服务器进行测试和拷机。 为Greenplum数据库准备新主机的步骤请见准备并增加节点

一旦新服务器被安装并且测试,Greenplum数据库扩容处理的软件阶段就开始了。 软件阶段被设计为尽量少被打断、事务一致、可靠并且灵活。
  • 扩容过程的软件阶段的第一步是准备Greenplum数据库系统: 添加新节点的主机并初始化新的节点实例。 此阶段可以安排在低活动期间进行,以避免中断正在进行的业务运营。 在初始化过程中,执行以下任务:
    • Greenplum数据库软件已被安装。
    • 在新的Segment主机的新节点实例上创建了数据库和数据库对象。
    • gpexpand schema在postgres数据库里被创建。 可以使用schema里的表和视图来监控和管理扩容。

    在系统被更新后,新节点主机上的新节点实例已经可以使用了。

    • 新节点立即生效并参与到新查询和数据加载里。 但是现有数据会发生倾斜。 它们集中在原节点上并且需要根据新节点总量做重分布。
    • 因为有些表的数据已经倾斜了,所以部分查询性能会下降,因为可能需要更多的Motion操作了。
  • 软件阶段的最后一步就是重新分布表数据。 使用gpexpand schema中的扩容控制表作为指导,重新分配表。 对每一个表:
    • gpexand工具基于分布策略在所有新老机器上重新分布表数据。
    • 扩容控制表中的表状态会被更新。
    • 在数据重分布之后,查询优化器会基于不倾斜的数据创建更高效的查询计划。

    当所有表都完成了重分布,扩容也就完成了。

Important: gprestore工具不能恢复在扩容之前使用gpbackup工具备份的数据。 所以在扩容完成之后立即备份你的数据。

重新分布数据是一个长时间运行的处理,它会创建大量的网络和磁盘活动。 可能需要数天时间来重新分布某些非常大型的数据库。 为了最小化这些活动对业务操作的影响,系统管理员可以随意或者根据一个预定好的计划暂停并且继续扩容活动。 数据集也可以被定义优先级,这样关键的应用可以从扩容中首先获益。

在一种典型的操作中,在完整的扩容处理过程中,用户需要用不同的选项运行gpexpand工具四次。

  1. 创建扩容输入文件
    gpexpand -f hosts_file
  2. 初始化Segment并且创建扩容schema
    gpexpand -i input_file

    gpexpand会创建一个数据目录、从现有的数据库复制表到新的Segment上并且为扩容方案中的每个表捕捉元数据用于状态跟踪。 在这个处理完成后,扩容操作会被提交并且不可撤回。

  3. 重新分布表数据
    gpexpand -d duration

    在初始化时,gpexpand增加并初始化新节点实例。 必须运行gpexpand在新增节点实例上重分布数据来完成系统扩容。 取决于系统的大小和规模,重新分布可能在一个单一会话中经过数个利用率较低的小时才会完成,或者用户可以把该处理划分成一个长时段上的批处理。 每个表或分区在扩容期间是无法进行读写操作的。 由于每一个表都会被重新分布在新的Segment上,数据库性能应该会逐步提升直到超过扩容前的性能水平。

    在需要多个重新分布会话的大型系统中,可能需要多次运行gpexpand来完成扩容。 gpexpand可以从显式的表重新分布排名获益,参考规划表的重新分布

    用户可以在初始化期间访问Greenplum数据库,但是在严重依赖表的哈希分布的系统上,它们可能会出现性能下降。 尽管用户可能会遇到较慢的响应时间,但ETL作业,用户查询和报告等正常操作仍可继续。

  4. 移除扩容schema:
    gpexpand -c

有关gpexpand工具和其他用于系统扩容的工具的信息可见Greenplum数据库工具指南