我对使用归档日志的 PostgreSQL 复制中的工作流程如何处理有一些疑问。
如果我在 Master postgresql.conf 中有这个配置:
archive_command = 'test ! -f /path/to/archive/%f && cp %p /path/to/archive/%f'
替换 %p 和 %f 参数后,实际执行的命令可能如下所示:
test ! -f /path/to/archive/00000001000000A900000065 && cp pg_xlog/00000001000000A900000065 /path/to/archive/00000001000000A900000065
好的,如果文件没有归档,那么它将被复制。
如果我在 Slave recovery.conf 中有这个配置:
restore_command = 'cp /path/to/archive/%f %p'
然后,如果我不配置这样的东西:
scp /master/path/to/archive/* /slave/path/to/archive/
/path/to/archive/ 中的 xlogs 文件怎么可能从 Master 传输到 Slave,然后 Slave 将它们复制到它的 pg_xlog/ 目录?
您需要确保这
/path/to/archive
是一个共享卷,如 NFS 文件共享,两台服务器都可以读取。或者您需要使用适当的命令将文件复制到/从共享存储位置。我认为这可能需要在文档中更加明显。
回复您的评论:
原因是主人
pg_xlog
通常与副本位于不同的服务器上。副本无法访问它。您真的不想放置pg_xlog
共享存储,因为它对性能至关重要。pg_xlog
当主服务器刚刚在火中融化时,拥有需要访问主服务器的备份对您也没有好处。通过归档 WAL,PostgreSQL 还可以减少文件系统碎片。一旦不再需要,它会回收 WAL 档案,重命名它们并像使用新文件一样使用它们。这是一个显着的性能改进,如果必须保留所有旧的 WAL 文件,这是不可能的。
最后,它在“主服务器仍需要操作的事务日志”和“现在只需要用于备份/归档的事务日志”之间创建了逻辑分离。