跳至内容

31.5 单人值守与团队响应

同一响应协议既要能被凌晨单人值守执行,也要能在几十人加入时保持一致。差别不在技术 正确性:单人把角色按时间串行切换,团队把只读调查并行化;两种模式都要有一个状态、 一个时间线、一个命令 owner 和明确的升级条件。

31.5.1 单人时先稳定、记录,再逐级升级

前十五分钟按顺序切换角色

分钟逻辑角色产物
0~2ICincident ID、UTC 起点、当前用户影响、下一次更新时间
2~5scribe首发事实、告警来源、最近变更、当前自动化和 writer 身份
5~9operatorL0 只读现场包;连接/HA/资源/完整性最小证据
9~12technical lead候选路线、被排除路线、第一安全动作与 stop line
12~15liaison呼叫所需 owner、发布 known/unknown/impact/next update

一个人可以戴四顶帽子,但要按顺序。先把“准备执行什么”写进时间线,再切到 shell; 执行后贴原始 exit status 和 verifier 结果,再回到记录。多开几个终端不会让一个人获得 真正的独立复核,只会增加连错环境和忘记动作的概率。

单人第一目标是保持可操作

  • 保留一个管理连接或 out-of-band 路径;
  • 给诊断 SQL、SSH 和 HTTP probe 设置短 timeout;
  • 先停止精确的错误来源,不做全局“重启看看”;
  • 把当前 cluster、node、role、system id、timeline 放在命令前;
  • 不在普通聊天粘贴连接串、原始 SQL、业务行或私钥;
  • 每五分钟停一次,问“现有动作是否仍匹配响应目标”。

若手已经在高压下连续操作,最有价值的动作往往是叫醒第二个人。独立读回一个 target 可以阻止方向反了的 failover、误删 slot 或在错误 data directory 上恢复。

预先写死升级触发器

单人不能因为“还没完全搞清楚”而无限延迟呼叫。下列任一项应立即升级:

writer uniqueness unknown
checksum / WAL / page / storage media error
backup or archive recovery window unknown
R2/R3 action required
regulated or financial data involved
credentials / intrusion / malicious change suspected
impact still growing after first containment
fifteen minutes内没有形成可证伪路线

真正存在“几分钟后满盘”的倒计时,也只授权最小保护动作,例如按声明 marker 释放 emergency reserve 或在入口 shed load;它不自动授权删除 pg_wal。按组织 break-glass 政策执行后,必须立刻补齐 owner、证据和独立复核。

防范单人认知陷阱

陷阱自检问题
anchoring除首发告警外,还有哪两个解释?
action bias不做这条命令,未来五分钟会丢掉什么?
confirmation bias哪条最便宜的证据会推翻我的路线?
sunk coststop condition 是否已经触发?
fatigue我能否准确复述 target、方向和不可逆边界?

如果最后一个问题答不清,应停止有副作用的操作并交接,而不是靠咖啡继续。

31.5.2 团队时避免多人同时改同一系统

两分钟内建立响应拓扑

IC                 one person
database operator  one active command token
scribe             one canonical timeline
business liaison   one outward status owner
read-only tracks   access / HA / database / host-storage / backup

人员不足时可以合并角色,人员过多时也不要复制角色。新加入者先读当前摘要和 stop line, 再领取一个问题;不要从头重复所有探针或提出第五次“要不要重启”。

并行问题,不并行状态改变

一个好的分工可能是:

track A  从客户端、HAProxy、PgBouncer 还原实际路径
track B  读取 Patroni、DCS、PostgreSQL role/timeline
track C  检查 host resource、storage 和最近 kernel error
track D  检查 backup/archive/recovery coverage
track E  由业务 owner 确认影响键和外部副作用

这些 track 默认 R0。任何人提出 R1~R3 动作,都先写成 decision packet;IC 指定唯一 operator 和 verifier。若已有动作执行中,新动作必须说明是等待、互斥还是可以安全并行。

