# 灾备

在全新环境里从备份重建，以及各个组件该按什么顺序拉起来。

最后校对于 2026-10-10

[备份与恢复](https://n9e.github.io/zh/docs/operations/backup-restore.md)讲的是把库恢复回它原来待的地方。这页讲更难的那种： **环境没了，你在另一批机器上重建。** 流程绝大部分是一样的， 不一样的地方在于地址变了，而夜莺内部有好几处东西是钉在老地址上的。

## 你必须带出来的东西[​](#你必须带出来的东西 "你必须带出来的东西的直接链接")

| 输入                         | 没有它会怎样                                                                   |
| ---------------------------- | ------------------------------------------------------------------------------ |
| 元数据库的备份               | 没什么可恢复的。用户、业务组、规则、仪表盘、通知配置全在里面                   |
| `etc/` 目录                  | 所有配置都得从头再调一遍                                                       |
| 你当时跑的那个版本的二进制   | 换成更新的版本，它一启动就会把 schema 往前迁一次——这是在恢复之上又叠了一次变更 |
| 同一个版本的 `integrations/` | 内置的仪表盘和规则模板，以及你自己加的那些                                     |

真正要命的是前两样。`etc/` 在版本库里、备份在异地，你就能重建； 只要有一样只存在于那批已经没了的机器上，你就重建不了。

## 按这个顺序拉起来[​](#按这个顺序拉起来 "按这个顺序拉起来的直接链接")

1. **元数据库。** 把备份恢复进一个全新的空库。别的什么都不能先起： 连不上数据库的进程会直接退出。
2. **Redis，空的。** 不要恢复它——登录态、心跳时间戳、主机元信息都会自己过期。 代价是什么，[备份与恢复](https://n9e.github.io/zh/docs/operations/backup-restore.md)里说了。
3. **一个 `n9e` 实例。** 恢复 `etc/`，把 `[DB] DSN` 和 `[Redis] Address` 改成新地址， 单独把它起起来。
4. **先验证，再加东西。** `curl --noproxy '*' http://n9e:17000/ping` 返回 `pong`； `grep -i "failed to migrate table" logs/*.log` 没有输出；能登录， 规则、仪表盘、通知配置都在。
5. **修地址**——见下一节。要在采集器回来之前做完，让数据落到仪表盘去查的那个地方。
6. **其余 `n9e` 实例。** 到**系统配置 → 告警引擎**确认它们都出现了。
7. **采集器，然后是边缘机房。** 故意放在最后：见下面这条。

**先建屏蔽，再起采集器。** 指标一恢复，故障期间所有「条件不成立所以没告警」的规则 瞬间同时成立，一起烧出来。第 7 步之前先建一条时间范围覆盖恢复窗口的屏蔽规则， 让它自己过期。屏蔽规则是**告警通知 → 规则管理**页上的一个 tab。

## 地址变了，有好几处东西跟着地址走[​](#地址变了有好几处东西跟着地址走 "地址变了，有好几处东西跟着地址走的直接链接")

这是「重建」和「恢复」的分界线。下面每一项都是老环境跑着的时候记下来的， 从备份里回来之后指向的是一批已经不存在的机器：

| 什么                              | 存在哪                         | 怎么处理                                                                                                                                                            |
| --------------------------------- | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 数据源地址                        | `datasource` 表                | 到**集成中心 → 数据源**里逐个改。没有任何东西会自动改写它们                                                                                                         |
| 数据源关联的告警引擎集群          | 数据源上的 `cluster_name`      | 它必须和实例上的 `[Alert.Heartbeat] EngineName` 一致，否则**没有引擎会接管这个数据源，它上面的规则永远不跑**。要么沿用原来的 `EngineName`，要么把每个数据源都改一遍 |
| 通知里跳转链接用的站点地址        | `configs` 表里的 `site_info`   | 到**系统配置 → 站点设置**里改。进程只在这个值为空时才填默认值，恢复出来的值会原样保留，于是每条通知都还链向老机器                                                   |
| 自动注册的 `embedded-tsdb` 数据源 | 每次启动重写成本实例自己的地址 | 不用管，除非你把 `[EmbeddedTSDB] DatasourceUrl` 钉在了一个已经不存在的 VIP 上                                                                                       |
| 告警引擎页面上的旧实例            | `alerting_engines` 表          | 不用管。超过 600 秒没心跳的行会被删掉，十分钟左右这些幽灵就没了                                                                                                     |
| 采集器的写入地址                  | 每个采集器自己的配置           | 改掉，或者把域名切过来。这就是「在需要之前就先给夜莺挂个域名」的理由                                                                                                |

通知媒介和它们调用的地址一般都在外部，搬家不受影响——但只要有哪个是指回夜莺自己的， 它就在上面这张表里。

## 拿不回来的东西[​](#拿不回来的东西 "拿不回来的东西的直接链接")

* **内置时序库里的样本**，除非你专门备份过那个目录。它没有在线快照接口，见 [内置时序库的单 Center 限制](https://n9e.github.io/zh/docs/operations/embedded-tsdb-limits.md)。
* **备份之后写进去的一切**——期间改过的规则、告警事件、通知记录。
* **故障期间的指标本身。** 没有东西会补写，每张图上都会有一段缺口。
* **Redis 里的内容。** 所有人重新登录一次，设备心跳时间要等采集器下次上报才有。

## 定一个真能兑现的恢复目标[​](#定一个真能兑现的恢复目标 "定一个真能兑现的恢复目标的直接链接")

两个数，而且都来自你能控制的东西，不是你希望的东西：

* **能丢多少**，等于你的备份间隔。每天备一次，就意味着最多丢 24 小时的规则和仪表盘改动。 夜莺这边没有任何东西能改变这个数——改变它的是备份计划。
* **要花多久**，等于你上一次演练花的时间。不是估出来的。

所以演练就是这件事的全部。[备份与恢复](https://n9e.github.io/zh/docs/operations/backup-restore.md)要求每季度做一次恢复演练， **把其中一次做成重建**——恢复到一台主机名和地址都不一样的机器上， 照着上面那张表走一遍。表里每一条都是只有在地址变了的时候才会暴露的， 在原地址上做恢复演练永远发现不了它们。

计时，把这个数字记下来，并且把这份手册放在它所描述的那个环境之外。

## 相关[​](#相关 "相关的直接链接")

* [备份与恢复](https://n9e.github.io/zh/docs/operations/backup-restore.md)——备份什么，以及恢复步骤
* [回滚与恢复](https://n9e.github.io/zh/docs/operations/rollback.md)——更小范围的撤销
* [生产拓扑](https://n9e.github.io/zh/docs/operations/topology.md)——你要重建成的那个样子
* [上生产前的检查清单](https://n9e.github.io/zh/docs/get-started/production-checklist.md)
