这是本节的多页打印视图。
点击此处打印.
返回本页常规视图.
企业模式概念
在企业模式 Vertica 数据库中,物理体系结构设计为将数据移动到尽可能靠近计算资源的位置。这种体系结构不同于在 Eon 模式概念中描述的以 Eon 模式运行的群集。
企业模式数据库中的数据分布在数据库中的各节点中。理想情况下,数据均匀分布,以确保每个节点具有相等数量的分析工作负载。
混合数据存储
在企业模式下运行时,Vertica 将数据库中的数据存储在读取优化存储 (ROS) 容器中。ROS 数据经过分段、排序和压缩,以实现高度优化。为了避免数据在许多小型 ROS 容器之间碎片化,Vertica 会定期执行合并操作,将 ROS 数据合并到更少更大的容器中。
数据冗余
在企业模式下,Vertica 数据库的每个节点都在本地存储和操作数据。如果没有某种形式的冗余,节点丢失将迫使数据库关闭,因为它的某些数据将无法用于查询。
您通常选择让企业模式数据库冗余存储数据,以防止在节点关闭时出现数据丢失和服务中断。有关详细信息,请参阅企业模式数据库中的 K-safety。
1 - 企业模式数据库中的 K-safety
K-safety 设置企业模式数据库群集中的容错能力。值 K 表示复制数据库群集中的数据的次数。这些副本允许其他节点接管任何故障节点的查询处理。
在 Vertica 中,K 值可以为零 (0)、一 (1) 或二 (2)。如果 K-safety 为一 (K=1) 的数据库失去一个节点,该数据库可继续正常运行。其他节点发生故障时,只要群集中至少有一个其他节点拥有故障节点的数据副本,数据库都可以继续运行。将 K-safety 增加到 2 可确保 Vertica 在任何两个节点发生故障时仍可以正常运行。当一个或多个故障节点返回并成功恢复时,它们可以再次参加数据库操作。
注意
如果故障节点的数量超出 K 值,则部分数据可能会变得不可用。在这种情况下,数据库被认为是不安全的,会自动关闭。但是,如果每个数据分段在至少一个正常运行的群集节点上可用,则 Vertica 将继续安全地运行。
K-safety 为 1 的数据库中有最多一半的节点出现故障可能不会导致数据库关闭。只要每个故障节点上的数据在其他活动节点上可用,数据库就继续运行。
注意
如果数据库群集中有一半或更多节点出现故障,数据库会自动关闭,即使数据库中的所有数据都可从副本使用。此行为可防止出现因网络分区而导致的问题。
伙伴实例投影
为了确定 K-safety 值,Vertica 会创建伙伴实例投影,这些投影是分布在数据库节点上的分段投影的副本。(请参阅分段投影和未分段投影。)Vertica 会将包含相同数据的段分布到不同的节点上。这可确保在某个节点下线时,其中的所有数据都能在余下的节点中找到。
K-Safety 示例
上图显示了 K-safety 级别为 1 的五节点群集。每个节点都包含下一个高编号节点中存储的数据的伙伴实例投影(节点 1 包含节点 2 的伙伴实例投影,节点 2 包含节点 3 的伙伴实例投影,依此类推)。如果任何节点发生故障,数据库将继续运行。数据库的性能将下降,因为其中一个节点必须处理自己的工作负载和故障节点的工作负载。
下图显示了节点 2 发生故障的情况。在此情况下,节点 1 将处理节点 2 的工作,因为它含有节点 2 数据的副本。节点 1 也将继续执行自身的处理工作。此时,数据库容错能力会从 1 降至 0,因为再有一个节点故障将导致数据库变得不安全。在此示例中,无论是节点 1 还是节点 3 出现故障,数据库都会变得不安全,因为此时并非所有数据都可用。如果节点 1 发生故障,节点 2 的数据将不再可用。如果节点 3 发生故障,其数据将不再可用,因为节点 2 已关闭,无法使用伙伴实例投影。在这种情况下,节点 1 和节点 3 会被视为关键节点。在 K-safety 级别为 1 的数据库中,包含故障节点伙伴实例投影的节点,以及其伙伴实例投影位于故障节点上的节点,始终会成为关键节点。
节点 2 下线后,如果节点 4 或节点 5 发生故障,数据库仍具有全部可用数据。下图显示了节点 4 发生故障时节点 3 可以使用其伙伴实例投影来补位。在此情况下,如果再有节点发生故障,数据库将关闭,因为群集中的所有节点现在都成为关键节点。此外,如果再有一个节点发生故障,半数或半数以上的节点将关闭,无论所有数据是否可用,都需要 Vertica 自动关闭。
在 K-safety 级别为 2 的数据库中,节点 2 和群集中的任何其他节点之一发生故障时,数据库仍会继续运行。下图显示了群集中的每个节点都包含其前后邻居的伙伴实例投影(例如,节点 1 包含节点 5 和节点 2 的伙伴实例投影)。在此情况下,节点 2 和节点 3 发生故障时,数据库仍会继续运行。此时节点 1 会补位节点 2,而节点 4 会补位节点 3。由于要求群集中有半数或半数以上的节点可用才能使数据库继续运行,因此,如果节点 5 发生故障,群集将无法继续运行,即使节点 1 和节点 4 都具有节点 5 数据的伙伴实例投影。
注意
Vertica 要求群集中一半以上的节点必须始终可用;否则,它会将数据库视为处于不安全状态并将其关闭。因此,在前面的示例中,如果节点 5 发生故障,群集将无法继续运行,即使节点 1 和节点 4 都具有节点 5 数据的伙伴实例投影。
监控 K‑safety
可以访问系统表以监控和记录 Vertica 操作的各个方面。使用
SYSTEM
表可以监控与 K-safety 相关的信息,例如:
2 - 使用投影的高可用性
为确保由三个或更多节点构成的数据库群集的高可用性和恢复能力,Vertica 会:
-
复制未分段的小型投影
-
为已分段的大型投影创建伙伴实例投影。
复制(未分段的投影)
创建投影时,Database Designer 会复制它们,从而在数据库中的所有节点上创建和存储这些投影的副本。
复制可确保:
注意
我们建议您使用 Database Designer 创建物理架构。如果您选择不使用,请确保跨所有数据库节点对所有大型表进行分段,并将小型未分段表投影复制到所有数据库节点上。
下图显示了在三节点群集上复制的两个投影 B 和 C。
伙伴实例投影(分段投影)
Vertica 会创建伙伴实例投影,这些投影是分布在数据库节点上的分段投影的副本(请参阅分段投影)。Vertica 会将包含相同数据的段分布到不同的节点上。这可确保在某个节点下线时,其中的所有数据都能在余下的节点中找到。Vertica 通过使用偏移量将各个段分布到不同的节点上。例如,构成第一个伙伴实例投影 (A_BP1) 的段会与投影 A 偏移一个节点,而第二个伙伴实例投影 (A_BP2) 的段会与投影 A 偏移两个节点。
下图显示了三节点群集中名为 A 的投影及其伙伴实例投影 A_BP1 和 A_BP2 的分段。
下图显示了 Vertica 如何使用偏移量来确保每个节点都有一组完整的投影数据。
结果集的存储方式
Vertica 会在群集中的所有节点上复制表列,以确保高可用性和恢复能力。因此,如果一个节点在
K-Safe 环境中出现故障,数据库会使用其余节点上的重复数据继续运行。一旦故障节点恢复正常,它便会自动查询其他节点,从而恢复缺失的对象和数据。
Vertica 会对数据进行压缩和编码,以大大减少存储空间。它也会尽可能使用编码数据执行操作,以避免解码开销。这种结合了压缩和编码的方法可在优化磁盘空间的同时最大限度地提高查询性能。
Vertica 将表列存储为投影。借此,您可以针对特定的查询和查询集来优化存储的数据。Vertica 提供了两种数据存储方法:
-
建议对大型表(事实表和大型维度表)进行投影分段
-
对其余表建议复制。
3 - 使用容错组的高可用性
使用容错组可减少物理环境中固有的关联故障带来的风险。关联故障是指一个故障导致两个或更多节点发生故障。例如,因为共享资源问题(如断电、网络问题或存储)便可能发生此类故障。
Vertica 可通过在群集上定义容错组将发生关联故障的风险降至最低。然后,Vertica 使用容错组将数据段分布到整个群集中,以便在发生单个故障事件时数据库仍能继续运行。
注意
如果群集布局由单个网络交换机管理,则交换机故障可能会成为单点故障。容错组无法解决单点故障问题。
Vertica 支持使用具有不同形状和大小的复杂、层次结构容错组。可以将容错组与弹性群集和大型群集布置集成在一起,以增加群集的灵活性和可靠性。
通过容错组使 Vertica 了解群集拓扑
还可以通过容错组使 Vertica 了解运行 Vertica 数据库的群集的拓扑。当使用 Terrace 路由时,需要使 Vertica 了解群集拓扑,这可以显著减少大型群集数据库上的消息缓冲。
自动容错组
配置包含 120 个或更多节点的群集时,Vertica 会围绕控制节点自动创建容错组。控制节点是管理 Spread(控制消息传递)的一个群集节点子集。Vertica 会将共用一个控制节点的节点放在同一个容错组中。有关详细信息,请参阅大型群集。
用户定义的容错组
在以下情况下定义您自己的容错组:
-
群集布局可能会出现关联故障。
-
您希望影响哪些群集主机管理控制消息传递。
示例群集拓扑
下图用示例介绍了单个群集上配置的层次结构容错组:
如何创建容错组
定义容错组之前,必须充分了解物理群集布局。容错组需要精心规划。
要定义容错组,请创建群集布置的输入文件。然后,将该文件传递到 Vertica 提供的脚本,该脚本会返回您需要运行的 SQL 语句。有关详细信息,请参阅容错组。