“一个人重启 pool、另一个人切流、第三个人 terminate session”无法从结果中辨别哪个 动作有效,还可能在连接排空过程中制造未知事务。

使用 read-back 和 closed loop

IC:

Authorize action A on cluster pg-x only, node pg-x-2,
expected B within 30 seconds, stop on C, rollback D.

operator 复述 target 和条件,执行后报告:

started / completed UTC
exact command or API request hash
exit status
expected signal B actual value
stop condition C true/false
evidence id

verifier 从独立观察面确认。只有 IC 宣布状态转移后,时间线才从 authorized 变成 completed/verified。这样可以避免“某人说 done”被误读为业务已恢复。

交接要传递未决风险

轮班摘要不应只列已做事项:

current severity / impact / route
authoritative writer and timeline
active fences, pauses, silences and temporary config
last verified data/recovery boundary
actions completed and their results
hypotheses rejected / still open
next action, owner, approval and stop line
irreversible boundaries already crossed
next stakeholder update

接班 operator 对关键身份做一次 read-back。长事件要安排休息和轮换;疲劳是会改变系统 风险的运行条件,不是个人意志问题。

31.5.3 何时必须请求业务、存储、安全或厂商协助

技术 owner 不能替代语义 owner

需要谁强制触发条件需要对方决定什么
业务/数据 owner错误值、target-only 写、退款/通知等副作用权威状态、补偿规则、可接受降级
应用 owner重试、连接池、幂等键、deploy/job 相关围栏范围、回放安全、客户端验收
存储/基础设施media error、snapshot、空间、fsync/latency 异常一致快照、fencing、扩容与设备替换
网络/DCS ownerleader lock、分区、VIP/route 不一致多数派、网络围栏和路径恢复
安全/法务/隐私凭据泄漏、恶意变更、受监管数据、证据可能用于调查保全、通知、访问范围和 chain of custody
扩展/厂商非核心插件、内核崩溃、未文档格式或支持合同相关已知缺陷、受支持恢复路径、补丁

数据库团队可以证明“这 77 行在恢复点之后被合法修改”,却不能决定哪一笔退款该撤销; 存储团队可以生成 crash-consistent snapshot,却不能宣称业务事务完整;厂商可以建议 修复步骤,最终生产授权仍属于本组织。

外部求助包要小而完整

发送前先写一个明确问题:

We need to determine whether PG18.4 can safely start this copied
data directory after error X, without modifying the preserved source.

随包提供:

  • incident ID、版本、OS/架构、扩展与精确错误;
  • system identifier、timeline/LSN 和简化拓扑;
  • 已执行动作、结果和 stop line;
  • 最小可复现样本或隔离工作副本;
  • 相关日志的精确时间窗、散列与脱敏说明;
  • 业务影响和所需答复时限。

不要默认发送整个 postgresql.confpg_hba.conf、Patroni YAML、完整日志、core dump 或业务表;它们可能含凭据、连接串、SQL、参数值和个人数据。先按合同、法律和最小必要 原则确认接收渠道与访问权限。

提前定义“必须停手”

以下情况应停止本地修复尝试,转为保存、隔离和专家协作:

  • 无法确认目标 data directory 的 system identifier 或 timeline;
  • 两个 writer 都有独占提交;
  • pg_resetwal、手工 page copy、catalog hack 等成为唯一候选;
  • pg_rewind 已失败,target 状态未知;
  • 存储错误仍增长,工作副本来源不可靠;
  • 扩展数据格式或加密密钥不受当前团队理解;
  • 任何动作可能影响法定通知或证据可采性。

及时升级不是“把事故甩出去”。IC 仍要跟踪请求 ID、对方假设、建议适用版本、执行 授权和验证结果,并把外部建议纳入同一决策日志。


上一节:决策、沟通与变更纪律 · 返回本章目录 · 下一节:实战:盲抽症状的桌面演练 · 查看全书目录 · 查看索引中心

最后更新于