PostgreSQL PITR 在线恢复后删除存档日志

irr*_*irr 5 postgresql replication database-design backup pgpool

我在三台服务器上使用 pgpool-II + PostgreSQL 8.4:主 + 备用 1 + 备用 2。复制模式为“on”负载均衡模式为“on”(在主备1之间)

我按照官方教程使用 PITR 配置在线恢复:http : //pgpool.projects.postgresql.org/pgpool-II/doc/pgpool-en.html#online-recovery

脚本“copy-base-backup”中有一个 tar 命令:

tar -C /data -zcf pgsql.tar.gz pgsql

所以我所有的 PG 集群目录都在脚本运行时被复制:

ls -1 /srv/pg/data/
PG_VERSION 
archive # directory with postgres archive files
backup_label.old
base
global
pg_clog
pg_hba.conf
pg_ident.conf
pg_log
pg_multixact
pg_stat_tmp
pg_subtrans
pg_tblspc
pg_twophase
pg_xlog
pgpool_recovery
pgpool_recovery_pitr
pgpool_remote_start
postgresql.conf
postmaster.opts
postmaster.pid
recovery.conf
recovery.done
Run Code Online (Sandbox Code Playgroud)

如何从主节点和备用节点安全地删除旧的存档日志?我的节点上每天大约有 30Gb 的档案。

Gre*_*ith 5

pgpool 附带的有关 PITR 恢复的文档确实不完整,并且在某些方面完全具有误导性。它建议将所有存档文件保留在主服务器上,然后使用 recovery_command 使用 scp 从那里复制到每个备用服务器。那是没有价值的。每个备用数据库都需要有自己的存档副本,否则就没有真正的冗余。如果主人在这种情况下失败了,你就没有任何用处。主服务器上的 archive_command 应该将文件分发到备用系统。如果这样做,根本不需要在主服务器上保存存档副本。

为了清理每个备用数据库上的档案,也不应该遵循对 recovery_command 给出的糟糕建议。相反,应将 pg_standby作为恢复命令调用。有关详细信息,请参阅有关热备份服务器的真实文档。如果您使用 pg_standby,它应该传递的一件事是“%r”参数,这是删除旧存档日志所需的信息。以这种方式使用 pg_standby 它将为您清理档案。

这里主要的重要部分是编写一个 archive_command 脚本,将数据正确地复制到两个备用服务器。我没有一个很好的例子可以指出,但是您需要做的是在每次复制后检查错误,并且仅当两个副本都发生时才提供成功返回码。


Chr*_*ers 0

是的,此时您可以安全地删除已存档的日志。不过要小心一点。您不想删除尚未归档的日志!