菜单
文档面包屑箭头 Grafana Mimir面包屑箭头 配置面包屑箭头 最小化扩散令牌
开源

将 ingester 迁移到最小化扩散令牌

本指南将帮助您配置 Mimir 的 ingester,使其使用“最小化扩散令牌生成策略”。

开始之前

ingester 时间序列复制应配置为启用区域感知

注意

建议使用最小化扩散令牌,如果

您的 ingester 写入路径上禁用了 shuffle-sharding,或者即使启用了,您系统中的大多数租户都使用了所有可用的 ingester。

注意

为了防止查询结果不正确,

在将 ingester 迁移到最小化扩散令牌之前,必须禁用 ingester 读取路径上的shuffle-sharding。在最后一个 ingester 区域迁移到最小化扩散令牌至少 -querier.query-store-after 时间后,可以重新启用 ingester 读取路径上的 shuffle-sharding。

如果 ingester 配置了非空的 -ingester.ring.tokens-file-path 值,则这是 ingester 在关闭时存储令牌并在启动时恢复的文件。请记住此值,因为在最后一步会用到它。

为简单起见,假设配置了三个可用区域,分别命名为 zone-azone-bzone-c。迁移到“最小化扩散令牌生成策略”是一个复杂的过程,需要逐个区域执行以防止任何数据丢失。

步骤 1:禁用 zone-a 中的 ingester 写入请求

要禁用写入请求,请在 distributor 和 ruler 上配置以下标志

-ingester.ring.excluded-zones=zone-a

在继续下一步之前,使用以下查询确保没有向 zone-a 中的 ingester 发送写入请求

sum by(route) (
  rate(
    cortex_request_duration_seconds_count{
      namespace="<your-namespace>",
      container="ingester",
      pod=~"ingester-zone-a-.*",
      route="/cortex.Ingester/Push"}[5m]
  )
)

您应该会看到类似以下内容

No More Write Requests

步骤 2:关闭 zone-a 中的 ingester

调用 zone-a 中所有 ingester 上的 /ingester/shutdown 端点,将所有内存中的时间序列和指标刷新到长期存储,并从 ring 中清除所有 ingester。

在继续下一步之前,确保所有调用都成功完成。

步骤 3:为 zone-a 中的 ingester 启用最小化扩散令牌

在 zone-a 中的 ingester 上配置以下标志

-ingester.ring.tokens-file-path=
-ingester.ring.token-generation-strategy=spread-minimizing
-ingester.ring.spread-minimizing-zones=zone-a,zone-b,zone-c

注意

示例使用 zone-a,zone-b,zone-c 表示配置的可用区域的逗号分隔列表。

在继续下一步之前,确保与 zone-a 相关的所有 ingester Pod 都已启动并使用新配置运行。

可选步骤:ingester 的有序注册

Mimir 可以强制 ring 按顺序注册 ingester。启用此功能后,只有在所有之前的 ingester(ID 小于其自身的 ID)都已注册后,ingester 才能在 ring 中注册其令牌。此功能可以最大限度地减少应由某个 ingester 处理的写入请求在 ingester 在 ring 中注册之前实际到达 ring 的可能性。在这种情况下,请求将由另一个 ingester 处理。这种情况可能会导致负载分配偏离最佳状态。

配置此功能

-ingester.ring.spread-minimizing-join-ring-in-order=true

步骤 4:重新启用 zone-a 中的 ingester 写入请求

要重新启用写入请求,请恢复步骤 1:禁用 zone-a 中的 ingester 写入请求

此时,您可以使用以下查询检查 zone-a 中的 ingester 的内存中时间序列数量

sum by(pod) (
  cortex_ingester_memory_series{
    namespace="<your-namespace>",
    pod=~"ingester-zone-a-.*"}
)

如果一切顺利,您应该会看到类似以下内容

Successful migration of ingesters from a zone

步骤 5:迁移 zone-b 中的 ingester

重复步骤 1 到 4,将所有出现的 zone-a 替换为 zone-b

步骤 6:迁移 zone-c 中的 ingester

重复步骤 1 到 4,将所有出现的 zone-a 替换为 zone-c

步骤 7:删除旧的令牌文件

如果在迁移之前,您配置了 ingester 将其令牌存储在 -ingester.ring.tokens-file-path 下,那么在将所有 ingester 区域迁移到最小化扩散令牌后,您必须删除这些文件。

例如,如果来自 mimir-prod 命名空间的名为 ingester-zone-a 的 ingester Pod 过去将其令牌存储在名为 /data/tokens 的文件中,您可以运行以下命令删除 /data/tokens 文件

kubectl -n mimir-prod exec ingester-zone-a-0 -- rm /data/tokens