1 台のマシンに 2 台の PostgreSQL サーバーをセットアップし、ストリーミング レプリケーションを実行しようとしています。私は一度成功しましたが、まったく同じ手順に従って再試行してもうまくいきません..これらは手順です: /データ2
- 2 つのノードをセットアップします。
initdb -D $PGDATA
initdb -D $STANDBY
マスター ノードで、レプリケーション用のユーザーを作成します。私はpgAdminでそれを行います(スーパーユーザー権限があります)
pg_hba.conf のマスター ノードで、スタンバイが接続できるようにする部分を追加します。
host replication repuser 127.0.0.1/0 md5
- postgresql.conf セットのマスター ノードで:
max_wal_senders = 1
archive_mode = on
archive_command = 'cp %p ~/postgresql/backup/archivedir/%f'
wal_level = archive
wal_keep_segments = 32
- マスター ノードを起動し、ベース バックアップを実行します。
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 ファイルがアーカイブされたことを示しています
- スタンバイ (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"'
- マスター ノードを起動してから、スタンバイ ノードを起動します。レプリケーションが開始され、スタンバイがマスターに追いつくはずです。それがまさに最初に起こったことでした。スタンバイを開始すると、「アドレスは既に使用されています」というエラーが表示されます。もちろん、スタンバイとマスターの両方に、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 分ほど変化しなくなります。
私が最初にやったに違いない何かが書き留められていないか何かがあると確信していますが、それが何であったかを言うのは完全に途方に暮れています。助けていただければ幸いです。