一致性哈希环
一致性哈希环 被纳入 Loki 集群架构中,以
- 帮助分片日志行
- 实现高可用性
- 简化集群的横向伸缩。对于必须重新平衡数据的操作,性能影响较小。
当满足以下条件时,哈希环连接单一类型的组件实例:
- 在单体部署模式下有一组 Loki 实例
- 在简单可伸缩部署模式下有多个读组件或多个写组件
- 在微服务模式下有一种类型的组件有多个实例
并非所有 Loki 组件都通过哈希环连接。以下组件需要连接到哈希环:
- distributors
- ingesters
- query schedulers
- compactors
- rulers
这些组件可以选择连接到哈希环:
- index gateway
在定义了三个 distributor 和三个 ingester 的架构中,这些组件的哈希环连接同类型组件的实例。
环中的每个节点代表一个组件实例。每个节点都有一个键值存储,其中包含该环中每个节点的通信信息。节点定期更新键值存储,以保持所有节点上的内容一致。对于每个节点,键值存储包含:
- 组件节点的 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 负责哪个租户的索引。