Menjalankan pg_dump di server siaga yang panas?

21

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:

  1. Apakah saya benar-benar ingin melakukan ini, atau apakah cadangan harus dilakukan di server utama? Mengapa?

  2. 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?

jberryman
sumber
Saya berharap bahwa jika replikasi Anda membuat database siaga dalam keadaan konsisten, cadangan Anda akan konsisten. Seperti yang pg_dumpdinyatakan dalam dokumentasi: "Ini membuat backup konsisten bahkan jika database sedang digunakan secara bersamaan." pg_dumpallmenjalankan yang pertama untuk setiap database.
dezso

Jawaban:

21

AFAIK, menjalankan pg_dumppada 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_dumptransaksi Anda untuk melanjutkan memutar ulang WAL. Lihat dokumentasi pada siaga panas , khususnya bagian "penanganan konflik kueri", max_standby_archive_delaydan max_standby_streaming_delayparameter.

Perhatikan bahwa master harus rela menyimpan cukup arsip WAL untuk memungkinkan budak mengejar ketinggalan.

Craig Ringer
sumber
12
  1. Kami melakukan backup di standby, tidak apa-apa.
  2. Untuk menghindari konflik pernyataan yang dibatalkan selama pencadangan pada sistem siaga, Anda perlu menjeda replikasi saat siaga menggunakan SELECT pg_xlog_replay_pause();, kemudian jalankan pencadangan Anda, setelah selesai jalankan SELECT 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().

Ruslan Kabalin
sumber
0

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

wal_keep_segments = 32      # in logfile segments, 16MB each; 0 disables

Jika Anda tidak memodifikasi ini dan proses pencadangan Anda terlalu lama, mungkin simpul master menghapus file xlog sebelum mengirimnya ke slave.

Pablo Luna
sumber
Pengaturan ini hanya diperlukan untuk replikasi streaming. Saya menggunakan replikasi reguler dan wal disimpan di host siaga, bahkan ketika server Postgres siaga dijeda.
david.perez