Grafana Tempo 感知可用区的 live-store 复制(Zone-aware live-stores)配置指南
Grafana Tempo 感知可用区的 live-store 复制Zone-aware live-stores配置指南【免费下载链接】tempoGrafana Tempo is a high volume, minimal dependency distributed tracing backend.项目地址: https://gitcode.com/GitHub_Trending/tempo1/tempoZone awareness区域感知/故障域感知是 Tempo 用于保证数据在多个故障域下称区域 zone之间冗余复制、从而提升整体可用性的关键能力。本指南聚焦于 live-store实时存储场景下的 zone-aware 复制配置它将 Tempo 的分区partition所有权按每个区域一个 live-store进行分配使任一区域中的 live-store 不可用时其他区域的 live-store 仍能继续为该分区提供查询服务。读完本文你将理解 zone-aware live-stores 的工作原理RF2 复制、读仲裁为 1 的机制、如何在 Tempo 中为 live-store 与查询端配置感知可用区的路由以及与此相关的 ring、partition ring 配置参数的含义与作用。一、Zone awareness 是什么Zone awareness 是一项确保数据跨故障域复制、从而提供更高可靠性的功能。这里的故障域failure domain完全由你自行定义常见的有云厂商的可用区availability zone如 AWS 的us-east-1a数据中心data center服务器机架server rack。对 Grafana Tempo 而言配置 zone awareness 后系统会把 ring 中的每个实例标记到它所属的区域并将数据副本放置到不同区域从而避免整个区域故障时所有副本同时不可用的最坏情况。Tempo 是一个高吞吐、最小依赖的分布式链路追踪后端参见 README.mdzone awareness 与它的 ring 机制深度绑定每个参与服务的实例会通过 key-value 存储默认 memberlist向 ring 注册自己的身份、地址与区域归属。二、Zone-aware live-stores 的核心设计每个分区由每个区域一个 live-store持有当为 live-stores 开启 zone awareness 后Tempo 的每个分区partition将由每个区域中的一个 live-store 持有owned。也就是说若你部署了 3 个区域那么每个分区会有 3 个 live-store 同时持有它——分别位于 3 个不同的区域。这样做的好处是当某个区域中的 live-store 不可用时其他区域中持有同一分区的 live-store 可以继续为该分区提供查询服务查询不会中断。RF2 复制与读仲裁为 1在这种设计下数据跨区域复制副本数为 2RF2每个分区在两个不同区域中保有数据副本读仲裁read quorum为 1查询端querier只需获得每个分区的一个live-store 的响应即可返回结果。也就是说虽然数据写入了两份但查询只需要一份响应即可成功。这带来了一个重要收益读路径无需进行数据去重data deduplication因为查询只依赖单一副本的结果不会对来自多个副本的响应做合并比对。这一点同时降低了查询延迟等待最少响应即可返回与实现复杂度。设计要点小结设计维度行为分区所有权每个分区在每个区域中恰有一个 live-store 持有复制因子跨区域 RF2数据写入两个区域读仲裁每分区仅需 1 个 live-store 响应quorum 1读路径去重不需要查询只取单副本结果故障场景单一区域 live-store 不可用时其余区域副本继续服务查询三、live-store 在 Tempo 中的角色与 ring 机制live-store 模块概览live-store 是 Tempo 的 livestore 模块提供的能力负责从 Kafka 消费 trace 数据、在内存中维护实时数据分片live traces、并按块block完成与刷新到后端存储。与其相关的重要源文件包括live_store.go核心服务同时管理分区 ringpartition ring与读 ringread ringpartition_ring.go分区 ring 的配置与生命周期器lifecycler参数partition_reader.go按分区消费 Kafka、计算滞后lag并提交 offset 的读取器config.golive-store 全部配置项及其默认值。两个 ring分区 ring 与读 ring从源码 live_store.go 可以看到LiveStore 启动时会同时搭建两套 ring分区 ringpartition ring基于ring.NewPartitionInstanceLifecycler构建用于管理谁持有哪个分区的所有权关系。每个分区可以有多位 owner不同区域的 live-store 各占其一这正是 zone-aware 复制的基础读 ringread ring / membership ring基于ring.NewBasicLifecycler构建用于服务发现——live-store 实例注册到 ring 中让查询端可以发现并连接。从 live_store.go 的实现可以看到该 ring 的实例注册为ring.ACTIVE状态且不需要 token注释明确说明我们只需要在 ring 里以做服务发现。关键配置项instance_zone源码定义于 pkg/ring/config.go正是用于在 ring 中标记实例所属区域BasicLifecyclerConfig中的Zone字段取自cfg.InstanceZone参见 pkg/ring/config.go。每个 live-store 实例只要配置了不同的instance_zone就会被 ring 归属到不同区域从而实现每分区每区域一个 owner的布局。此外分区读取器还通过tempo_live_store_partition_owned指标带有partition与zone两个标签暴露当前实例对分区的持有状态方便运维直接观察每个分区在每个区域的所有权情况见 partition_reader.go。四、如何配置 zone-aware live-stores配置区域归属instance_zone要让 zone awareness 生效第一步是给每个 live-store 实例设置区域标识。Tempo 的统一配置结构模块livestore的ring段中对应字段为livestore: ring: # 必填定义当前实例所属的故障域。 # 可以是可用区、数据中心或机架名例如 us-east-1a、dc1、rack-a。 instance_zone: us-east-1a该配置的源码定义位于 pkg/ring/config.goRegisterFlagsAndApplyDefaults中通过 flag-prefix.instance-availability-zone注册例如-livestore.ring.instance-availability-zone默认值为空字符串即默认不感知区域。它最终会被写入BasicLifecyclerConfig.Zonepkg/ring/config.go随心跳上报到 ring供查询端按区域选择实例。务必确保同一分区副本所在的多个 live-store 实例必须配置互不相同的instance_zone否则它们会落入同一故障域区复制RF2的容灾效果将大打折扣。分区 ring 的 KV 存储分区 ring 的状态共享依赖于 KV 存储。从 partition_ring.go 可以看到其默认 store 为memberlist默认前缀collectors/一般无需改动livestore: partition_ring: kvstore: store: memberlist完整的最小配置示例结合 config.go 中RegisterFlagsAndApplyDefaults的默认值如HeartbeatPeriod 5s、HeartbeatTimeout 1m一个开启 zone-aware 的最小配置如下livestore: ring: heartbeat_period: 5s # 默认 5sring 心跳周期 heartbeat_timeout: 1m # 默认 1m心跳超时判定实例不健康 instance_zone: us-east-1a # 关键本实例所属区域各副本实例必须互不相同 partition_ring: kvstore: store: memberlist # 默认 memberlist无需手动指定也可 min_partition_owners_count: 1 # PENDING 分区转为 ACTIVE 所需的最少 owner 数 min_partition_owners_duration: 10s # 满足最小 owner 数后需持续的时间 delete_inactive_partition_after: 13h # INACTIVE 分区被删除前的等待时长其中min_partition_owners_count、min_partition_owners_duration、delete_inactive_partition_after三个参数在 partition_ring.go 中均有注释说明其映射关系MinOwnersCount→PartitionInstanceLifecyclerConfig.WaitOwnersCountOnPendingMinOwnersDuration→WaitOwnersDurationOnPendingDeleteInactivePartitionAfter→DeleteInactivePartitionAfterDuration。对于 zone-aware 场景建议min_partition_owners_count至少设为你的区域数量例如 2 或 3确保分区只有在每个区域都有 owner 之后才转为 ACTIVE 对外服务。五、查询端如何感知区域PreferredZone 与 zone sorter仅让 live-store 感知区域还不够查询端querier也需要按区域组织请求尽量在本地/优先区域内完成查询。这一逻辑实现在 querier/partition_ring.goqueryQuorumConfigForReplicationSets构造ring.DoUntilQuorumConfig并通过queryPartitionRingZoneSorter(q.cfg.PartitionRing.PreferredZone)注入一个区域排序器querier/partition_ring.go排序器逻辑querier/partition_ring.go为若preferredZone非空则把该区域排到最前优先尝试其余区域打乱顺序以均衡负载。这样在最小化请求 按区域优先的配合下querier 会优先访问同区域副本区域不可用时再退回到其他区域副本。querier: partition_ring: preferred_zone: us-east-1a # 优先查询该区域内的 live-store 副本 minimize_requests: true # 达到仲裁每分区 1 个响应后即停止多余请求minimize_requests与minimize_requests_hedging_delay直接映射到DoUntilQuorumConfig的对应字段querier/partition_ring.go用于控制达到 quorum1 后是否立即终止其余 in-flight 请求。六、zone-aware 复制的收益与适用场景收益高可用单个区域可用区/数据中心/机架故障不会中断对应分区的查询另一区域的副本继续服务低查询开销读仲裁为 1querier 只需等待一个副本响应不会因为等待多个副本而放大延迟实现简单读路径无需数据去重省去多副本结果合并的复杂性与额外 CPU/内存开销负载均衡zone sorter 在多个区域间随机打散请求顺序避免查询全部打在单一区域副本上。适用场景多可用区部署的云原生环境如 EKS/GKE/ACK 上跨 AZ 部署 Tempo 微服务形态需要保证 trace 查询在基础设施局部故障期间仍可用的生产集群追求读写路径低复杂度、同时具备跨域冗余能力的高吞吐 tracing 后端。注意事项instance_zone必须按故障域真实布局填写并保持一致错误配置会导致所有副本落入同一区域失去容灾意义复制因子与仲裁关系是固定的RF2 quorum 1不要尝试通过修改ReplicationFactor等底层 ring 参数去改变该语义pkg/ring/config.go 中ToRingConfig固定设置ReplicationFactor 1因为真正承担复制的语义由分区所有权与区域分配实现部署新区域或下线区域时注意delete_inactive_partition_after默认 13h对分区状态转换的影响避免分区长期滞留 INACTIVE。七、进一步阅读完整配置参考frontend/docs/config-reference.md其中包含livestore.ring.instance_zone、querier.partition_ring.preferred_zone等字段的 YAML 示例live-store 配置与默认值config.go分区 ring 配置partition_ring.go查询端 zone sorter 实现querier/partition_ring.goring 配置instance_zone、heartbeat_period、heartbeat_timeoutpkg/ring/config.go。【免费下载链接】tempoGrafana Tempo is a high volume, minimal dependency distributed tracing backend.项目地址: https://gitcode.com/GitHub_Trending/tempo1/tempo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Hermes引擎接入React Native的工程实践:配置、度量与调试

