菜单
开源

扩展 Grafana Mimir

Grafana Mimir 的每个组件都可以水平扩展。扩展 Grafana Mimir 意味着为了应对增加的负载,您可以增加每个 Grafana Mimir 组件的副本数量。

我们设计 Grafana Mimir 可以在没有人工干预的情况下快速、安全地向上伸缩。但是,缩减某些有状态组件时请务必小心,因为这些操作可能导致写入和读取失败,或部分查询结果不完整。

一体化模式

当以一体化模式运行 Grafana Mimir 时,您可以安全地向上伸缩到任意数量的实例。要缩减 Grafana Mimir 集群,请参阅缩减 Ingester

读写模式

当以读写模式运行 Grafana Mimir 时,您可以安全地向上伸缩以下三个组件中的任意一个

  • 您可以安全地向上或向下伸缩 Mimir 读取组件,因为它是无状态的。您也可以使用自动伸缩器。

  • 您可以安全地在一次仅缩减一个可用区内的 Mimir 后端组件。因为它包含 Store-gateway,更多信息请参阅缩减 Store-gateway

  • 要缩减 Mimir 写入组件,请参阅缩减 Ingester

微服务模式

当以微服务模式运行 Grafana Mimir 时,您可以安全地向上伸缩任何组件。您也可以安全地缩减任何无状态组件。

以下有状态组件在缩减时有限制

  • Alertmanager
  • Ingester
  • Store-gateway

缩减 Alertmanager

缩减Alertmanager 可能导致停机。

缩减 Alertmanager 时,请遵循以下指南

  • 同时缩减的 Alertmanager 数量不超过两个。
  • 确保至少有 -alertmanager.sharding-ring.replication-factor 个 Alertmanager 实例正在运行(使用默认配置运行 Grafana Mimir 时为三个)。

注意

如果您为 Alertmanager 启用了区域感知复制,则可以并行缩减单个区域内的任意数量的 Alertmanager 实例。

缩减 Ingester

Ingester 在内存中存储最近接收到的样本。当 Ingester 因缩减操作而关闭时,为了保证数据不丢失,不能丢弃存储在 Ingester 中的样本。

缩减 Ingester 时,您可能会遇到以下挑战

  • 默认情况下,当 Ingester 关闭时,存储在 Ingester 中的样本不会上传到长期存储,这会导致数据丢失。

    Ingester 暴露一个 API 端点 /ingester/shutdown,用于将 Ingester 中的内存时间序列数据刷新到长期存储,并从环中注销 Ingester。

    /ingester/shutdown API 端点成功返回后,Ingester 将不再接收写入或读取请求,但进程不会退出。

    在 shutdown 端点返回后,您可以发送 SIGINTSIGTERM 信号来终止进程。

    为了缓解这一挑战,请确保在关闭之前将 Ingester 块上传到长期存储。

  • 当您缩减 Ingester 时,Querier 可能会暂时返回部分结果。

    Ingester 上传到长期存储的块不会立即用于查询。新上传的块需要一些时间才能被QuerierStore-gateway 查询。如果您在短时间内缩减两个或更多 Ingester,查询可能会返回部分结果。

缩减 Ingester

请按照以下步骤缩减任意可用区中的 Ingester。

  1. 将每个 Ingester 设置为只读模式

    a. 向 Ingester 上的 /ingester/prepare-instance-ring-downscale API 端点发送 POST 请求,将其置于只读模式。

  2. 在继续之前,请等待只读 Ingester 上传的块可供查询。所需的等待时间取决于您的配置,并且是以下设置的最大值

  • 配置的 -querier.query-store-after 设置
  • 配置的 -blocks-storage.bucket-store.sync-interval 设置的两倍
  • 配置的 -compactor.cleanup-interval 设置的两倍
  1. 缩减每个 Ingester

    a. 向 Ingester 上的 /ingester/shutdown API 端点发送 POST 请求以终止它。

    b. 等待 API 端点调用成功返回,并且 Ingester 已记录“finished flushing and shipping TSDB blocks”。

    c. 向 Ingester 进程发送 SIGINTSIGTERM 信号以终止。

缩减 Store-gateway

为了在缩减Store-gateway 时保证不停机,请完成以下步骤

  1. 确保至少有 -store-gateway.sharding-ring.replication-factor 个 Store-gateway 实例正在运行(使用默认配置运行 Grafana Mimir 时为三个)。
  2. 同时缩减的 Store-gateway 数量不超过两个。如果您为 Store-gateway 启用了区域感知复制,则可以并行缩减单个区域内的任意数量的 Store-gateway 实例。区域感知复制在 mimir-distributed Helm chart 中默认启用。
  3. 停止您想要缩减的 Store-gateway 实例。
  4. 如果将 -store-gateway.sharding-ring.unregister-on-shutdown 的值设置为 false,则从 Store-gateway 环中移除已停止的实例
    1. 在浏览器中,访问 Store-gateway 在其 HTTP 端口上暴露的 GET /store-gateway/ring 页面。
    2. 在已缩减的实例上点击 Forget。或者,等待时长为 -store-gateway.sharding-ring.heartbeat-timeout 值的 10 倍。-store-gateway.sharding-ring.heartbeat-timeout 的默认值为一分钟。
  5. 继续处理接下来的两个 Store-gateway 副本。如果您正在使用区域感知复制,则继续处理下一个区域。