Replikasi telah gagal; bagaimana cara melanjutkan lagi?

10

Saya menjalankan Postgres 9.1.6 di Ubuntu dan saya memiliki pengaturan replikasi streaming antara master dan slave. Semuanya telah berjalan dengan lancar sampai database macet dan kami harus me-restart kedua kotak.

Sekarang, replikasi telah berhenti dan ketika memeriksa log di kedua kotak, saya melihat pesan ini:

CDT FATAL: segmen WAL yang diminta 0000000100000224000000FA telah dihapus

Ini segmen yang sama berulang-ulang. Dari Googling saya, tampaknya server replikasi sedang mencoba mengambil segmen ini dari master, tetapi tidak ada lagi. Ok, tapi bagaimana cara menyiasatinya? Apakah saya perlu membuat cadangan baru dan menambahkannya ke slave? Apakah ada cara mudah untuk membuat budak kembali sinkron?

Mark Hoffman
sumber

Jawaban:

7

Ya, Anda harus memberi budak cadangan basis baru (untuk streaming replikasi hanya langkah 1 hingga 4) dari master.

Masalah Anda mungkin telah terjadi karena nilai wal_keep_segments adalah rendah. Nilai harus cukup tinggi sehingga ketika budak turun untuk beberapa waktu master tidak akan memulai daur ulang segmen budak belum diproses.

Eelke
sumber
1

Harap verifikasi bahwa WAL yang diperlukan ada di lokasi tempat Anda memulihkan untuk pemulihan awal sebelum menghubungkan budak ke host utama dalam mode streaming

Masalah Anda dapat terjadi ketika segmen WAL doot ingot ada di lokasi dari mana Anda memulihkan untuk pemulihan awal.

Jika semuanya baik-baik saja dalam hal ini, maka Anda harus memeriksa restore_command di recovery.conf.

Kishor Hargude
sumber
0

pekerjaan lain di sekitar adalah melakukan wal backup_push dari primer dan segera melakukan backip_fetch dari standby slave dan mulai siaga.

Nathn
sumber
2
Silakan perluas mengapa proses ini bekerja
RolandoMySQLDBA