我的客户有一个相当大的(总“数据”文件夹大小为 200G)的 PostgreSQL 数据库,我们正在制定灾难恢复计划。到目前为止,我们已经确定了三种不同类型的灾难:硬件中断、负载过多以及由于错误执行错误迁移(如 DELETE 或 ALTER TABLE DROP COLUMN)而导致的意外数据丢失。
前两种似乎很容易缓解,但我们无法为第三种制定好的缓解计划。我提议使用 ZFS 和频繁(每小时)快照,但如今“ZFS”意味着“OpenIndiana”,而我们的 Ops 工程师在这方面没有太多专业知识,因此使用 OpenIndiana 会带来另一个风险。同事们试图说服我,从 PostgreSQL PITR 备份恢复可以和从 ZFS 快照恢复一样快,但我非常怀疑重放,比如说,50G 的归档 WAL 可以被认为是“快速”。
我们还缺少哪些其他选择?ZFS 是唯一可行的选择吗?我们能否在 Linux 环境中获得快速的 Pg DB 恢复时间?
我建议您看一下 Barman,PostgreSQL 的备份和恢复管理器,它是由我们编写的,并且在 GNU GPL 3 条款下作为开源提供。为了给您一个想法,我们在比您的数据库(7 TB)更大的数据库上使用它。1.0 版已于最近 7 月发布。已经有一个 RPM 版本,Debian 软件包正在开发中(Barman 将包含在 Ubuntu 12.10 中)。如需更多信息,请访问:www.pgbarman.org。
重放存档的 WAL 是这里最好的选择,而且很可能是最快的。
这是最好的,因为您可以获得整个时间表。完全没有数据丢失。对于所有类型的快照,您都会丢失数据。每小时快照意味着最坏的情况是您失去了 1 小时的数据库更改(灾难发生在下一个快照之前)。
此外,如果您进行物理(非逻辑 - 也需要数据库快照,最适合恢复删除的表等)恢复,它是在块级别完成的并且非常快。
为什么 FreeBSD 不是运行 ZFS 和 PostgreSQL 的可行选择?FreeBSD ZFS 开发人员与 Illumos 团队密切合作,最近 Pawel Jakub Dawidek(第一个将 ZFS 移植到 FreeBSD 的人)添加了对 ZFS 的 SSD TRIM 支持。这很可能很快也会添加到 Illumos ZFS 代码中。
FreeBSD 和 ZFS 的另一个优势是GEOM框架。在 Solaris 上,当整个磁盘添加到 ZFS 池时,ZFS 会自动启用它们的写缓存。当 ZFS 仅管理磁盘的离散片时不会这样做,因为它不知道其他片是否由非写缓存安全文件系统(如 UFS)管理。由于其GEOM框架,FreeBSD 实现可以处理分区的磁盘刷新,因此不受此限制。