2017-05-08 42 views
0

私は、バックエンドでpgsqlデータベースを使用している小規模ビジネスのWebベースRORアプリケーションによってホストされるアプリケーションをサポートしています。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) 

...と上の 『スレーブ』:私は、マスターの役割に私のリモートスレーブDBを促進するために持っている必要がありかかわるプロセスを理解

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) 

、BU私が持っているような問題は、リモートスレーブサーバーへのネットワークリンクが2〜3回暴落し、アプリケーションが完全に "フリーズ"していることです(例:ページはロードされますが、ユーザーはログオンできません)、マスターDBがまだ稼動しているにもかかわらず、私はウォールアーカイブを有効にして、このようなことが起きたときに、リンクが復元され、トランザクションログが送信されるまでデータが保存されるようにします...しかし、マスターのpgsqlインスタンスがスレーブインスタンスはオフラインになります...レプリケーションの概念全体が敗北しているので、私は何か間違っていなければならないと思いますか?

+0

「ログオンを許可しない」が発生した場合は、ログからエラーを入力してください。また、1時間の遅れが心配するほど重要だと思う。 –

+0

私が言うことができる限り、時間は「遅れ」ではなく、むしろトランザクションがデータベースに行われてからずっとずっと続いていた。 – tmowbray

答えて

1

ほとんどの場合、2つのノードだけで同期レプリケーションを使用している可能性があります。

synchronous_standby_namesはマスターサーバーに設定されていますか?

唯一の同期スタンバイサーバーが利用できない場合、トランザクションはマスター上でコミットできず、データ変更トランザクションは“がハング”になります。これにより、観察される動作が説明されます。

同期レプリケーションでは、少なくとも2つのスレーブが必要です。

+0

フィードバックのおかげで、これは本当に問題だったようです。 – tmowbray

関連する問題