環境:
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