レプリケーションが失敗しました。もう一度始める方法?


10

UbuntuでPostgres 9.1.6を実行していますが、マスターとスレーブの間でストリーミングレプリケーションをセットアップしています。データベースがクラッシュし、両方のボックスを再起動するまで、すべてがスムーズに実行されていました。

これで、レプリケーションが停止し、両方のボックスのログを確認すると、次のメッセージが表示されます。

CDT FATAL:要求されたWALセグメント0000000100000224000000FAはすでに削除されています

それは何度も同じセグメントです。私のグーグルから、レプリケーションサーバーがマスターからこのセグメントを取得しようとしているように見えますが、それはもうありません。わかりましたが、これを回避する方法は?新しいバックアップを作成し、それをスレーブにrsyncする必要がありますか?スレーブを同期させる簡単な方法はありますか?

回答:


7

はい、マスターの新しいベースバックアップ(ストリーミングレプリケーションの場合は手順1〜4)をスレーブに与える必要があります。

wal_keep_segmentsの値が低すぎるため、問題が発生した可能性があります。この値は、スレーブがしばらくダウンしているときに、マスターがセグメントのリサイクルを開始しないように十分に高くする必要があります。スレーブはまだ処理していません。


1

ストリーミングモードでスレーブをプライマリホストに接続する前に、必要なWALが最初の復元のために復元する場所にあることを確認してください

問題は、WALセグメントが最初の復元のために復元する場所に存在しない場合に発生する可能性があります。

このインスタンスですべて問題がない場合は、でrestore_commandを確認する必要がありますrecovery.conf


0

別の回避策は、プライマリからwal backup_pushを実行し、すぐにスタンバイスレーブからbackip_fetchを実行して、スタンバイを開始することです。


2
このプロセスが機能する理由を拡大してください
RolandoMySQLDBA '11
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.