配置 Grafana Mimir 区域感知复制
区域感知复制是将数据跨故障域复制。区域感知复制有助于避免在某个域发生故障时丢失数据。Grafana Mimir 将故障域定义为区域。根据部署 Grafana Mimir 的底层基础设施,区域可以是,例如:
- 可用区
- 数据中心
- 机架
- 单个可用区内的反亲和性组
如果未启用区域感知复制,Grafana Mimir 会在所有组件副本之间随机复制数据,无论这些副本是否在同一区域内运行。即使 Grafana Mimir 集群部署在多个区域,给定数据的副本也可能驻留在同一区域。如果某个区域发生故障,其中包含多个副本,则可能会发生数据丢失。
启用区域感知复制后,Grafana Mimir 会确保将数据复制到跨不同区域的副本。
警告
请确保你配置的部署工具也具备区域感知能力。部署工具负责执行滚动更新。
滚动更新应仅在任何给定时间更新单个区域中的副本。你可以利用 Kubernetes rollout Operator 来协助完成此操作。
Grafana Mimir 支持以下组件的区域感知复制
配置 Alertmanager 告警复制
Alertmanager 中的区域感知复制确保 Grafana Mimir 将告警复制到 -alertmanager.sharding-ring.replication-factor
个 Alertmanager 副本中,每个区域中有一个副本。
要为告警启用区域感知复制:
- 通过
-alertmanager.sharding-ring.instance-availability-zone
CLI 标志或其对应的 YAML 配置参数配置每个 Alertmanager 副本的区域。 - 滚动发布 Alertmanager,以便每个 Alertmanager 副本都运行在配置的区域中。
- 为 Alertmanager 设置
-alertmanager.sharding-ring.zone-awareness-enabled=true
CLI 标志或其对应的 YAML 配置参数。
配置 ingester 时间序列复制
ingester 中的区域感知复制确保 Grafana Mimir 将每个时间序列复制到 -ingester.ring.replication-factor
个 ingester 副本中,每个区域中有一个副本。
要为时间序列启用区域感知复制:
- 通过
-ingester.ring.instance-availability-zone
CLI 标志或其对应的 YAML 配置参数配置每个 ingester 副本的区域。 - 滚动发布 ingester,以便每个 ingester 副本都运行在配置的区域中。
- 为 distributor、ingester 和 querier 设置
-ingester.ring.zone-awareness-enabled=true
CLI 标志或其对应的 YAML 配置参数。
配置 store-gateway 块复制
要为 store-gateway 启用区域感知复制,请参阅区域感知。
最小区域数
为了确保区域感知复制,请在等于或大于配置的复制因子的区域数量上部署 Grafana Mimir。默认复制因子为 3,这意味着至少要在三个区域上部署 Grafana Mimir 集群。将 Grafana Mimir 集群部署到多于配置的复制因子的区域不会产生负面影响。将 Grafana Mimir 集群部署到少于配置的复制因子的区域可能会导致写入副本失败或完全失败。
一个 Grafana Mimir 部署应至少有 floor(replication factor / 2) + 1
个健康的区域才能正常运行。
不平衡的区域
为确保区域间工作负载均衡,请在每个区域运行相同数量的每个组件副本。当副本数量不平衡时,副本较少的区域的资源利用率高于副本较多的区域。
成本
大多数云提供商会对可用区间的网络流量收费。在多个云提供商可用区部署启用区域感知复制的 Grafana Mimir 可能会导致额外的网络成本。
注意
distributor 接收到的请求通常是压缩的,而 distributor 发送给 ingester 的请求默认是未压缩的。这可能会导致跨区域带宽成本增加,因为至少有两个 ingester 将位于不同的可用区。
如果担心此成本,可以通过在 distributor 中将
-ingester.client.grpc-compression
CLI 标志或其对应的 YAML 配置参数设置为snappy
或gzip
来压缩这些请求。
简化区域感知组件发布的 Kubernetes Operator
Kubernetes Rollout Operator 是一个 Kubernetes Operator,可以帮助你更轻松地管理多可用区发布。在 Kubernetes 上运行启用区域感知的 Grafana Mimir 时,请考虑使用 Kubernetes Rollout Operator。
请注意,即使在你将 Grafana Mimir 部署到单个物理可用区的情况下,Rollout Operator 也非常有用。
这是因为该 Operator 通过以下方式自动化并加速发布过程:
- 允许一次更新整个区域
- 优先发布不健康区域而不是健康区域,以确保稳定性
- 允许管理员确定发布策略的积极程度
Operator 提供的自动化功能在大型部署中特别有用,否则发布将花费很长时间,并且在出现问题时可能需要手动干预。
通过 Grafana Mimir Jsonnet 启用区域感知
除了直接配置 Grafana Mimir,你还可以使用 Grafana Mimir Jsonnet 来启用 ingester 和 store-gateway 的区域感知。要启用 ingester 和 store-gateway 区域感知,请将顶级 multi_zone_store_gateway_enabled
或 multi_zone_ingester_enabled
Jsonnet 字段设置为 true
。这些标志会设置支持 ingester 和 store-gateway 区域感知所需的 Grafana Mimir 配置参数。