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

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

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

我是PostgreSQL的新手,您的帮助将非常热烈。

最佳答案

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

如果发生这种情况,副本将无法追上原版,因为它需要连续无间隙的WAL流。

这样你就可以:

  • 启用WAL归档( archive_command archive_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 是可以帮助您解决此问题的工具之一。

    关于postgresql - 在PostgreSQL流复制中使用archive_command,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45703167/

    10-12 17:45