Terrace 路由

Terrace 路由可以显著减少大型群集数据库上的消息缓冲。以下几部分介绍 Vertica 如何在企业模式数据库和 Eon 模式数据库上实现 Terrace 路由。

企业模式下的 Terrace 路由

企业模式数据库上的 Terrace 路由是通过用来定义基于机架的拓扑的容错组实现的。在禁用 Terrace 路由的大型群集中,Vertica 群集中的节点形成一个完全互连的网络,其中每个非依赖(控制)节点通过与所有其他非依赖节点(无论是在其自己的机架/容错组内部还是外部)的连接在数据库群集中发送消息:

在这种情况下,大型 Vertica 群集可能需要每个节点上有许多连接,其中每个连接都会产生自己的网络缓冲要求。每个节点所需的缓冲区总数按如下公式计算:

(numRacks * numRackNodes) - 1

在如上所示每个机架 4 个节点的双机架群集中,求解结果为每个节点 7 个缓冲区。

启用 Terrace 路由后,可以显著减少大型群集网络缓冲。机架/容错组中的每第 n 个节点与所有其他容错组的相应第 n 个节点配对。例如,在启用 Terrace 路由时,同一个双机架群集中的消息传递现在按如下方式实现:

因此,来自机架 A (A2) 上节点 2 的消息将发送到机架 A 上的所有其他节点;然后,每个机架 A 节点将消息传送到机架 B 上的相应节点 — A1 到 B1,A2 到 B2,依此类推。

在启用 Terrace 路由时,给定机架的每个节点都避免了为所有其他节点维护消息缓冲区的开销。相反,每个节点只负责维护与以下节点的连接:

  • 同一机架的所有其他节点 ( numRackNodes - 1)

  • 每个其他机架上的一个节点 ( numRacks - 1)

因此,每个节点所需的消息缓冲区总数按如下公式计算:

(numRackNodes-1) + (numRacks-1)

在如上所示具有 4 个节点的双机架群集中,求解结果为每个节点 4 个缓冲区。

Terrace 路由以时间(机架内跃点数)换取空间(网络消息缓冲区数)。通过向群集中添加额外的机架和节点来扩展群集时,支持这种权衡的论点变得越来越有说服力:

在这个每个机架 4 个节点的三机架群集中,如果没有 Terrace 路由,每个节点所需的缓冲区数量为 11。如果有 Terrace 路由,每个节点的缓冲区数量为 5。通过向群集中添加机架和向每个机架中添加节点来扩展群集时,缓冲区要求之间的差异也会扩大。例如,给定一个每个机架 16 个节点的六机架群集,如果没有 Terrace 路由,每个节点所需的缓冲区数量为 95;如果有 Terrace 路由,则为 20。

启用 Terrace 路由

Terrace 路由取决于容错组定义,这些定义描述围绕机架及其成员节点组织的群集网络拓扑。如前所述,启用 Terrace 路由时,Vertica 首先在机架/容错组内分发数据;然后使用第 n 个节点到第n 个节点的映射将此数据转发到数据库群集中的所有其他机架。

您可以通过 TerraceRoutingFactor 配置参数为任何实现基于机架的容错组的企业模式大型群集启用(或禁用)Terrace 路由。要启用 Terrace 路由,请按如下方式设置此参数:

其中:

  • numRackNodes:机架中的节点数

  • numRacks:群集中的机架数

例如:

默认情况下,TerraceRoutingFactor 设置为 2,这通常可以确保为任何实现基于机架的容错组的企业模式大型群集启用 Terrace 路由。当群集包含 64 个或更多节点时,或者如果查询需要过多的缓冲空间,Vertica 建议启用 Terrace 路由。

要禁用 Terrace 路由,请将 TerraceRoutingFactor 设置为一个大整数,例如 1000:

=> ALTER DATABASE DEFAULT SET TerraceRoutingFactor = 1000;

Eon 模式下的 Terrace 路由

与企业模式一样,Terrace 路由在 Eon 模式数据库上默认处于启用状态,并通过容错组实现。但是,您不会为 Eon 模式数据库创建容错组。相反,Vertica 会自动在大型群集数据库上创建容错组;这些容错组围绕每个子群集的控制节点及其依赖项进行配置。这些容错组由 Vertica 内部管理,无法供用户访问。