系统扩展概述

系统扩展概述

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

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

一个扩展项目的计划和物理形态是一项比扩展数据库本身更加重大的工作。将需要一个多学科团队来规划和执行该项目。对于本地安装,必须为新的服务器获得并且准备好空间。必须先确定好这些服务器的规格,然后获得并且安装它们,还要用线缆把它们连接起来,最后还要进行配置和测试。对于云部署,也应该做类似的计划。规划新的硬件平台描述了部署新硬件的一般考虑。

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

一旦新服务器被安装并且测试,Greenplum数据库扩展处理的软件阶段就开始了。软件阶段被设计为尽量少被打断、事务一致、可靠并且灵活。
  • 在为扩展处理初始化新的Segment主机并且准备系统时,会有一段短暂的停机时间。这段停机时间可以被安排在一段低活动量的时期发生,这样可以避免打扰正在进行的业务操作。在初始化处理期间,会执行下列任务:
    • Greenplum数据库软件已被安装。
    • 在新的Segment主机上创建了数据库和数据库对象。
    • 在Master数据库中创建了一个扩展方案来控制扩展处理。
    • 每一个表的分布策略被改成了DISTRIBUTED RANDOMLY
  • 系统被重启并且应用继续进行。
    • 新的Segment立即可用并且立即参与到新的查询和数据装载中。不过,现有的数据是倾斜的。因为现有数据集中在原有的Segment上,并且必须被重新分布在当前的所有主要Segment上。
    • 因为表现在有一种随机分布策略,优化器会创建不依赖于分布键的查询计划。一些查询的效率会不那么好,因为需要更多的数据移动操作符。
  • 通过使用扩展控制表作为一个指南,表和分区被重新分布。对于每一个表:
    • 发出一个ALTER TABLE语句把分布策略改回到原始的策略。这会导致一次自动的数据重新分布操作,它会把数据按照原始的分布策略散布到所有的服务器上,包括旧的服务器和新的服务器。
    • 表的状态会在扩展控制表中被更新。
    • 通过将分布键包括在规划中,查询优化器能创建更有效的执行计划。
  • 当所有的表都被重新分布完后,扩展也就完成了。

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

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

  1. 创建一个扩展输入文件
    gpexpand -f hosts_file
  2. 初始化Segment并且创建扩展方案
    gpexpand -i input_file -D database_name

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

  3. 要重新分布表
    gpexpand -d duration

    在初始化时, gpexpand在所有现有数据库中的表上取消哈希分布策略(分区表的父表除外)并且将所有的表的分布策略设置为随机分布。

    要完成系统扩展,必须运行gpexpand在新增加的Segment之间重新分布数据表。取决于系统的尺寸和尺度,重新分布可能在一个单一会话中经过数个利用率较低的小时才会完成,或者用户可以把该处理划分成一个长时段上的批处理。在重新分布期间,每一个表或者分区对读或者写操作都不可用。由于每一个表都会被重新分布在新的Segment上,数据库性能应该会逐步提升直到超过扩展前的性能水平。

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

    在初始化完成并且系统重新上线后,用户可以访问Greenplum数据库,但是他们可能在严重依赖于表哈希分布的系统上体验到性能下降。ETL工作、用户查询以及报表等普通操作可以继续,但用户可能会体验到较慢的响应时间。

    当一个表使用的是一种随机分布策略时,Greenplum数据库无法强制唯一约束(例如PRIMARY KEY)。这可能影响用户的ETL和装载处理直到表重新分布完成,因为重复行不会导致发出约束违背错误。

  4. 要移除扩展方案:
    gpexpand -c

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