4つのDebian 8 Jessieサーバーに、PostgreSQL 9.4.3マスター+ 3つのスレーブがあります。マスターで大幅なデータ変更を行った後、スレーブログに次のエラーが表示されました。
LOG: started streaming WAL from primary at 182/0 on timeline 1 FATAL: could not receive data from WAL stream: ERROR: requested WAL segment 000000010000018200000000 has already been removed
スレーブを復元/再構築するにはどのような手順が必要ですか?
archive_command
を設定し、WALセグメントを別の場所に保存している場合は、WALアーカイブの各セカンダリのrestore_command
にrecovery.conf
を指定するだけで、それらを取得できます。次に必要なセグメントと幸せに続けます。
archive_command
を設定していない場合は、セカンダリのそれぞれでpg_basebackup
を取得する必要があります。そのWALセグメントがないと、セカンダリに追いつくことができないためです。 9.4を使用しているので、レプリケーションスロットもセットアップすることをお勧めします。これにより、プライマリがストリーミングレプリカに必要なWALセグメントをリサイクルできなくなります。
レプリケーションスロット のドキュメントでこれについて詳しく知ることができます。
それ以外の場合は、WALを他の場所に保存して追いつくためにarchive_command
を設定する必要があります。または、システムの高負荷時にファイルをリサイクルしないように、プライマリでwal_keep_segments
を十分に高く調整する必要があります。
archive_command
でのpostgresql.conf
の設定については、 継続的なアーカイブとポイントインタイムリカバリ のドキュメントで説明しています。
現在の状況と同様の状況の例とそれを防ぐための1つの潜在的な解決策については、 オフサイトレプリケーションの問題とその解決方法 で説明しています。
うまくいけば、これはレプリカを動作状態に戻すのに十分な情報です。 =)