在PostgreSQL流复制中使用archive_command

时间:2017-08-15 23:56:07

标签: postgresql replication

使用流式复制时,有人可以在PostgreSQL中解释archive_command和restore_command的用途吗?

当我在流式复制中研究辅助服务器读取并应用部分填充的WAL文件。假设我在pg_xlog中使用wal段位置并使用archive_command我将其复制到我的本地存档目录/ / arclogs。

因此,如果辅助服务器将通过网络从pg_xlog读取部分填充的存档日志,那么/ arclogs中保存的文件的用途是什么。 并且文件只有在16 mb时才会被发送到/ arclogs?

我是PostgreSQL&的新手。你的帮助将会被证实。

1 个答案:

答案 0 :(得分:4)

主人通常只会在pg_xlog中保留有限数量的WAL,由主人wal_keep_segments设置控制。如果副本太慢或断开连接太长时间,主服务器将删除这些事务日志,以确保它可以继续运行而不会耗尽磁盘空间。

如果发生这种情况,副本无法赶上主副本,因为它需要一个连续且无间隙的WAL流。

所以你可以:

  • 启用WAL归档(archive_commandarchive_mode)作为后备,因此如果主服务器从其pg_xlog删除所需的WAL,副本可以切换到从归档重播WAL。副本使用restore_command获取WAL。重要的是,存档的WAL不需要与主机在同一台机器上,通常也不是。

  • 使用物理复制槽(primary_slot_name in recovery.conf)将副本连接到主服务器。如果使用插槽,则即使副本断开连接,主设备也知道副本所需的WAL。所以它不会删除pg_xlog副本中仍然需要的WAL。但缺点是,如果副本停机时间过长会导致pg_xlog填满,导致主机因磁盘空间不足而失败。

  • 不要这样做,如果副本太落后就让副本失败。如果发生这种情况,请从新的基本备份重新创建它们。

文档确实需要一个概述文件来将所有这些组合在一起。

WAL归档有一个额外的好处:如果您创建服务器的base backup,您可以使用它和WAL归档来执行主服务器的point-in-time restore。这使您可以从意外表丢弃等内容中恢复数据。 PgBarman是可以帮助您解决此问题的工具之一。