使用 restore_command 进行存档 WAL 文件的 Postgresql 流式复制

使用 restore_command 进行存档 WAL 文件的 Postgresql 流式复制

我有一个主服务器,它将 WAL 文件存档 (并压缩) 到 中/wal/archive/。目前,我正尝试从基础备份设置具有流式复制的热备用。

启动待机时,我注意到它产生了如下错误:

could not receive data from WAL stream: ERROR:  requested WAL segment 000000010000142400000014 has already been removed

这是有道理的,因为距离 base_backup 制作已经过去了大约一天,并且 WAL 文件已经存档。我restore_command在备用服务器中提供了一个recovery.conf,用于将文件从主服务器 scp 过来并解压缩:

restore_command = '(set -o pipefail; scp primary_ip:/wal/archive/%f.gz /dev/stdout | pigz -d > "%p")'

奇怪的是,同样的错误一直出现。请记住,我已经测试过,当我运行上述命令并提供一个文件时,该命令是否有效。我想看看该命令是否真的在运行,所以我添加了一个 echo:

restore_command = '(set -o pipefail; echo "%f" >> /data/test.txt && scp primary_ip:/wal/archive/%f.gz /dev/stdout | pigz -d > "%p")'

我可以清楚地看到它没有运行命令,因为没有创建 /data/test.txt。用户postgres有写入权限/data/。在备用服务器上是否需要指定某些内容来指示它restore_command在主服务器已经存档 WAL 文件时使用?

我的 recovery.conf 文件已根据文档

相关内容