阅读(2716) (12)

PostgreSQL pg_standby

2021-08-24 17:16:03 更新

pg_standby用于支持创建一个温备数据库服务器。它被设计为一个可以随时投入生产的程序,以及一个可定制的模板供你进行特定的修改。

pg_standby被设计成一个等待着的restore_command,它被用来把一次标准的归档恢复变成一次温备操作。还需要一些其他的配置,所有这些配置都在主服务器手册中有相应的描述(见第 26.2 节)。

要配置一台后备服务器去使用pg_standby,可以把下面的内容放在postgresql.conf配置文件中:

restore_command = 'pg_standby archiveDir %f %p %r'

其中archiveDir是 WAL 段文件应该被存储的目录。

如果指定了restartwalfile(通常用%r宏指定),那么所有在逻辑上位于这个文件之前的 WAL 文件都将被从archivelocation中移除。这使需要被保留的文件数最小化,与此同时能够保持崩溃重启的能力。如果archivelocation对于这个特定后备服务器是一个瞬态区域,使用这个参数是合适的,但当 archivelocation 是一个长期 WAL 归档区域时则不是合适的。

pg_standby假定archivelocation是一个拥有服务器的用户可读的目录。如果指定了restartwalfile(或者-k),archivelocation目录必须也是可写的。

当主服务器失效时,有两种方式转移到一个温备数据库服务器:

智能失效备援

在智能失效备援中,服务器在应用归档中可用的所有 WAL 文件之后被提升。即便后备服务器落后于主服务器,这也会导致零数据丢失,但是如果有很多未应用的 WAL,在后备服务器准备好之前就需要比较长的时间。要触发一次智能失效备援,创建一个包含单词smart的触发文件,或者只创建一个空文件。

快速失效备援

在快速失效备援中,服务器被立即提升。归档中任何还未被应用的 WAL 文件将被忽略,并且这些文件中的所有事务都会丢失。要触发一次快速失效备援,创建一个触发文件并且把单词fast写在其中。pg_standby也能被配置为在一段定义好的区间内没有新 WAL 文件出现时自动执行一次快速失效备援。