Penafian: Saya mengakui belum mencoba ini, tetapi saya tidak yakin saya akan tahu apakah itu tidak berfungsi dengan benar, jadi saya ingin bertanya.
Saya ingin menjalankan pekerjaan pencadangan malam (via pg_dumpall
) dari server siaga yang panas yang menjalankan replikasi streaming, untuk menghindari meletakkan beban itu pada yang utama. Saya hanya melihat penyebutan beberapa gotchas yang dilakukan orang, misalnya di sini dan di sini , tetapi sedikit sekali bimbingan. Tidak apa-apa jika cadangan sedikit tertinggal di belakang, asalkan konsisten (yang seharusnya).
Pertanyaan saya adalah:
Apakah saya benar-benar ingin melakukan ini, atau apakah cadangan harus dilakukan di server utama? Mengapa?
Saat melakukan dump pada siaga, pengaturan apa yang saya butuhkan dan prosedur yang harus saya gunakan untuk melakukannya dengan benar? mis. haruskah saya menghentikan replikasi selama durasi cadangan?
sumber
pg_dump
dinyatakan dalam dokumentasi: "Ini membuat backup konsisten bahkan jika database sedang digunakan secara bersamaan."pg_dumpall
menjalankan yang pertama untuk setiap database.Jawaban:
AFAIK, menjalankan
pg_dump
pada siaga panas adalah salah satu hal utama yang berguna untuk standar. Ini sangat aman, meskipun tidak sepenuhnya dapat diandalkan - kesedihan dapat gagal jika siaga membatalkan transaksi ketika itu jatuh terlalu jauh di belakang master.Satu-satunya hal yang benar-benar perlu Anda perhatikan adalah memastikan siaga saat ini dan terus mengikuti. Jika siaga kehilangan koneksinya menjadi master dan tertinggal terlalu jauh, Anda tidak ingin membuat cadangan dengan cadangan selama tiga minggu yang sudah ketinggalan zaman.
Anda harus membiarkan siaga berada jauh di belakang master selama pencadangan, karena jika tidak maka harus membatalkan
pg_dump
transaksi Anda untuk melanjutkan memutar ulang WAL. Lihat dokumentasi pada siaga panas , khususnya bagian "penanganan konflik kueri",max_standby_archive_delay
danmax_standby_streaming_delay
parameter.Perhatikan bahwa master harus rela menyimpan cukup arsip WAL untuk memungkinkan budak mengejar ketinggalan.
sumber
SELECT pg_xlog_replay_pause();
, kemudian jalankan pencadangan Anda, setelah selesai jalankanSELECT pg_xlog_replay_resume();
untuk melanjutkan replikasi. Perlu diingat bahwa menjalankan perintah di atas akan menyebabkan pemulihan lag pada slave, yang mungkin cukup besar, tergantung pada ukuran database Anda. Juga, pertimbangkan ruang yang akan diambil segmen WAL, karena mereka tidak akan diputar ulang pada slave selama jeda.Anda dapat menemukan beberapa fungsi administrasi berguna lainnya dalam dokumentasi . Misalnya, memeriksa apakah server sebenarnya dalam pemulihan, sebelum berhenti itu:
SELECT pg_is_in_recovery()
.sumber
Jika Anda menjeda replikasi selama pencadangan, (Ini adalah ide bagus untuk menjaga integritas dan konsistensi), Anda dapat mengedit beberapa baris di postgresql master Anda:
Berapa banyak waktu yang menunda cadangan Anda biasanya. Pastikan bahwa master node menyimpan seluruh file x_log yang diperlukan untuk melanjutkan replikasi. Anda dapat melakukannya dalam pengeditan postgresql.conf
Jika Anda tidak memodifikasi ini dan proses pencadangan Anda terlalu lama, mungkin simpul master menghapus file xlog sebelum mengirimnya ke slave.
sumber