Grafana Mimir 成员列表和 Gossip 协议
Memberlist 是一个 Go 库,它使用基于 Gossip 的协议来管理集群成员身份、节点故障检测和消息传递。Memberlist 最终一致,并且通过尝试通过多条路径与潜在的死亡节点通信来部分容忍网络分区。
默认情况下,Grafana Mimir 使用 memberlist 实现键值 (KV) 存储,以在实例之间共享哈希环数据结构。
使用基于 memberlist 的 KV 存储时,每个实例都维护哈希环的副本。每个 Mimir 实例在本地更新哈希环,并使用 memberlist 将更改传播到其他实例。本地生成的更新和从其他实例接收的更新会合并在一起,形成该实例上哈希环的当前状态。
要配置 memberlist,请参阅配置哈希环。
Memberlist 如何传播哈希环更改
使用基于 memberlist 的 KV 存储时,每个 Grafana Mimir 实例使用以下技术将哈希环数据结构传播到其他实例
- 仅传播最近更改中引入的差异。
- 传播完整的哈希环数据结构。
每个 -memberlist.gossip-interval
周期,一个实例都会随机选择由 -memberlist.gossip-nodes
配置的所有 Grafana Mimir 集群实例的子集,并将最新的更改发送给选定的实例。此操作执行频率较高,是传播更改的主要技术。
此外,每个 -memberlist.pullpush-interval
周期,一个实例都会随机选择 Grafana Mimir 集群中的另一个实例,并传输 KV 存储的全部内容,包括所有哈希环(除非 -memberlist.pullpush-interval
为零,这将禁用此行为)。此操作完成后,两个实例将拥有与 KV 存储相同的内容。此操作的计算成本较高,因此执行频率较低。该操作确保哈希环定期协调到共同状态。