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 参数信息
接着验证下,测试环境信息如下:
1 | pghost1 192.168.2.11 主节点 |
在 pghost2 执行 pg_basebackup
命令,如下:
1 | [pg12@pghost2 pg12]$ pg_basebackup -R -D /pgdata/pg12/pg_root -Fp -Xs -v -P -h 192.168.2.11 -p 1921 -U repuser |
验证 standby.signal 文件,如下:
1 | [pg12@pghost2 pg_root]$ ll $PGDATA/standby.signal |
验证 postgresql.auto.conf 文件,如下:
1 | [pg12@pghost2 pg_root]$ cat $PGDATA/postgresql.auto.conf |
果然 $PGDATA 目录下产生了 standby.signa 标识文件,同时 postgresql.auto.conf 配置文件增加了 primary_conninfo 参数信息。
之后启动备库,如下:
1 | [pg12@pghost2 pg_root]$ pg_ctl start |
并验证主备角色,流复制正常工作。
recovery.conf 不再支持
之前版本 PostgreSQL 的流复制备库是通过在 $PGDATA 目录中创建 recovery.conf 文件来标识的,这是流复制部署的重要文件,若 $PGDATA 目录下不存在此文件,数据库无法以流复制备库角色启动。
12 版本开始 recovery.conf 文件不再支持,若数据目录中存在此文件,数据库启动报错。
总结
虽然 PostgreSQL 12 部署流复制在操作层面和之前版几乎没有区别,但在处理机制上 12 版本和之前版本相差较大,同时 pg_basebackup
命令的 -R 参数的效果也和之前版本不一样,这些是需要注意的地方。