archive_command
我在 postgresql.conf 中设置了一个简单的复制:
archive_command = 'rsync -a %p _postgresql@serverip:/var/postgresql/wal_archive/%f'
在副本出现故障之前,它运行了 2 年多。副本宕机后,存档命令反复失败,因此 master 上的 pg_xlog 文件从未被删除,并且 master 磁盘空间不足。
在我的用例中,副本很好,但并不那么重要。但是,确保 master 始终可用非常重要,因此我想使用一个存档命令,该命令会在 master 出现问题之前牺牲副本。
我目前走到了另一个极端,将 archive_command 更改为:
archive_command = 'rsync -a %p _postgresql@serverip:/var/postgresql/wal_archive/%f || true'
但这似乎也不理想,因为即使几秒钟的网络中断也可能导致复制失败。
理想情况下,我想将 更改为archive_command
尝试将 WAL 文件复制到副本一定次数的内容,如果失败,则放弃并删除 pg_xlog 文件。对新的有什么建议archive_command
吗?
(postgres 10.5)
我推荐一种稍微不同的方法。不要测试失败次数,因为失败次数过多可能会导致磁盘空间不足,而是直接测试磁盘空间不足。
但请注意,rsync 首先是一种危险的方法,因为它不能保证在本地返回成功之前写入远程端(以及该文件所在的目录)的文件成功 fsync。
或者一种完全不同的方法:将您的副本设置为流副本,而不是日志传送副本。然后将“wal_keep_segments”设置为比为 pg_wal 保留的空间量小一点的值。请注意,这仅在为 pg_wal 保留空间时有效,也就是说,没有人可以“借用”一些可用空间用于其他目的,例如临时文件。
当然,如果您的副本宕机了一段时间而您没有注意到,那么您可能还需要一个监控解决方案。