news 2026/8/3 8:52:18

Neon pageserver副本切换

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Neon pageserver副本切换

Storage Controller 自动故障切换机制

Storage Controller 是自动完成故障切换的。

1. 心跳检测 → 标记离线

// storage_controller/src/heartbeater.rs:281 if now - *last_seen_at >= self.max_offline_interval { // 超过 30 秒无心跳 →标记为 Offline deltas.push((*node_id, ps_state.clone())); }

默认配置:

  • 心跳间隔:HEARTBEAT_INTERVAL_DEFAULT = 5 秒
  • 离线判定:MAX_OFFLINE_INTERVAL_DEFAULT = 30 秒

时间线:

  • T=0s:心跳正常
  • T=5s:心跳正常
  • T=10s:心跳正常
  • ...
  • T=35s:主节点故障,无心跳
  • T=40s:Storage Controller 检测到离线(30秒超时)
  • 触发故障切换流程

2. 自动提升 Secondary 为主

// storage_controller/src/tenant_shard.rs:678-682 if let Some(promote_secondary) = self.preferred_secondary(scheduler) { // 自动从 Secondary 中选择一个提升到 Attached self.intent.promote_attached(scheduler, promote_secondary); Ok((true, promote_secondary)) }

提升逻辑:

  1. 检测主位置节点离线
  2. 从 Secondary 列表中选择一个可用节点
  3. 调用 promote_attached():
    • 从 secondary 列表移除
    • 设置为新的 attached
    • 原主节点降级为 secondary(如果恢复)

3. 完整的故障切换流程

主位置(Node A)故障

主位置(Node A)故障 │ ▼ ┌─────────────────────────────────────────────────────┐ │ Storage Controller 自动检测 │ │ │ │ 1. 心跳超时(30秒)→标记 Node A 为 Offline │ │ 2. 触发 Reconciler 重新规划 │ │ 3. 发现 Attached 为空,Secondary 列表非空 │ │ 4. 调用 promote_attached(Node B) │ │ │ └─────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────┐ │ 故障切换执行 │ │ │ │ Node A(原主位置): │ │ →降级为 Secondary(warm=true) │ │ →继续缓存层文件,等待恢复后重新加入 │ │ │ │ Node B(原次级位置): │ │ →升级为 Attached(generation+1) │ │ →从 S3 加载缓存的层文件 │ │ →从 Safekeeper 追 WAL(LSN X →current) │ │ →服务查询 │ │ │ │ Compute 连接: │ │ →Storage Controller 通知 Compute 切换 Pageserver │ │ →客户端重连到新 Pageserver │ └─────────────────────────────────────────────────────┘

关键代码位置

功能文件函数
心跳检测storage_controller/src/heartbeater.rs:281heartbeat_loop()
离线判定storage_controller/src/service.rs:127max_offline_interval
自动提升storage_controller/src/tenant_shard.rs:678schedule()
切换执行storage_controller/src/tenant_shard.rs:226promote_attached()
重新规划storage_controller/src/reconciler.rs:79reconcile_tenant_shard()

总结

问题答案
是否自动故障切换?✅ 是,Storage Controller 自动完成
检测延迟多久?默认 30 秒(心跳间隔 5 秒 ×6 次超时)
切换方式?自动将 Secondary 提升为 Attached
原主节点恢复后?降级为 Secondary,重新预热缓存
是否需要人工干预?❌ 不需要,完全自动化
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/3 8:51:44

2026年南宁想学美术?这些宝藏美术培训公司你可不能错过!

在艺术教育领域蓬勃发展的今天,越来越多怀揣艺术梦想的学子渴望在美术道路上绽放光彩。如果你在2026年的南宁想学美术,那么以下这些美术培训公司值得你深入了解,特别是广西南宁华翔艺术培训学校,更是不容错过的宝藏之选。一、华翔…

作者头像 李华
网站建设 2026/8/3 8:51:31

SpringBoot+Vue学生求职系统开发实践

1. 项目背景与核心价值这个基于SpringBootVue的学生求职就业系统,本质上是一个为高校学生和用人单位搭建的数字化对接平台。我在实际开发中发现,传统校园招聘存在几个痛点:企业HR需要逐个高校跑宣讲会,学生投递简历渠道分散&#…

作者头像 李华
网站建设 2026/8/3 8:50:32

AI Coding 笔记

说明:1. 和其他关于AI Coding的文章的区别:这里记录一般性理论和技巧,具体工具一般会单独写文章记录。2. 下面内容标题前的数字表示重要程度:如 4 表示不关注也可以;1 表示很重要,对Coding的质量或效率影响…

作者头像 李华
网站建设 2026/8/3 8:49:57

Java编程入门指南:从零开始学习基础语法与开发环境配置

1. Java入门:从零开始的第一天学习指南 第一次接触Java编程时,我完全理解那种既兴奋又迷茫的感觉。作为一门拥有25年历史的编程语言,Java至今仍是全球最流行的开发语言之一——根据2023年TIOBE指数显示,Java长期稳居前三。但别被这…

作者头像 李华