postgresql复制|当从属/恢复服务器停机时,应用程序冻结
我支持由小型企业托管的应用程序,该应用程序基于web,在后端使用pgsql数据库 Postgres设置为复制到非现场备用服务器,据我所知,该服务器工作正常,当我查询远程服务器时,它显示它正在恢复中,等等 从“主”服务器:postgresql复制|当从属/恢复服务器停机时,应用程序冻结,postgresql,database-replication,Postgresql,Database Replication,我支持由小型企业托管的应用程序,该应用程序基于web,在后端使用pgsql数据库 Postgres设置为复制到非现场备用服务器,据我所知,该服务器工作正常,当我查询远程服务器时,它显示它正在恢复中,等等 从“主”服务器: postgres=# table pg_stat_replication ; pid | usesysid | usename | application_name | client_addr | client_hostname | client_port |
postgres=# table pg_stat_replication ;
pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start
| state | sent_location | write_location | flush_location | replay_location | sync_priority | sync_state
-------+----------+---------+------------------+----------------+-----------------+-------------+-----------------------
--------+-----------+---------------+----------------+----------------+-----------------+---------------+------------
18660 | 1281085 | rep | postgresql2 | 192.168.81.155 | | 43824 | 2017-05-07 11:42:43.15
0057-04 | streaming | 3/B5243418 | 3/B5243418 | 3/B5243418 | 3/B5243150 | 1 | sync
(1 row)
…在“奴隶”上:
postgres=# select pg_is_in_recovery();
pg_is_in_recovery
-------------------
t
(1 row)
postgres=# select now() - pg_last_xact_replay_timestamp() AS replication_delay;
replication_delay
-------------------
01:02:14.885511
(1 row)
我理解需要将我的远程从属数据库升级为主数据库的过程,但我似乎遇到的问题是,现在有2到3次远程从属服务器的网络链接断开,应用程序完全“冻结”(例如,页面加载但不允许用户登录),尽管主数据库仍然处于运行状态。我启用了wal存档,以确保在发生类似情况时,数据会被保留,直到链接恢复,事务日志可以发送…但我不明白为什么我的主pgsql实例似乎会被锁定,因为从实例脱机…有点破坏了整个复制概念,所以我想我一定是做错了什么?最可能的解释是,您使用的同步复制只有两个节点 是在主服务器上设置的吗 如果唯一的同步备用服务器不可用,则无法在主服务器上提交任何事务,并且数据修改事务将“挂起”,这将解释您观察到的行为
对于同步复制,您至少需要两个从机。发生“不允许用户登录”时,请提供日志中的错误。还有-一个小时的延迟足以让人担心,我想就我所知,这不是一个小时的“延迟”,而是因为数据库中的任何事务都已经进行了很长时间。感谢反馈,似乎这确实是问题所在。