Persiapan untuk upgrade Postgres
- Penilaian risiko: Buat daftar risiko yang dapat muncul selama proses upgrade dan urutkan berdasarkan tingkat kepentingannya.
- Mencari cara mitigasi risiko: Pertimbangkan solusi yang dapat sepenuhnya menghilangkan risiko atau menyebarkannya seiring waktu.
- Memperbarui daftar risiko: Perbarui daftar saat risiko baru ditemukan selama proyek berlangsung.
Tentang pemantauan dan metrik
- Pemantauan sistem: Gunakan alat yang menyeluruh untuk memantau kesehatan database dan sistem.
- Mengamati metrik inti: Pantau metrik utama seperti transaction ID, penggunaan CPU, sesi yang menunggu, latensi query, dan latensi respons API.
Opsi upgrade Postgres
Upgrade in-place (tidak cocok untuk upgrade zero downtime)
- Keterbatasan upgrade in-place: Saat dijalankan di AWS RDS, database perlu di-reboot, dan waktu yang dibutuhkan bergantung pada jumlah data.
Upgrade berbasis replikasi
- Memilih upgrade berbasis replikasi: Memungkinkan tahap migrasi bertahap, pengujian database baru dengan workload dan data nyata, serta kendali yang lebih baik atas proses upgrade.
- Menyiapkan database sumber dan tujuan: Atur replication slot, dan setel
wal_level ke logical.
Memilih metode replikasi tabel
Replikasi tabel "kecil"
- Replikasi tabel kecil: Dapat direplikasi dengan penambahan sederhana dan refresh subscription.
Tabel besar yang hanya append
- Replikasi tabel append-only: Setel opsi
copy_data ke false agar hanya perubahan di masa depan yang direplikasi, lalu lakukan backfill data lama dari backup.
Tabel besar dengan banyak update
- Replikasi tabel besar dengan banyak update: Kecilkan ukuran tabel, jalankan
VACUUM, dan pertimbangkan partisi tabel.
Memeriksa status replikasi tabel
- Memantau status replikasi: Periksa status replikasi melalui tabel sistem
pg_subscription_rel, dan disarankan mereplikasi satu tabel pada satu waktu.
Menghentikan replikasi
- Cara menghentikan replikasi: Jika perlu, replikasi tabel dapat dihentikan dan di-rollback dengan refresh subscription.
Perhatian tentang pemindahan replication slot
- Masalah pemindahan replication slot: LSN dari replication slot bersifat unik untuk database asal, sehingga tidak bisa langsung disalin ke database baru.
Menyelesaikan migrasi
- Memverifikasi konsistensi tabel: Pastikan jumlah baris tabel cocok di kedua database, dan bila perlu verifikasi konsistensi data dengan sampling acak.
Perubahan di level aplikasi
- Mengubah koneksi database: Ubah aplikasi agar terhubung ke database baru, dan siapkan strategi pengalihan traffic.
Catatan tambahan tentang sequence
- Sinkronisasi sequence: Nilai sequence tidak disinkronkan selama proses replikasi, sehingga nilai sequence perlu disetel secara manual.
Checklist pemeriksaan akhir
- Pemeriksaan akhir: Kecocokan tabel, status subscription, kecocokan skema, ukuran database, penambahan replika, pembangunan ulang indeks, pengujian performa, penilaian risiko, dan latihan di lingkungan staging.
Peralihan akhir
- Menjalankan peralihan akhir: Lakukan replikasi tabel pada malam hari, berlatih beberapa kali di lingkungan staging, lalu lakukan pemeriksaan akhir dan pengalihan flag.
Opini GN⁺
- Pentingnya: Knock berhasil menjalankan proses kompleks upgrade dari Postgres 11.9 ke 15.3 tanpa downtime. Ini menjadi tonggak penting dalam pengelolaan database dan ketersediaan layanan.
- Menarik: Pendekatan upgrade berbasis replikasi memungkinkan administrator database melakukan transisi yang mulus ke database baru, dan hal ini dapat menarik minat besar dari komunitas teknis.
- Seru: Proses upgrade Knock menunjukkan praktik terbaik dalam mengatasi tantangan teknis yang kompleks melalui manajemen risiko yang sistematis dan pemecahan masalah.
1 komentar
Komentar Hacker News
Ada cara yang lebih baik daripada menyalin tabel berukuran besar.
Pendekatan yang disajikan di sini menarik dan terdokumentasi dengan baik, tetapi saya tidak setuju dengan kalimat "pelanggan modern mengharapkan ketersediaan 100%".
AWS sekarang mendukung deployment blue-green.
Saya menulis alat yang mengotomatiskan sebagian besar masalah ini.
Di hava.io, kami sedang bermigrasi dari AWS RDS PostgreSQL 11.13 ke 15.5.
Saya mempertanyakan klaim bahwa downtime dalam bentuk apa pun tidak dapat diterima untuk layanan Knock.
Saya terkejut bahwa replikasi tidak bisa diinisialisasi dari backup.
Ada yang tertarik dengan alat all-in-one yang bisa melakukan update Postgres tanpa downtime hanya dengan memasukkan kredensial database?
Pembahasan tentang penggunaan sequence cukup menarik.
Sebagai lelucon, masalah yang muncul dalam sistem terdistribusi bisa diselesaikan dengan sleep(1000) yang tepat.