我在后端使用pgsql数据库支持由小型企业,基于Web的ROR应用程序托管的应用程序。
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升级为master的角色,但我似乎遇到的问题是,现在有2到3次到远程从属服务器的网络链接已经关闭,尽管主数据库仍在启动并运行,但应用程序完全“冻结”(例如页面加载但不允许用户登录)。我启用了wal归档,以确保在发生类似这样的事情时保留数据,直到链接恢复并且可以发送事务日志...但我不明白为什么我的主pgsql实例似乎锁定因为奴隶实例脱机...有点打败整个复制概念,所以我认为我一定做错了什么?
答案 0 :(得分:1)
最可能的解释是您只使用两个节点进行同步复制。
主服务器上是否设置了synchronous_standby_names
?
如果唯一的同步备用服务器不可用,则主服务器上不能提交任何事务,数据修改事务将“挂起”,这可以解释您观察到的行为。
对于同步复制,您至少需要两个从属。