pg_archivecleanup 和流复制
Posted
技术标签:
【中文标题】pg_archivecleanup 和流复制【英文标题】:pg_archivecleanup and streaming replication 【发布时间】:2015-10-05 00:09:12 【问题描述】:使用 postgres 9.3。
我对 pg_archivecleanup 的正确使用有点困惑。
我同时使用流式复制和备份以及连续存档来进行 PITR 恢复。
我认为我不能在备用数据库的 recovery.conf 中配置 pg_archivecleanup,因为它不会实现任何目标。主服务器未归档到备用服务器可访问的位置。主服务器正在归档到其本地磁盘上的某个位置,然后这些归档和关联的备份会被 rsync 同步到一个大的备份磁盘。
因此,似乎解决方案是在 master 上以“独立”模式运行 pg_archivecleanup,例如:
/usr/lib/postgresql/9.3/bin/pg_archivecleanup -d /archive 0000000100000010000000F0.00000028.backup
所以,我会执行一项 cron 作业,对任何比最新文件更旧的 .backup 文件运行 pg_archivecleanup 命令,然后删除这些备份文件,只留下最新的文件。
我的理解和计划是否正确?
【问题讨论】:
【参考方案1】:如果您想在最新的基本备份之后只保留 WAL 段,您只需在独立模式下运行 pg_archivecleanup 以获取最新的 .backup 文件(不适用于那些比最新版本更早的文件)。
但是您真的希望只有一个可用的备份吗?首先,您将无法恢复到上次备份之前的位置。其次,有一些备份以防万一(损坏等)是有意义的。
将段存档到本地磁盘然后在其他地方进行 rsync 似乎很奇怪。为什么不将您的 rsync(然后同步以将操作系统缓冲区刷新到磁盘)放入 archive_command?这确保了段在到达目的地之前不会从 pg_xlog 中删除。
【讨论】:
是的。直接从archive_command
发送scp
或rsync
通常更明智。
感谢您的反馈。好点。我会将 rsync 移至存档命令,并可能更改为保留至少 3 个备份(每周完成)和所有相关的 WAL 段。
wadesworld 的命令行调用非常适合在主服务器上运行。您甚至不必存在 .backup 文件,您只需找到要删除的 WAL 文件,然后使用上述数字模式为命令行创建一个 .backup 文件名。 pg_archivecleanup 会处理剩下的事情。以上是关于pg_archivecleanup 和流复制的主要内容,如果未能解决你的问题,请参考以下文章