Hermes引擎接入React Native的工程实践:配置、度量与调试

项目升级到 React Native 0.70 那天,我以为换到 Hermes 就是改一行开关的事。结果两轮真机跑下来,启动时间确实好看了,但团队的接入姿势五花八门:有人开着远程 JS 调试上线,有人 iOS 的 Podfile 忘开 Hermes&#xff0…

2026/9/18 19:54:04 阅读更多 →
LeetCode 题解:Minimum Number of Increments on Subarrays to Form a Target Array——从分治模拟到线段树再到单趟贪心的三阶演进

LeetCode 题解:Minimum Number of Increments on Subarrays to Form a Target Array——从分治模拟到线段树再到单趟贪心的三阶演进

LeetCode 题解:Minimum Number of Increments on Subarrays to Form a Target Array——从分治模拟到线段树再到单趟贪心的三阶演进 【免费下载链接】leetcode Leetcode solutions 项目地址: https://gitcode.com/GitHub_Trending/leetcode1/leetcode 导读 …

2026/9/18 19:54:04 阅读更多 →
oh-my-hermes:React Native 的 Hermes 引擎配置与性能调优实战

oh-my-hermes:React Native 的 Hermes 引擎配置与性能调优实战

做移动端开发这几年,有一个感受越来越深:React Native 项目跑到后期,性能问题基本都出在 JavaScript 引擎这一层。启动变慢、内存上涨、列表滚动掉帧,排查半天往往发现不是业务代码的问题,而是引擎配置根本没被认真对待…

