本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

这是尚未发布的文档。 SUSE® Storage 1.12 (Dev).

数据本地性

数据本地性设置旨在在某些情况下启用,即只要可能,至少应将一个 Longhorn 卷的副本调度到与使用该卷的 Pod 相同的节点上。我们将拥有本地副本这一特性称为拥有 data locality

例如,当集群的网络状况不佳时,数据本地性可能会很有用,因为拥有本地副本可以提高卷的可用性。

数据本地性对于分布式应用程序(例如数据库)也很有用,在这些应用程序中,高可用性是在应用程序级别而不是卷级别实现的。在这种情况下,每个 Pod 只需要一个卷,因此每个卷应调度到与使用它的 Pod 相同的节点上。 此外,Longhorn 的默认卷调度行为可能会对分布式应用程序造成问题。问题在于,如果存在一个 Pod 的两个副本,并且每个副本各含有一个卷,则 Longhorn 无法识别这些卷存储的是相同数据,因此不应将它们调度到同一节点上。因此,Longhorn 可能会在同一节点上调度相同的副本,从而阻止它们为工作负载提供高可用性。

当数据本地性被禁用时,Longhorn 卷可以由集群中任何节点上的副本支持,并且可以被运行在集群中任何节点上的 Pod 访问。

数据本地性设置

Longhorn 目前支持两种数据本地性设置模式:

  • disabled:这是默认选项。附加卷(工作负载)所在的节点上可能有或没有副本。

  • best-effort:此选项指示 Longhorn 尝试在附加卷(工作负载)所在的同一节点上保留一个副本。由于环境限制(例如磁盘空间不足、不兼容的磁盘标签等),即使 Longhorn 无法在附加卷(工作负载)所在节点保留本地副本,仍不会停止该卷。

  • strict-local:此选项要求 Longhorn 在附加卷所在节点上仅保留 一个副本,从而提供更高的 IOPS 和更低的延迟性能。此选项与 ReadWriteMany (RWX) 卷 不兼容。

如何为卷设置数据本地性

有三种方法可以为 Longhorn 卷设置数据本地性:

更改默认全局设置

您可以在 Longhorn UI 设置中更改数据本地性的全局默认设置。 全局设置仅作为默认值,类似于副本数量。 它不会更改任何现有卷的设置。 当创建卷时未指定数据本地性,Longhorn 将使用全局默认设置来确定该卷的数据本地性。

使用 Longhorn UI 更改单个卷的数据本地性。

您可以在创建卷时使用 Longhorn UI 设置数据本地性。 您还可以在卷详细信息页面中,在卷创建后更改该卷的数据本地性设置。

使用 StorageClass 为单个卷设置数据本地性。

Longhorn 还将数据本地性设置作为 StorageClass 中的一个参数公开。 您可以创建一个具有指定数据本地性设置的 StorageClass,然后使用该 StorageClass 创建 PVC。 例如,下面的 YAML 文件定义了一个 StorageClass,指示 Longhorn CSI 驱动程序将数据本地性设置为 best-effort

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: hyper-converged
provisioner: driver.longhorn.io
allowVolumeExpansion: true
parameters:
  numberOfReplicas: "2"
  dataLocality: "best-effort"
  staleReplicaTimeout: "2880" # 48 hours in minutes
  fromBackup: ""