2016-11-21 28 views
0

プライマリサーバーPostgreSQLのホットスタンバイWALファイルの復元がどのように起動されますか?

# postgresql.conf 
wal_level = hot_standby 
archive_mode = on 
archive_timeout = 10 
archive_command = 'test ! -f /archive/%f && cp %p /archive/%f' 

スタンバイサーバ

hot_standby = on 

私はスタンバイに$PGDATA/pg_xlogにプライマリサーバで/archive/*をコピーして、何も起こりません。

2016-11-21 17:56:09 CST [17762-3] LOG: invalid primary checkpoint record 
2016-11-21 17:56:09 CST [17762-4] LOG: record with zero length at 0/6000100 
2016-11-21 17:56:09 CST [17762-5] LOG: invalid secondary checkpoint record 
2016-11-21 17:56:09 CST [17762-6] PANIC: could not locate a valid checkpoint record 
2016-11-21 17:56:09 CST [17761-1] LOG: startup process (PID 17762) was terminated by signal 6: Aborted 
2016-11-21 17:56:09 CST [17761-2] LOG: aborting startup due to startup process failure 

質問:私は、スタンバイサーバを再起動すると、私は、サーバログからのエラーメッセージまし

  1. それは十分に単純に$PGDATA/pg_xlogにプライマリサーバで/archive/*をコピーすることによって、スタンバイサーバーにデータを同期することですスタンバイ?

  2. ホットスタンバイサーバーでトリガーされたWALファイルを復元する方法と時期はいつですか?スタンバイサーバは定期的に$PGDATA/pg_xlogディレクトリに新しいWALファイルをチェックしていますか?それとも手動で起動する必要がありますか?私はおよそホットスタンバイを、話している

  3. ないストリーミングレプリケーション。だから私はconninfoを設定する必要はないと仮定します。私は正しい?

  4. hot_standby = onを設定してサーバを再起動した後でも、エラーなしでINSERTを実行できます。本当に読み取り専用にするにはどうすれば設定できますか?

答えて

2

これは、スタンバイデータベースを正しく初期化していないようです。

ログファイルには、開始する有効なチェックポイントが見つからないため、PostgreSQLも複製を開始しないと記載されています。

スタンバイのデータディレクトリにあるbackup_labelファイルには何が含まれていますか?そのファイルが存在しない場合、それはおそらく問題です。

スタンバイが突然動作を停止したのですか、まったく動作しませんでしたか? スタンバイはどのくらい正確に作成しましたか?

+0

ステップスタンバイを作成する手順は次のとおりです。1. 'psql postgres -c" pg_start_backup( 'backup') "を選択します。 2. $ PGDATAディレクトリをスタンバイのファイルシステムにコピーします。 3. 'psql postgres -c" pg_stop_backup() "を選択します。 4. 'postgresql.conf'に' hot_standby = on'を設定します。 5. postgresqlサーバを再起動します。 –

+0

これはうまく見えます( 'fsync = on'がある場合)。おそらくあなたは十分なWALアーカイブをコピーしておらず、 'backup_label'からのチェックポイントを含むものは存在しないでしょう。あなたは 'backup_label'ファイルを持っていますよね? 「START WAL LOCATION」の項目を読み、対応するWALファイルがあることを確認します。 –

1

まず、マスターの低レベルベースバックアップからスタンバイを作成する必要があります。 できません新しいインスタンスを作成し、pg_dumppg_restoreを使用します。私はあなたがやろうとしたことを推測しています。

適切なベースバックアップを実行する最も簡単な方法は、pg_basebackupを使用することです。その他のオプションは、マニュアルで説明しますが、実際には、単に使用されています

pg_basebackup -X stream -D standby_datadir_location -h master_ip 

または類似します。

有効な基本バックアップを取得した後でのみ、アーカイブの復元またはストリーミングの複製を開始できます。最も簡単な方法は、ストリーミングの複製を有効にすることです。 pg_basebackupは、-Rフラグを渡すことでそれを行います。

アーカイブリカバリを実行する場合は、アーカイブ場所からスタンバイにアーカイブをコピーするrecovery.confrestore_commandを追加する必要があります。

the manualですべてがカバーされています。

関連する問題