菜单
开源

一致性哈希环

一致性哈希环 被纳入 Loki 集群架构中,以

  • 帮助分片日志行
  • 实现高可用性
  • 简化集群的横向伸缩。对于必须重新平衡数据的操作,性能影响较小。

当满足以下条件时,哈希环连接单一类型的组件实例:

  • 在单体部署模式下有一组 Loki 实例
  • 在简单可伸缩部署模式下有多个读组件或多个写组件
  • 在微服务模式下有一种类型的组件有多个实例

并非所有 Loki 组件都通过哈希环连接。以下组件需要连接到哈希环:

  • distributors
  • ingesters
  • query schedulers
  • compactors
  • rulers

这些组件可以选择连接到哈希环:

  • index gateway

在定义了三个 distributor 和三个 ingester 的架构中,这些组件的哈希环连接同类型组件的实例。

Distributor and ingester rings

环中的每个节点代表一个组件实例。每个节点都有一个键值存储,其中包含该环中每个节点的通信信息。节点定期更新键值存储,以保持所有节点上的内容一致。对于每个节点,键值存储包含:

  • 组件节点的 ID
  • 组件地址,用作其他节点的通信通道
  • 组件节点的健康状况指示

配置哈希环

common.ring_config 块内定义 哈希环配置

使用默认的 memberlist 键值存储类型,除非有充分的理由使用不同的键值存储类型。memberlist 使用 gossip 协议 将信息传播到所有节点,以保证键值存储内容最终一致。

对于 distributor 环、ingester 环和 ruler 环,还有额外的配置选项。这些选项仅用于高级、特殊用途。这些选项分别在 distributor 的 distributor.ring 块、ingester 的 ingester.lifecycler.ring 块和 ruler 的 ruler.ring 块中定义。

关于 distributor 环

Distributors 使用其键值存储中的信息来统计 distributor 环中的 distributor 数量。此计数进一步决定集群限制。

关于 ingester 环

键值存储中的 ingester 环信息由 distributor 使用。这些信息允许 distributor 分片日志行,决定 distributor 将日志行发送到哪个 ingester 或一组 ingester。

关于 query scheduler 环

Query schedulers 使用其键值存储中的信息进行 scheduler 的服务发现。这使得 querier 可以连接到所有可用的 scheduler,并允许 scheduler 连接到所有可用的 query frontend,有效地创建一个单一队列,有助于平衡查询负载。

关于 compactor 环

Compactors 使用键值存储中的信息来确定负责压缩的单个 compactor 实例。尽管 compactor target 在多个实例上,但 compactor 仅在负责的实例上启用。

关于 ruler 环

ruler 环用于确定哪些 ruler 评估哪些规则组。

关于 index gateway 环

index gateway 环用于在 ruler 或 querier 查询时确定哪个 gateway 负责哪个租户的索引。