本篇文章中我们将深入探讨了在 PostgreSQL 中设置流复制 (SR) 的具体细节。流式复制是在PostgreSQL 托管中实现高可用性的基本构建块,它是通过运行主从配置生成的。
主从术语
主/主服务器
- 可以进行写入的服务器。
- 也称为读/写服务器。
从/备用服务器
- 数据与主服务器持续保持同步的服务器。
- 也称为备份服务器或副本。
- 暖备用服务器是在提升为主服务器之前无法连接的服务器。
- 相比之下,热备服务器可以接受连接并提供只读查询。在接下来的讨论中,我们将只关注热备服务器。
数据写入主服务器并传播到从服务器。如果现有主服务器出现问题,其中一台从服务器将接管并继续写入以确保系统的可用性。
WAL 基于运输的复制
什么是 WAL?
- WAL 代表Write-Ahead Logging。
- 它是一个日志文件,所有对数据库的修改在应用/写入数据文件之前都会写入其中。
- WAL 用于数据库崩溃后的恢复,确保数据完整性。
- WAL 用于数据库系统以实现原子性和持久性。
WAL 如何用于复制?
预写日志记录用于保持数据库服务器之间的数据同步。这是通过两种方式实现的:
基于文件的日志传送
- WAL 日志文件从主服务器传送到备用服务器以保持数据同步。
- Master可以直接将日志拷贝到备服务器存储,也可以与备服务器共享存储。
- 一个 WAL 日志文件最多可以包含 16MB 的数据。
- WAL 文件仅在达到该阈值后才会发送。
- 这将导致复制延迟,并且如果主服务器崩溃且日志未归档,也会增加丢失数据的机会。
流式 WAL 记录