Topik temu duga representatif

Temu Duga Kejuruteraan Data: Bagaimanakah Anda Mereka Bentuk Rangkaian Sandaran Tambahan PostgreSQL yang Boleh Disahkan?

DataSukar
Pasukan Editorial Offer.ccDiterbitkan Dikemas kini

Soalan

Sebuah kluster PostgreSQL yang besar memerlukan tetingkap sandaran yang lebih singkat dan kos storan yang lebih rendah. Reka bentuk rangkaian sandaran asas tambahan, terangkan kebergantungan WAL, pg_combinebackup, pengesahan, pengekalan, dan latih tubi pemulihan.

Gesaan dan konteks

Sebuah kluster PostgreSQL yang besar memerlukan tetingkap sandaran penuh yang lebih singkat dan kos storan yang lebih rendah. Reka bentuk rangkaian sandaran asas tambahan (incremental base-backup chain) menggunakan pg_basebackup, dengan menerangkan kebergantungan WAL, manifes sandaran, pg_combinebackup, pengesahan, pengekalan, dan latih tubi pemulihan.

PostgreSQL menyatakan bahawa sandaran tambahan tidak boleh dipulihkan secara langsung: ia mesti digabungkan dengan sandaran terdahulu yang menjadi kebergantungannya menjadi sandaran penuh sintetik (synthetic full). Alat ini menyemak perhubungan tetapi tidak menjejaki kebergantungan untuk anda atau membuktikan setiap sandaran berada dalam keadaan utuh. Temu duga ini menguji bukti kebolehpulihan, bukan sekadar menghafal satu arahan sandaran.

Perkara yang diuji oleh penemu duga

Menerangkan peranan sandaran penuh, tambahan, WAL, dan manifes; sandaran rujukan, rangkaian kebergantungan, dan sandaran penuh sintetik; pg_verifybackup, checksum, versi objek tak boleh ubah (immutable), dan semakan integriti; pemutusan rangkaian, sandaran standby, pengekalan replication-slot/WAL, penyulitan, dan objektif pemulihan. Membuktikan RPO dan RTO melalui latih tubi dan bukannya papan pemuka kejayaan sandaran.

Soalan untuk dijelaskan terlebih dahulu

Objektif pemulihan

Sahkan RPO, RTO, titik masa sasaran, pemulihan rentas rantau, perubahan versi PostgreSQL yang dibenarkan, dan sama ada kluster mempunyai berbilang tablespace.

Beban kerja sandaran

Sahkan saiz penuh, volum perubahan harian, kadar WAL, tetingkap sandaran, lebar jalur rangkaian, kitaran hayat storan objek, dan had keserentakan.

Ketekalan dan pematuhan

Sahkan penyulitan sandaran dan penggiliran kunci, pengekalan tak boleh ubah, kebenaran pemadaman, algoritma checksum manifes, rekod audit, dan kekerapan latih tubi.

Jawapan 30 saat

"Saya bermula dengan sandaran penuh yang boleh disahkan, menjana sandaran tambahan daripada manifes rujukan, dan mengekalkan setiap manifes, rekod kebergantungan, serta segmen WAL yang berterusan. Sandaran tambahan tidak boleh dipulihkan secara langsung: saya menggabungkan rangkaian tersebut mengikut urutan dengan pgcombinebackup, kemudian menggunakan WAL yang diperlukan. Storan objek menggunakan versi tak boleh ubah dan penyulitan, manakala pgverifybackup dan pemulihan sampel mengesahkan kandungan. Jika mana-mana kebergantungan hilang, automasi akan menyekat pemadaman sandaran terdahulunya. Latih tubi saiz sebenar dan kegagalan membuktikan RPO dan RTO dan bukannya bergantung pada kadar kejayaan sandaran."

Jawapan mendalam langkah demi langkah

Langkah 1: Memodelkan rangkaian sandaran

Rekod sandaran penuh, rujukan sandaran bagi setiap sandaran tambahan, julat LSN, manifes, versi kunci, dan URI storan. Setiap nod merujuk kepada prasyaratnya; pengekalan terlebih dahulu mengira titik masa terawal yang masih boleh dipulihkan.

Langkah 2: Menghasilkan sandaran tambahan

pg_basebackup boleh meminta sandaran tambahan menggunakan manifes rujukan; sandaran tambahan mengandungi blok yang diubah sejak rujukan tersebut. Sandaran masih merangkumi keseluruhan kluster dan bukannya satu objek pangkalan data. Sambungan replikasi memerlukan keistimewaan REPLICATION atau hak superuser dan walsender yang mencukupi.

text
full_0 = pg_basebackup(full)
inc_1 = pg_basebackup(incremental, reference=full_0.manifest)
inc_2 = pg_basebackup(incremental, reference=inc_1.manifest)

Langkah 3: Mengekalkan WAL berterusan

WAL yang dijana semasa sandaran asas mesti kekal tersedia. Kaedah stream membuka sambungan replikasi kedua secara selari; kaedah fetch memerlukan wal_keep_size atau pengarkiban untuk mengekalkan WAL yang diperlukan sehingga pemindahan selesai. Replication slot mengurangkan risiko pembuangan pramatang tetapi boleh meningkatkan penggunaan cakera, jadi pantau LSN tertua yang diperlukan.

Langkah 4: Mengesahkan manifes dan perhubungan

