我对复制有以下要求:
- 有一个主服务器,负责执行所有数据修改。
- 有一个辅助服务器,可用于只读查询,大约一分钟内更新。
- 主服务器可以通过网络访问从服务器,但从服务器无法访问主服务器。
单向访问要求是造成文档中描述的复制方法困难的原因。
理想情况下,该解决方案应该使用 Debian Stable 中提供的软件包来工作。
答案1
你可以只使用日志传送(而不是流复制)archive_timeout
设置为60秒。
文档中将此延迟称为可接受的最低限度。引述:
要限制未归档数据的时间,您可以设置 archive_timeout 以强制服务器定期切换到新的 WAL 段文件。当此参数大于零时,只要自上次段文件切换以来经过了这么多秒,并且发生了任何数据库活动(包括单个检查点),服务器就会切换到新的段文件 [...]
请注意,由于强制切换而提前关闭的存档文件的长度与完全满的文件的长度相同。因此,使用非常短的 archive_timeout 是不明智的——它会使存档存储空间膨胀。archive_timeout 设置一分钟左右通常是合理的
在这样的从属服务器上运行只读查询是另一个问题。文档说要设置wal_level
到hot_standby
:
要在备用服务器上启用只读查询,必须在主服务器上将 wal_level 设置为 hot_standby,并且必须在备用服务器上启用 hot_standby
一旦hot_standby
开启,与主设备的通信也应该可以正常工作。控制它的各种设置(如wal_receiver_status_interval
、wal_receiver_timeout
)max_standby_streaming_delay
可以逐个禁用,但文档中没有提到我们可以整体禁用该机制。
作为一项实验,看看当与主服务器的连接永久断开时会发生什么(而不是暂时断开,为了稳健性,备用服务器应该处理暂时断开的情况)可能会很有趣。但作为生产服务器的正常操作模式,这似乎很奇怪。