我发现archive_command 仅由主服务器上的postgresql运行。
如果我正在运行级联复制,例如:
主服务器 -> 从服务器 1 -> 从服务器 2,并且想要在从服务器 1 上归档 WAL 段,该命令永远不会运行。
它是否正确?
如果是这样,如果我自己将 WAL 段从 pg_xlog 目录复制(rsync 或类似方法)到我的存档目录会怎么样?然后我可以使用这个存档目录作为新从属系统中 restore_command 的源吗?
答案1
如果是这样,如果我自己将 WAL 段从 pg_xlog 目录复制(rsync 或类似方法)到我的存档目录会怎么样?然后我可以使用这个存档目录作为新从属系统中 restore_command 的源吗?
是的,你可以。但是你有责任确保在执行此操作时不会丢失任何日志文件。
为了获得最佳效果,你可能希望将级联复制/rsync/其他操作作为restore_command
在 Slave1 上。
答案2
请注意,如果您使用的是 Postgres 9.5 或 9.6,则可以完成此操作。
在备用服务器上,您需要设置archive_mode = always
。当 Postgres 看到archive_mode = on
它只将 WAL 归档为主服务器时,但always
告诉它即使作为备用服务器也要归档 WAL。这些文档描述此行为。
当然待机需要其他合适的配置来配合,例如:
archive_mode = always
hot_standby = on
wal_level = replica
max_wal_senders = 3
archive_command = whatever-you-like
archive_timeout = 300
基本上,如果您告诉备用数据库always
存档 WAL,那么它就会archive_command
照常服从,因此请相应地进行配置。