扩展 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 端点返回后,您可以发送
SIGINT
或SIGTERM
信号来终止进程。为了缓解这一挑战,请确保在关闭之前将 Ingester 块上传到长期存储。
当您缩减 Ingester 时,Querier 可能会暂时返回部分结果。
Ingester 上传到长期存储的块不会立即用于查询。新上传的块需要一些时间才能被Querier 和 Store-gateway 查询。如果您在短时间内缩减两个或更多 Ingester,查询可能会返回部分结果。
缩减 Ingester
请按照以下步骤缩减任意可用区中的 Ingester。
将每个 Ingester 设置为只读模式
a. 向 Ingester 上的
/ingester/prepare-instance-ring-downscale
API 端点发送 POST 请求,将其置于只读模式。在继续之前,请等待只读 Ingester 上传的块可供查询。所需的等待时间取决于您的配置,并且是以下设置的最大值
- 配置的
-querier.query-store-after
设置 - 配置的
-blocks-storage.bucket-store.sync-interval
设置的两倍 - 配置的
-compactor.cleanup-interval
设置的两倍
缩减每个 Ingester
a. 向 Ingester 上的
/ingester/shutdown
API 端点发送 POST 请求以终止它。b. 等待 API 端点调用成功返回,并且 Ingester 已记录“finished flushing and shipping TSDB blocks”。
c. 向 Ingester 进程发送
SIGINT
或SIGTERM
信号以终止。
缩减 Store-gateway
为了在缩减Store-gateway 时保证不停机,请完成以下步骤
- 确保至少有
-store-gateway.sharding-ring.replication-factor
个 Store-gateway 实例正在运行(使用默认配置运行 Grafana Mimir 时为三个)。 - 同时缩减的 Store-gateway 数量不超过两个。如果您为 Store-gateway 启用了区域感知复制,则可以并行缩减单个区域内的任意数量的 Store-gateway 实例。区域感知复制在
mimir-distributed
Helm chart 中默认启用。 - 停止您想要缩减的 Store-gateway 实例。
- 如果将
-store-gateway.sharding-ring.unregister-on-shutdown
的值设置为false
,则从 Store-gateway 环中移除已停止的实例- 在浏览器中,访问 Store-gateway 在其 HTTP 端口上暴露的
GET /store-gateway/ring
页面。 - 在已缩减的实例上点击 Forget。或者,等待时长为
-store-gateway.sharding-ring.heartbeat-timeout
值的 10 倍。-store-gateway.sharding-ring.heartbeat-timeout
的默认值为一分钟。
- 在浏览器中,访问 Store-gateway 在其 HTTP 端口上暴露的
- 继续处理接下来的两个 Store-gateway 副本。如果您正在使用区域感知复制,则继续处理下一个区域。