Vertica 集群扩展和缩减支持

Vertica 数据库具有弹性扩展/缩减功能,但目前 Trove 的 Vertica 客体代理不支持这些功能。

Launchpad 蓝图:https://blueprints.launchpad.net/trove/+spec/vertica-grow-shrink-cluster

问题描述

目前 Vertica 客体代理并未利用 Vertica 底层弹性能力。这将允许用户在需要容纳更多数据或提高查询性能时扩展集群,而缩减规模有助于避免过度配置相关的成本。

提议的变更

由于 Vertica 从一开始就被设计为集群系统,因此与其他数据存储相比,添加和删除节点相对简单。

配置

将为 vertica 添加一个最小 k-safety 配置选项,允许操作员决定他们期望的容错级别。

数据库

公共 API

以下公共 API 调用将提供给 Vertica 数据存储。

  • 集群扩展 - 现有的调用负载不会更改。实现集群扩展功能会将新实例添加到现有集群。

  • 集群缩减 - 现有的调用负载不会更改。实现集群缩减功能将允许用户从其现有集群中删除实例。

公共 API 安全

Python API

CLI (python-troveclient)

支持以下现有的 CLI 调用。

  • cluster-grow

  • cluster-shrink

无需进行任何更改即可完成这些操作。

内部 API

无。

Guest Agent

为了实现更高效的扩展和缩减,将在 Vertica 上启用本地数据分段 1。 这会在节点上创建额外的本地逻辑数据段,以便更轻松地在节点之间传输数据。本地分段的缺点是对于包含大量投影的表来说效率较低 2

扩展

扩展集群涉及两个主要步骤 3

首先,必须将新的“主机”添加到集群,在 trove 的情况下,这意味着一个新的实例。然后调用 update_vertica 脚本,类似于 install_vertica 脚本,该脚本处理 vertica 二进制文件的安装。

其次,必须将主机作为节点添加到数据库。调用 adminTools 实用程序,并使用 db_add_node 命令将主机注册到数据库。

缩减

从 Vertica 集群中删除节点与添加节点相反,并额外检查以确保维持系统的最小 k-safety 级别。

如果用户尝试删除一个节点,而这将导致 k-safety 级别低于配置级别,则会抛出错误。

在 k-safety 检查之后,从数据库中删除主机 4。与扩展类似,将使用 db_remove_node 命令调用 adminTools 实用程序。

然后,使用相同的 update_vertica 脚本,但使用 –remove-hosts 选项,从集群中删除要删除的主机。

K-safety

Vertica 定义了三个 K-safety 级别,用于节点数 K,这些节点在允许集群继续运行的情况下可能发生故障:K=0 用于节点数为 1 或 2 的集群,K=1 用于节点数为 3 或 4 的集群,K=2 用于 5 个或更多节点 5 6

与其阻止用户删除会导致 k-safety 值降低的节点,不如由操作员定义她愿意接受的最低安全级别。例如,在某些情况下,过度配置集群相关的成本可能超过数据不可用的风险。

备选方案

Trove 可以强制执行最低 k-safety 级别以确保集群的完整性,但这可能会过于严格。

实现

负责人

atomic77

里程碑

Mitaka-3

工作项

  • 扩展集群

  • 缩减集群

升级影响

无。

依赖项

测试

将根据需要添加或修改集成测试,以测试使用新的 int-test 框架进行的扩展/缩减。

文档影响

应更新文档,以反映 Vertica 集群支持扩展和缩减这一事实。

Dashboard 影响 (UX)

UI 将进行一些小的更改,以支持集群的扩展和缩减按钮。

附录