PostgreSQL 12: Recovery.conf 文件参数合并到 postgresql.conf

PostgreSQL 12 的一个重要变化是 recovery.conf 配置文件中的参数合并到 postgresql.conf,recovery.conf 不再使用,我们看看手册的说明,如下:

发行说明

Move recovery.conf settings into postgresql.conf (Fujii Masao, Simon Riggs, Abhijit Menon-Sen, Sergei Kornilov)

recovery.conf is no longer used, and the server will not start if the file exists. recovery.signal and standby.signal are now used to switch into non-primary mode. trigger_file has been renamed to promote_trigger_file. The standby_mode setting has been removed.

手册提到变化信息不少,包括以下几点:

  • recovery.conf 配置文件不再支持,此文件中的参数合并到 postgresql.conf,若 recovery.conf 存在,数据库无法启动
  • 新增 recovery.signal 标识文件,表示数据库处于 recovery 模式
  • 新增加 standby.signal 标识文件,表示数据库处于 standby 模式
  • trigger_file 参数更名为 promote_trigger_file
  • standby_mode 参数不再支持

以上变化对于部署 PostgreSQL 流复制有哪些地方需要注意?本文本简单演示,流复制的部署可参考 PostgreSQL:使用 pg_basebackup 搭建流复制环境

pg_basebackup 命令差异

12 版本pg_basebackup 命令的 -R 参数的效果和之前不同,主要体现在:

  • 命令执行后在 $PGDATA 目录创建 standby.signal 标识文件,文件内容为空
  • 命令执行后在 $PGDATA 目录的 postgresql.auto.conf 文件中添加 primary_conninfo 参数信息

接着验证下,测试环境信息如下:

pghost1 192.168.2.11 主节点
pghost2 192.168.2.12 备节点

在 pghost2 执行 pg_basebackup 命令,如下:

[pg12@pghost2 pg12]$ pg_basebackup -R -D /pgdata/pg12/pg_root -Fp -Xs -v -P -h 192.168.2.11 -p 1921 -U repuser
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/5B000028 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: created temporary replication slot "pg_basebackup_34159"
1144035/1144035 kB (100%), 2/2 tablespaces
pg_basebackup: write-ahead log end point: 0/5B000138
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: syncing data to disk ...
pg_basebackup: base backup completed

验证 standby.signal 文件,如下:

[pg12@pghost2 pg_root]$ ll $PGDATA/standby.signal
-rw-------. 1 pg12 pg12 0 Jul 18 10:30 /pgdata/pg12/pg_root/standby.signal

验证 postgresql.auto.conf 文件,如下:

[pg12@pghost2 pg_root]$ cat $PGDATA/postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
primary_conninfo = 'user=repuser passfile=''/home/pg12/.pgpass'' host=192.168.2.11 port=1921 sslmode=disable sslcompression=0 gssencmode=disable target_session_attrs=any'

果然 $PGDATA 目录下产生了 standby.signa 标识文件,同时 postgresql.auto.conf 配置文件增加了 primary_conninfo 参数信息。

之后启动备库,如下:

[pg12@pghost2 pg_root]$ pg_ctl start

并验证主备角色,流复制正常工作。

recovery.conf 不再支持

之前版本 PostgreSQL 的流复制备库是通过在 $PGDATA 目录中创建 recovery.conf 文件来标识的,这是流复制部署的重要文件,若 $PGDATA 目录下不存在此文件,数据库无法以流复制备库角色启动。

12 版本开始 recovery.conf 文件不再支持,若数据目录中存在此文件,数据库启动报错。

总结

虽然 PostgreSQL 12 部署流复制在操作层面和之前版几乎没有区别,但在处理机制上 12 版本和之前版本相差较大,同时 pg_basebackup 命令的 -R 参数的效果也和之前版本不一样,这些是需要注意的地方。

参考

源文链接: https://postgres.fun/20190718155800.html

新书推荐

最后推荐和张文升共同编写的《PostgreSQL实战》,本书基于PostgreSQL 10 编写,共18章,重点介绍SQL高级特性、并行查询、分区表、物理复制、逻辑复制、备份恢复、高可用、性能优化、PostGIS等,涵盖大量实战用例!

PostgreSQL 12: Recovery.conf 文件参数合并到 postgresql.conf

上一篇:docker小结(nginx)


下一篇:javascript/JS常用正则表达式