RDS 快照:I/O 暂停发生多长时间?

Arc*_*eno 5 high-availability snapshot amazon-web-services database-backup amazon-rds

由于我们的备份策略依赖于 RDS Postgresql 手动备份,因此我们遇到了在创建快照期间 RDS 实例(单可用区)可能停机的问题。根据 AWS:

在单可用区数据库实例上创建此数据库快照会导致短暂的 I/O 暂停,可能会持续几秒到几分钟,具体取决于数据库实例的大小和类别。

这并不清楚我们如何确定数据库实例 I/O 在快照期间是否正常运行,就好像数据库在短时间内关闭一样,我们希望停止相应的 Web 服务器或将其从负载均衡器以确保客户端不会发生连接中断。

让我们非常疑惑的是:

  • 数据库在快照期间真的有停机时间吗,AWS 只是说“I/O 暂停”和“延迟”?我在某处读到停机时间仅在快照初始化期间持续很短时间(从几秒钟到几分钟),我们是否可以知道停机时间是否已经过去并且数据库实例已准备好提供服务(同时其快照仍在创建中)?

  • 处理这些 IO 暂停的一般最佳做法是什么?似乎即使使用自动备份也会发生这种情况,这是否意味着在进行数据库快照创建时站点每天可能会停机?

Joh*_*ley 5

答案来自于了解快照的工作原理。

在快照开始时,会向所有应用程序发送一条消息(命令)以达到一致状态并将必要的数据刷新到磁盘。

刷新需要多长时间取决于内存中有多少数据、数据处于什么状态以及将数据写入磁盘需要多长时间。

一旦每个支持快照的应用程序完成冻结准备,快照进程就会对文件系统进行快照,这意味着如果有任何进一步的数据块被写入,则首先为备份进程创建一个副本(COW - 写时复制)。然后将解冻(恢复)消息/命令发送到每个应用程序。

对于轻度使用的数据库,此冻结/解冻过程可能只需要几百毫秒。对于需要刷新到磁盘的具有 GB 内存的大型数据库,将需要几秒钟的时间。

在冻结/解冻周期发生期间,新用户请求的磁盘 I/O 被挂起。数据库仍在运行,但所有请求将在磁盘/文件系统同步时暂停。收到解冻消息后,一切都会恢复。

对于主从数据库,主不受影响。快照将在从站上拍摄。这是出色的 AWS RDS 功能之一。

  • @KennyEvitt - 我的答案的第一部分是指快照的工作原理。接收快照通知的 RDS 内部应用程序是数据库应用程序(MySQL、PostgreSQL 等),而不是 RDS 外部的应用程序。如果您有更多问题,请创建一个新问题。 (2认同)