PostgreSQL pg_standby
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 文件出现时自动执行一次快速失效备援。