2017-05-08 41 views
0

我支持由小型企业基于Web的ROR应用程序托管的应用程序,该应用程序在后端使用pgsql数据库。postgresql复制|当从服务器/恢复服务器出现故障时,应用程序会冻结

Postgres的是设置复制到异地备份服务器,据我可以告诉工作正常,当我查询远程服务器这表明它在恢复等

从“主”服务器:

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) 

我了解所涉及我应该有促进我的远程从DB掌握角色的过程中,BU我似乎遇到的问题是,在2到3次现在,到远程从属服务器的网络连接已经断开,应用程序完全“冻结”(例如,页面加载但不允许用户登录),尽管主数据库仍处于运行状态。我有沃尔沃存档启用,以确保当这样的事情发生时,数据被保留,直到链接恢复和事务日志可以发送......但我不明白为什么我的主pgsql实例似乎锁定,因为奴隶实例进入脱机状态......有一种打败了复制的整个概念,所以我认为我一定是做错了什么?

+0

请在发生“不允许用户登录”时提供日志错误。还有 - 一小时的延迟足以让我担心我认为 –

+0

据我所知,这不是一个小时的“滞后”,而只是因为任何交易已经进入数据库。 – tmowbray

回答

1

最可能的解释是,您正在使用同步复制只有两个节点。

是否在主服务器上设置了synchronous_standby_names

如果唯一的同步备用服务器不可用,则不会在主服务器上提交事务,并且数据修改事务将“挂起”,这将解释您观察到的行为。

对于同步复制,您至少需要两个从站。

+0

感谢您的反馈,看起来确实是这个问题。 – tmowbray