Joe*_*e J 7 postgresql replication backup archive-log
我有一个主/从 postgresql 配置,其中从属是热备用,用作只读备份。目前,archive_command 设置为“cd”。(我读过的空话)。我的理解是archive_command可以将wal段复制到特定位置;通常我会看到使用 cp 命令将其复制到磁盘其他位置的示例。我将 wal_keep_segments 设置为 256,所以如果我理解正确的话,slave 可能会落后 wal 大约 4GB (16MB * 256) 的变化。这可能是为什么我从来不需要使用 archive_command 的原因,因为我有足够的 wal 段来解决一些滞后问题?
那么可选的 archive_command 的目的是为了保存比 wal_keep_segments 设置更多的 wal 段吗?因此,在我的情况下,数据库目录 (pg_xlog) 中将有 256 个 wal 段,并且 postgres 会在达到限制时自动轮换并清理这些 wal 段。
而且,如果我放置了一个 archive_command,它是否会继续将 wal 段保存到命令将文件复制到的任何位置(并继续添加越来越多的存档 wal 段,除非我添加了自己的清理过程)?这种想法正确吗?
那么,假设我对 archive_command 的理解是正确的,从站如何利用这些 wal 文件?从站是否首先尝试从主数据目录中检索 256 个 wal 文件,然后返回到 recovery_command 以检索早于此的 wal 文件?recovery_command 是在从站上运行还是以某种方式通过主站代理?recovery_command 的许多示例都显示它与 cp 一起使用,所以我不确定文件是如何传输到不同服务器的?
我已经尝试阅读许多关于此的指南,包括以下内容。
我什么时候必须使用 archive_command,什么时候不用
https://www.postgresql.org/docs/current/static/continuous-archiving.html
我对这些概念仍然有点模糊,并试图达到一些清晰度。有人可以澄清我上面的想法是否正确以及为什么我可以使用 archive_command 吗?谢谢阅读。
这是我的配置:
大师:postgresql.conf
listen_addresses = '*'
wal_level = hot_standby
archive_mode = on
max_wal_senders = 2
archive_command = 'cd .'
wal_keep_segments = 256
hot_standby = on
Run Code Online (Sandbox Code Playgroud)
从站:postgresql.conf
listen_addresses = '*'
wal_level = hot_standby
archive_mode = on
max_wal_senders = 2
archive_command = 'cd .'
wal_keep_segments = 256
hot_standby = on
Run Code Online (Sandbox Code Playgroud)
从站:recovery.conf
standby_mode = 'on'
primary_conninfo = 'host=IP-of-master port=5432 user=rep password=****'
trigger_file = '/tmp/postgresql.trigger.5432'
Run Code Online (Sandbox Code Playgroud)
在以下archive_command情况下很有用:
您希望在发生灾难(例如意外删除数据库)时从基础备份到某个过去的状态进行时间点恢复。
您正在使用没有复制槽的流式复制。在这种情况下,如果副本落后超过wal_keep_segments并hot_standby_feedback关闭或副本暂时断开连接,则主节点将删除它需要的资源并且它会中断。如果您正在使用 WAL 归档,则副本可以回退到使用它restore_command来获取 WAL 以赶上并恢复。否则,您必须从新的pg_basebackup.
| 归档时间: |
|
| 查看次数: |
9130 次 |
| 最近记录: |