4

1 台のマシンに 2 台の PostgreSQL サーバーをセットアップし、ストリーミング レプリケーションを実行しようとしています。私は一度成功しましたが、まったく同じ手順に従って再試行してもうまくいきません..これらは手順です: /データ2

  1. 2 つのノードをセットアップします。

initdb -D $PGDATA

initdb -D $STANDBY

  1. マスター ノードで、レプリケーション用のユーザーを作成します。私はpgAdminでそれを行います(スーパーユーザー権限があります)

  2. pg_hba.conf のマスター ノードで、スタンバイが接続できるようにする部分を追加します。

host replication repuser 127.0.0.1/0 md5

  1. postgresql.conf セットのマスター ノードで:

max_wal_senders = 1

archive_mode = on

archive_command = 'cp %p ~/postgresql/backup/archivedir/%f'

wal_level = archive

wal_keep_segments = 32

  1. マスター ノードを起動し、ベース バックアップを実行します。

psql -d dellstore2 -c "SELECT pg_start_backup('backup for replication', true)"

rsync -av ${PGDATA}/ $STANDBY --exclude postmaster.pid

psql -d dellstore2 -c "select pg_stop_backup()"

pg_stop_backup は、すべて問題なく、すべての WAL ファイルがアーカイブされたことを示しています

  1. スタンバイ (data2) ノードで、recovery.conf を次のように作成します。

standby_mode = 'on'

primary_conninfo = 'host=127.0.0.1 port=5432 user=repuser password=haslo'

trigger_file = '/home/michau/postgresql/replication.trigger'

restore_command = 'cp /home/michau/postgresql/backup/archivedir/%f "%p"'

  1. マスター ノードを起動してから、スタンバイ ノードを起動します。レプリケーションが開始され、スタンバイがマスターに追いつくはずです。それがまさに最初に起こったことでした。スタンバイを開始すると、「アドレスは既に使用されています」というエラーが表示されます。もちろん、スタンバイとマスターの両方に、postgresql.conf で指定された同じポートがあります (まったく同じ postgresql.conf ファイルがあります)。スタンバイのポートをたとえば 5433 に変更すると、次のようになります。

LOG: database system was shut down in recovery at 2012-06-12 19:48:01 CEST

LOG: entering standby mode

cp: cannot stat /home/michau/postgresql/backup/archivedir/000000010000000000000007: No such file or directory

LOG: consistent recovery state reached at 0/7000070

LOG: record with zero length at 0/7000070

cp: cannot stat /home/michau/postgresql/backup/archivedir/000000010000000000000007: No such file or directory

LOG: streaming replication successfully connected to primary

LOG: redo starts at 0/7000070

そして、それはここにぶら下がっています。ps -ef | の実行 grep postgresql の結果:

michau 2491 1898 0 19:46 pts/0 00:00:00 postgres -D /home/michau/postgresql/9.1/data

michau 2493 2491 0 19:46 ? 00:00:01 postgres: writer process

michau 2494 2491 0 19:46 ? 00:00:00 postgres: wal writer process

michau 2495 2491 0 19:46 ? 00:00:00 postgres: autovacuum launcher process

michau 2496 2491 0 19:46 ? 00:00:00 postgres: archiver process last was 000000010000000000000008

michau 2497 2491 0 19:46 ? 00:00:00 postgres: stats collector process

michau 2571 2214 0 19:49 pts/1 00:00:00 postgres -D /home/michau/postgresql/9.1/data2

michau 2572 2571 0 19:49 ? 00:00:01 postgres: startup process recovering 000000010000000000000009

michau 2575 2571 0 19:49 ? 00:00:01 postgres: writer process

michau 2578 2571 0 19:49 ? 00:00:02 postgres: wal receiver process streaming 0/99782DC

michau 2579 2491 0 19:49 ? 00:00:00 postgres: wal sender process repuser 127.0.0.1(42142) streaming 0/99782DC

michau 2586 2491 0 19:51 ? 00:00:00 postgres: michau postgres ::1(49941) idle

michau 2587 2491 0 19:51 ? 00:00:01 postgres: michau dellstore2 ::1(49942) idle

回復中の 0000000010000009 はしばらく変化しますが、30 分ほど変化しなくなります。

私が最初にやったに違いない何かが書き留められていないか何かがあると確信していますが、それが何であったかを言うのは完全に途方に暮れています。助けていただければ幸いです。

4

2 に答える 2

3

上記の手順を実行したところ、投稿したとおりのエラーが表示されましたが、問題を解決できました。

あなたの手順をこのサイト http://www.debian-administration.org/article/How_to_setup_Postgresql_9.1_Streaming_Replication_Debian_Squeezeに投稿された手順とマージしようとしました

投稿した手順に加えて、提供したサイトからさらに 2 つの手順を追加しました。2つのステップは次のとおりです。

  • マスター サーバーからそれらを rsync する前に、スタンバイ サーバー内のすべてのファイルとフォルダーを削除します。
  • マスターの postgresql.conf で、wal_level を archive ではなく hot_standby に設定し、hot_standby を on に設定します。
于 2012-10-29T08:14:30.457 に答える
0

スタンバイは継続的に回復しています。これは、PostgreSQL でストリーミング レプリケーションが機能する方法とまったく同じです。スタンバイにログインしてクエリを実行できますか? もしそうなら、おめでとう、それは働いています。そうでない場合は、代わりに何が起こるかを投稿してください。

于 2012-09-08T06:26:02.443 に答える