配置recovery_min_apply_delay后重启standby节点报错:psql: FATAL: the database system is starting up

环境:

pg版本:PostgreSQL 9.4.4 on x86_64

系统版本:CentOS release 6.6

linux内核版本:2.6.32-504.8.1.el6.x86_64

 

今天测试standby延时复制时,在standby节点配置了recovery_min_apply_delay参数,刚开始设置的是5min,但重启完standby节点后,连接数据库直接报:psql: FATAL:  the database system is starting up 错误,我一开始以为是节点中的backup标签有问题,之前曾经碰到过这个报错,是由backup的标签引起的,当时是删掉该标签就可以了,然后查看错误日志,错误日志中没有和backup标签有关的报错信息。怀疑是recovery_min_apply_delay参数的问题,将recovery_min_apply_delay从recovery.conf中去掉,重启,可以连接,重新调整recovery_min_apply_delay值得大小为5s,也可以连接,然后再设为5min,发现仍然报psql: FATAL:  the database system is starting up错误,查阅官方文档,没有这方面的说明。

下面是测试内容:

1、将recovery_min_apply_delay参数设为5s:

recovery_min_apply_delay=5s
recovery_target_timeline = 'latest'
standby_mode = on
primary_conninfo = 'host=192.168.173.43 port=1921 user=rep keepalives_idle=60'             # e.g. 'host=localhost port=5432'

重启standby节点:

pg_ctl restart -m fast

可以正常连接:

postgres@db-192-168-173-41-> psql
psql (9.4.4)
Type "help" for help.

postgres=# 

2、将recovery_min_apply_delay参数设为5min:

recovery_min_apply_delay=5min
recovery_target_timeline = 'latest'
standby_mode = on
primary_conninfo = 'host=192.168.173.43 port=1921 user=rep keepalives_idle=60'             # e.g. 'host=localhost port=5432'

然后重启standby节点,连接数据库:

postgres@db-192-168-173-41-> psql
psql: FATAL:  the database system is starting up
postgres@db-192-168-173-41-> 

无法连接。

在大约等待5min左右后,可以正常连接。

 

注:

1、需要等待大约recovery_min_apply_delay的时间后,才可以正常连接。

2、在邮件列表中也有这个问题的疑问,但没有解答:

http://www.postgresql.org/message-id/20151111155006.2644.84564@wrigleys.postgresql.org

关于这个问题,如果大家有知道的,希望可以说一下。非常感谢。

 

补充:

今天查看邮件列表,发现这个问题已由Fujii Masao在今年3月5号修复,之前是设置延时参数后,即使主从状态是一致的,standby节点也无法访问,现在提交补丁后,即使重设该参数,当主从处于一致状态时,则standby就可以访问。

详细链接:

 http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=d34794f7d5566effd342dd0ebaca3de3b48656f0

posted on 2016-04-08 16:15  Still water run deep  阅读(4977)  评论(0编辑  收藏  举报

导航