pg_combinebackup mengesahkan perhubungan yang sah dalam kalangan sandaran input tetapi bukan integriti setiap sandaran. Jalankan pg_verifybackup dan checksum manifes untuk setiap nod. Daftarkan nod dalam katalog hanya selepas muat naik objek dan pengesahannya selesai.

Langkah 5: Membina input pemulihan

Untuk titik masa sasaran, panggil pg_combinebackup mengikut urutan daripada sandaran penuh hingga sandaran tambahan sasaran untuk menghasilkan sandaran penuh sintetik. Ia boleh dijadikan asas untuk operasi penggabungan seterusnya tetapi tidak menggantikan WAL. Letakkan WAL dari LSN penamat sandaran hingga masa sasaran dalam direktori pemulihan dan konfigurasikan sasaran pemulihan.

Langkah 6: Mengendalikan pemutusan rangkaian dan pengekalan

Penjadual mengekalkan graf kebergantungan dan masa terawal yang boleh dipulihkan. Jika prasyarat hilang, gagal dalam pengesahan checksum, atau kehilangan kuncinya, tandakan semua keturunannya sebagai tidak boleh dipulihkan dan sekat pemadaman automatik bagi prasyarat tersebut. Cipta sandaran penuh baharu atau sandaran penuh sintetik secara berkala untuk mengehadkan panjang rangkaian dan RTO.

Langkah 7: Latih tubi RPO dan RTO

Pulihkan titik masa rawak dalam persekitaran terasing dan semak katalog sistem, tablespace, WAL, sambungan (extensions), dan ketekalan aplikasi. Rekod bait yang dimuat turun, tempoh penggabungan, kadar main semula WAL, masa penyiapan, dan checksum. Suntik ralat 404 storan objek, manifes rosak, pembatalan kunci, dan kegagalan nod utama (primary).

Jawapan model

Saya menganggap sandaran sebagai satu graf kebergantungan: sandaran penuh adalah punca (root), setiap sandaran tambahan merujuk kepada rujukan, dan WAL mengisi titik masa tersebut. Setiap nod menyimpan manifes, checksum, LSN, versi kunci, dan URI objek tak boleh ubah. Pemulihan menggabungkan rangkaian mengikut urutan dengan pgcombinebackup, kemudian memainkan semula WAL yang berterusan; semakan perhubungannya tidak menggantikan semakan kandungan pgverifybackup. Pengekalan mematuhi graf, dan latih tubi merangkumi rangkaian yang terputus, WAL yang hilang, pembatalan kunci, dan berbilang tablespace sebelum kriteria RPO/RTO yang diukur diluluskan.

Kesilapan lazim

  • Kesilapan: Menganggap sandaran tambahan sebagai direktori yang boleh dibut secara langsung. → Sebab ia gagal: Ia bergantung pada sandaran rujukan. → Penyelesaian: Gabungkannya menjadi sandaran penuh sintetik, kemudian gunakan WAL.
  • Kesilapan: Hanya mempercayai larian pg_combinebackup yang berjaya. → Sebab ia gagal: Ia tidak membuktikan setiap input berada dalam keadaan utuh. → Penyelesaian: Sahkan setiap manifes/checksum dan lakukan pemulihan sampel.
  • Kesilapan: Mengekalkan atau memadam sandaran penuh berdasarkan usia semata-mata. → Sebab ia gagal: Sandaran tambahan terkemudian mungkin masih bergantung padanya. → Penyelesaian: Gunakan graf kebergantungan dan masa terawal yang boleh dipulihkan.
  • Kesilapan: Melaporkan kejayaan sandaran tanpa WAL yang berterusan. → Sebab ia gagal: Titik masa sasaran tidak boleh dimainkan semula. → Penyelesaian: Pantau LSN yang diperlukan, ketinggalan arkib (archive lag), dan penggunaan slot.

Soalan susulan dan respons

Apakah perbezaan antara sandaran penuh, penuh sintetik, dan tambahan?

Sandaran penuh ialah salinan fail kluster yang bebas. Sandaran tambahan mengandungi blok yang diubah sejak rujukan. Sandaran penuh sintetik dibina semula daripada rangkaian dan boleh menjadi input pemulihan, tetapi masih memerlukan WAL selepas titik akhir sandaran untuk masa sasaran.

Mengapa tidak memanjangkan rangkaian tambahan selama-lamanya?

Rangkaian yang panjang meningkatkan kos muat turun, penggabungan, pengesahan, dan risiko kegagalan, sekali gus meningkatkan RTO. Masukkan sandaran penuh baharu atau sandaran penuh sintetik berdasarkan kadar perubahan, kos storan, dan data latih tubi.

Apakah yang anda lakukan jika manifes hilang?

Tandakan nod tersebut sebagai tidak tersedia untuk automasi; jangan sekali-kali meneka kebergantungan daripada nama fail. Jika salinan yang dipercayai memulihkan manifes tersebut, sahkan checksum fail, LSN, dan perhubungan rangkaian sebelum mendaftarkannya semula.

Bagaimanakah anda membuktikan penyulitan tidak akan menghalang pemulihan?

Pulihkan sampel secara berkala dalam persekitaran terasing menggunakan kunci semasa dan sejarah, menguji penggiliran, pembatalan, kebenaran, dan akses KMS rentas rantau. Berikan amaran secara eksplisit dan keluarkan titik masa tersebut daripada tuntutan kebolehpulihan apabila kunci tidak tersedia.

Sumber awam

Soalan berkaitan