简单来说,WAL-E 是一个用于 PostgreSQL 数据库进行连续归档和物理备份的开源工具。它的核心目的是简化并自动化 PostgreSQL 的基准备份和时间点恢复过程。
核心概念解析
要理解 WAL-E,首先需要了解两个 PostgreSQL 的核心机制:
- WAL : 预写式日志。PostgreSQL 在将数据写入数据文件之前,会先写入日志。这确保了数据库的 ACID 特性。WAL 文件是数据库操作的一系列记录。
- PITR : 时间点恢复 。通过结合一个基础备份 和一系列在基础备份之后产生的 WAL 文件,你可以将数据库恢复到自基础备份以来的任何一个时间点。
WAL-E 就是围绕这两个机制构建的自动化工具。
WAL-E 的主要功能和工作原理
WAL-E 的核心思想是:将基础备份和 WAL 文件自动、连续地上传到一个云存储服务中。
-
基础备份
- WAL-E 使用
pg_start_backup()
和pg_stop_backup()
来创建一个数据库集群文件系统的完整物理备份(类似于文件系统快照)。 - 这个备份会被打包、压缩,并直接上传到你配置的云存储中(如 AWS S3, Google Cloud Storage, Azure Blob Storage 等)。
- WAL-E 使用
-
连续归档 WAL 文件
- 在配置好之后,PostgreSQL 每当完成一个 WAL 段文件,WAL-E 就会自动将这个文件压缩并上传到云存储。
- 这确保了你的备份是"连续"的,任何数据变更都不会丢失。
-
恢复
- 当发生故障需要恢复时,你可以使用 WAL-E 的命令从云存储中下载基础备份和所需的 WAL 文件。
- 通过标准的 PostgreSQL PITR 流程,将数据库恢复到故障发生前的那一刻,或者任何一个你指定的时间点。
为什么使用 WAL-E?
- 高可靠性和灾难恢复: 通过将备份存储在异地、高可用的云存储上,即使整个数据中心发生故障,你仍然可以恢复数据。
- 自动化: 无需手动管理备份文件、清理旧文件或担心备份是否成功。WAL-E 与 PostgreSQL 紧密集成,自动完成所有工作。
- 支持 PITR: 可以实现极低的 RPO(恢复点目标),理论上只可能丢失几秒钟的数据,非常适合对数据一致性要求高的生产环境。
- 云原生: 它天生就是为了与云环境协同工作而设计的,利用了云存储的扩展性和耐用性。
- 压缩和加密: WAL-E 在传输前会对备份和 WAL 文件进行压缩,节省存储成本和网络带宽。它还支持使用 GPG 进行加密,保证数据在云端的隐私和安全。
一个典型的工作流程
-
初始设置 : 配置 PostgreSQL 的
archive_mode = on
,并将archive_command
设置为调用wal-e
的命令,例如:basharchive_command = 'wal-e wal-push %p'
-
日常运行 :
- PostgreSQL 生成 WAL 文件。
- 每当一个 WAL 文件填满后,
archive_command
被执行,WAL-E 将该文件推送到云存储。
-
定期基础备份 :
- 通过一个定时任务(如 cron)定期执行
wal-e backup-push
命令,创建一个新的基础备份。
- 通过一个定时任务(如 cron)定期执行
-
灾难恢复 :
- 在一个新的服务器上,使用
wal-e backup-fetch
命令拉取最新的基础备份。 - 配置
recovery.conf
(在 PG12+ 中是在postgresql.conf
中设置),告诉 PostgreSQL 从哪里拉取 WAL 文件(使用wal-e wal-fetch
)。 - 启动 PostgreSQL,它会自动应用所有 WAL 文件,直到最新位置或你指定的时间点。
- 在一个新的服务器上,使用
WAL-E 的现状和继任者
- WAL-E: 目前仍然被广泛使用,非常稳定。
- WAL-G : 这是 WAL-E 的一个性能更强、功能更丰富的分支和继任者。它用 Go 语言重写,提供了更快的压缩/加密速度、增量备份、备份元数据管理等高级功能。对于新项目,通常更推荐使用 WAL-G。
总结
pgsql wal_e 是一个关键的 PostgreSQL 备份和灾难恢复工具,它通过自动化基础备份和 WAL 日志的归档到云存储,为数据库提供了企业级的、高可靠的时间点恢复能力。它是构建高可用 PostgreSQL 架构不可或缺的一环。
特性 | 描述 |
---|---|
类型 | 开源命令行工具 |
核心目的 | PostgreSQL 的连续归档和物理备份 |
工作原理 | 自动将基础备份和 WAL 文件推送至云存储 |
关键价值 | 实现自动化的、可靠的时间点恢复和灾难恢复 |
现代替代 | WAL-G(推荐新项目使用) |