详细讲解了数据库灾恢复网络中网络连接、复制、备用基础设施和故障转移编排的协同原理,以及如何正确测试恢复能力。
数据库灾难恢复计划在纸面上可能看起来完美无缺,但真正的事故发生时仍然可能失效。
因为数据库恢复不仅仅取决于备份和数据库配置。
连接主数据库与恢复环境的网络可能成为真正的瓶颈。
恢复数据库网络将连接性、数据库复制、热备基础设施和故障转移编排结合在一起,在中断期间将工作负载从主数据库迁移到恢复数据库。
本文解释如何理解恢复数据库网络,更重要的是,如何正确地测试它们。
恢复数据库网络是连接主数据库环境与热备或灾难恢复环境的基础设施。
简化的架构如下:
Primary Application | v Primary Database | | Replication v Recovery Network | v Standby Database | v Failover / Recovery
架构可以包括:
具体实现取决于数据库引擎、工作负载、RPO、RTO 和基础设施环境。
很容易只关注数据库本身。
Database backup ↓ Restore ↓ Failover ↓ Application reconnect
但如果复制网络变慢会发生什么?
Normal network 18 ms latency ↓ Replication keeps up
Degraded network 340+ ms latency ↓ Replication falls behind ↓ Replication lag increases ↓ RPO target is missed
这正是暴露 DR 架构弱点的场景类型。ZProStudio 描述了一次 DR 演练,其中网络延迟急剧增加,异步复制累积了大约 40 分钟的积压,尽管文档记录的 RPO 不到五分钟。
在设计网络之前,需要理解两个重要的恢复指标。
Recovery Point Objective 描述组织可以容忍的数据丢失量。
恢复过程应理想地确保丢失的数据不超过约五分钟。
Recovery Time Objective 描述服务需要恢复的速度。
系统应理想地在约 30 分钟内重新运行。
这些指标应影响网络设计。
有几种可能的方法。
通过公共互联网的 VPN 通常更便宜,对于 RPO 以小时计的系统来说已经足够。
优势:
劣势:
专用租赁线路或类似连接可以提供更可预测的网络性能。
它们更适合以下工作负载:
缺点是成本。
对于已运行在主流云服务商上的工作负载,原生跨区域复制可能是一个有吸引力的选项。
云服务商运营自己的骨干网络,这可以提供比公共互联网更可预测的连接。
然而,云基础设施并不能消除网络测试的需求。
你仍然需要测量:
ZProStudio 指出,云原生复制可以是云工作负载的强大默认选择,但实际区域性能仍需验证而非假设。
假设你的网络服务商宣传:
1 Gbps 连接
很容易假设数据库复制可以持续使用 1 Gbps。
这不一定是真的。
实际吞吐量可能受以下因素影响:
ZProStudio 描述了一个案例,一个标称 1 Gbps 的 VPN 连接在考虑共享流量后,在区域中断期间实际提供接近 240 Mbps 的持续吞吐量。
在真实负载下测量网络。
复制策略也会影响网络需求。
主系统和备用系统在确认操作完成之前协调写入。
这可以提供非常低的数据丢失可能性,但需要可靠的低延迟连接。
高延迟会直接影响应用程序性能。
主系统不总是等待恢复数据库接收每个更改。
这可以在长距离上提供更好的性能,但可能会发生复制积压。
Primary | | Transaction log v Network | X High latency | v Standby
如果积压大于组织的 RPO,恢复计划就没有达到目标。
完整的网络中断很容易模拟。
但真实事件并不总是干净的中断。
因此,DR 测试应包括网络降级条件。
一种有用的基于 Linux 的方法是使用 tc 在测试期间引入受控延迟或数据包丢失。
例如,从概念上讲:
Normal Network ↓ Start Replication ↓ Introduce Latency ↓ Monitor Replication Lag ↓ Measure RPO ↓ Restore Normal Conditions ↓ Measure Recovery
始终在经批准带有适当安全措施测试环境中执行这些实验。
DR 演练不应该简单地产生:
故障转移成功
你需要实际测量。
| 指标 | 为什么重要 |
|---|---|
| Latency | 影响复制速度 |
| Throughput | 决定可以移动多少数据 |
| Packet loss | 可能中断复制 |
| Replication lag | 表明潜在数据丢失 |
| RPO | 测量可容忍的数据丢失 |
| RTO | 测量恢复持续时间 |
| Failover time | 显示编排性能 |
这些指标告诉你恢复架构是否真正满足业务需求。
一个有用的基线是至少每季度测试一次恢复环境。
每次测试理想情况下应包括不仅仅是简单的故障转移。
Quarterly DR Test
| +-- Database failover
| +-- Network latency test
| +-- Packet-loss test
| +-- Replication monitoring
| +-- RPO measurement
| +-- RTO measurement
| +-- Application validation
这种方法使你的 DR 计划可衡量而非理论化。
在审查现有 DR 环境时使用此检查清单:
你不能简单地声明:
"RPO = 5 分钟"
然后假设基础设施可以支持它。
数据库大小、事务量、复制方法和网络容量必须能够实现该目标。
慢速网络可能比完全死机的网络更难处理。
合同带宽不一定等于持续复制吞吐量。
成功的故障转移并不自动意味着 RPO 已实现。
始终检查故障转移前恢复数据库落后多远。
恢复数据库网络是灾难恢复架构的关键部分。
数据库引擎可能配置完美,备份可能可用,故障转移自动化可能正常工作——但如果网络不能足够快地移动复制数据,你的恢复目标仍然可能失败。
最好的方法是:
Define RPO/RTO ↓ Choose Replication Strategy ↓ Design Network ↓ Measure Real Performance ↓ Test Under Degradation ↓ Measure Replication Lag ↓ Validate RPO/RTO ↓ Repeat Regularly
关键要点很简单:
恢复网络在经过真实故障条件测试之前不能算是被证明的。
不要等到真正的灾难发生才发现你的 1 Gbps 连接实际上并不能提供数据库所需性能。
在使用之前测试网络。