2026/9/18 19:54:04 阅读更多 →

最新新闻

汽车仪表DCDC选型:150V耐压与COT架构实战指南

汽车仪表DCDC选型:150V耐压与COT架构实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 2:43:03 阅读更多 →
Ollama本地部署全攻略:安装、镜像加速与GGUF模型导入实操

Ollama本地部署全攻略:安装、镜像加速与GGUF模型导入实操

先亮明观点:想在本地跑一个开源大模型,Ollama 是门槛最低的那个,没有之一。它把环境、依赖、API 服务全收在一个小工具里,装完之后一条命令就能把大模型权重拉下来直接跑。但很多新手卡在第一步:官网下载慢、pull 模型…

2026/9/20 2:43:03 阅读更多 →
OpenClaw本地部署实战:Ollama+飞书机器人搭建私有AI代理

OpenClaw本地部署实战:Ollama+飞书机器人搭建私有AI代理

做 AI 代理本地部署这件事,最大的问题从来不是“模型跑不起来”,而是把模型、工具、IM 入口这些零零散散的模块串成一条完整的链路。OpenClaw 是少有的、能把本地大模型调度、工具调用、多渠道消息接入统一到一个进程里的开源代理框架,配上 O…

2026/9/20 2:43:03 阅读更多 →
网络运维四项核心能力:从配置到架构、排障、自动化与业务沟通

网络运维四项核心能力:从配置到架构、排障、自动化与业务沟通

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 2:43:03 阅读更多 →
豆包AI图片去水印全攻略:从官方工具到API源头关闭水印

豆包AI图片去水印全攻略:从官方工具到API源头关闭水印

你有没有遇到过这种尴尬:用豆包生成了一张特别满意的封面图,准备放到公众号或者小红书的时候,却发现右下角躺着一个半透明的小Logo。裁掉吧,构图直接没了;留着吧,又像在给平台免费打广告。这个问题太常见了…

2026/9/20 2:43:03 阅读更多 →
2026最新揭秘:别人做的网站百度网站验证全攻略

2026最新揭秘:别人做的网站百度网站验证全攻略

2026最新揭秘:别人做的网站百度网站验证全攻略 网站被黑挂马不知道怎么办?这是很多接手旧站或外包项目的运营人员最头疼的问题。尤其是遇到“别人做的网站”,代码逻辑混乱,后台权限丢失,甚至被植入了恶意代码,这时候如果直接去申请百度网站验证,大概率会被驳回,甚至影响后续收录。2026最新的安全规范对网站…

2026/9/20 2:42:46 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →