Penyebaran biru-hijau meningkatkan versi mesin utama ApsaraDB RDS for PostgreSQL dengan memulihkan instans sumber ke instans baru, lalu menjalankan pg_upgrade untuk membawa instans baru ke versi target. Jika Anda melakukan cutover, titik akhir instans sumber secara otomatis beralih ke instans baru — tidak diperlukan perubahan string koneksi pada aplikasi Anda.
Untuk perbandingan semua mode peningkatan yang tersedia, lihat Pengenalan solusi peningkatan versi utama.
Prasyarat
Sebelum memulai, pastikan bahwa:
Instans menjalankan ApsaraDB RDS for PostgreSQL 16 atau versi sebelumnya.
Instans bukan read-only instance atau instans klaster khusus.
Babelfish tidak diaktifkan pada instans (nomor versi mesin minor tidak diakhiri dengan
babelfish).
Penagihan
Saat Anda memulai peningkatan penyebaran biru-hijau, sistem membuat instans baru berdasarkan instans sumber. Kedua instans ditagih secara terpisah hingga Anda melepas instans sumber.
| Metode penagihan instans sumber | Metode penagihan instans baru |
|---|---|
| Subscription atau pay-as-you-go | Pay-as-you-go |
| Serverless | Serverless |
Setelah memastikan layanan Anda berjalan stabil pada instans baru, ubah metode penagihan instans baru menjadi subscription dan lepas atau batalkan langganan instans sumber.
Perhatikan hal berikut sebelum melepas instans sumber:
Jika instans sumber Anda adalah instans subscription yang belum kedaluwarsa, instans baru tidak dapat mewarisi durasi subscription yang tersisa. Melepas instans sumber lebih awal dapat menyebabkan kerugian finansial. Untuk informasi lebih lanjut tentang aturan pengembalian dana, lihat Kebijakan pengembalian dana.
Instans baru tidak mewarisi diskon apa pun yang diterapkan pada instans sumber. Periksa jumlah pengembalian dana spesifik pada halaman pembatalan langganan instans sebelum memutuskan untuk melanjutkan.
Pengembalian dana untuk instans subscription tidak diproses secara real time. Jumlah dan waktu pengembalian dana mengikuti tagihan pembatalan langganan aktual.
Dampak potensial
Tinjau hal berikut sebelum memulai peningkatan.
Gangguan layanan
Saat Anda melakukan penyebaran biru-hijau dengan cutover, instans sumber menjadi read-only selama proses cutover, menyebabkan gangguan koneksi sementara. Lakukan peningkatan selama jam sepi. Jika Anda tidak melakukan cutover, layanan Anda tidak terpengaruh.
Durasi read-only: Bergantung pada jumlah objek database. Jalankan
SELECT count(1) FROM pg_class;untuk memeriksa jumlahnya. Dengan jutaan objek, periode read-only dapat berlangsung puluhan menit atau lebih lama.Durasi gangguan koneksi: Ditentukan oleh waktu refresh cache DNS di sisi client. Gunakan pergantian vSwitch untuk memperkirakan nilai ini sebelumnya.
Durasi total peningkatan: Bergantung pada jumlah objek database. Pantau progres di Task Hub.
Setelah cutover, instans sumber tetap dalam status read-only secara default. Untuk mengizinkan penulisan kembali pada instans sumber, atur parameter rds_force_trans_ro_non_sup ke nilai off. Lihat Atur parameter instans.
Jalur peningkatan lintas versi
Instans PostgreSQL 9.4 dan 10 yang menggunakan disk lokal berkinerja-tinggi hanya dapat ditingkatkan ke disk cloud, dengan PostgreSQL 14 sebagai target langsung maksimum. Untuk mencapai PostgreSQL 15 atau versi lebih baru, tingkatkan terlebih dahulu ke versi antara:
PostgreSQL 9.4: dapat ditingkatkan ke 10, 11, 12, 13, atau 14 sebagai langkah antara.
PostgreSQL 10: dapat ditingkatkan ke 11, 12, 13, atau 14 sebagai langkah antara.
Slot replikasi
Jika instans sumber adalah publisher dengan slot replikasi, slot replikasi tersebut hilang setelah peningkatan.
Jika instans sumber adalah subscriber slot replikasi, peningkatan dapat menyebabkan masalah sinkronisasi data akibat preemption slot replikasi. Lihat FAQ untuk cara mencegah hal ini.
Perubahan IP virtual
Setelah cutover, alamat IP virtual instans baru berubah. Periksa konfigurasi firewall dan konfigurasi aplikasi apa pun yang mereferensikan IP virtual secara langsung. Untuk menghindari kompleksitas ini, konfigurasikan aplikasi Anda menggunakan alamat koneksi instans alih-alih IP virtual.
Perubahan parameter
Parameter yang tidak didukung di versi target secara otomatis dihapus.
Parameter dengan nilai di luar rentang valid untuk versi target diatur ulang ke nilai template default versi target.
Selama peningkatan,
statement_timeoutsementara diatur ke0dan dikembalikan ke nilai aslinya setelah peningkatan selesai.
Tugas DTS
Jika instans merupakan sumber atau tujuan Data Transmission Service (DTS), buat ulang tugas DTS setelah peningkatan.
Kompatibilitas plugin
Peningkatan secara otomatis memperbarui instans ke versi mesin minor terbaru. Verifikasi kompatibilitas plugin sebelum dan sesudah peningkatan.
Pengaturan yang tidak diwariskan oleh instans baru
Instans baru tidak mewarisi nama instans sumber, tag, aturan alert CloudMonitor, atau data backup.
Langkah 1: Jalankan pemeriksaan pra-peningkatan
Masuk ke Konsol ApsaraDB RDS. Di bilah navigasi atas, pilih wilayah tempat instans berada. Temukan instans dan klik ID-nya.
(Opsional) Jika terdapat instans read-only untuk instans sumber, ubah titik akhir instans read-only di aplikasi Anda ke titik akhir instans primary selama jam sepi, lalu hapus instans read-only tersebut.
Menghapus instans read-only sebelum peningkatan diperlukan karena node read-only dan slot replikasi tidak secara otomatis ditransfer ke instans baru. Setelah peningkatan, buat instans read-only baru pada instans baru.
Di panel navigasi kiri, klik Major Version Upgrade.
Jika Major Version Upgrade tidak terlihat, verifikasi bahwa instans Anda memenuhi prasyarat yang tercantum di atas.
Di tab Upgrade Check, klik Create upgrade check report.
Pilih versi target, atur Upgrade Mode ke Blue-green Deployment, lalu klik OK. Status instans berubah menjadi Maintaining Instance. Setelah pemeriksaan selesai, status kembali menjadi Running.
Tinjau hasil laporan pemeriksaan:
Success atau Warning: lanjutkan ke Langkah 2.
Failed: klik View Information, perbaiki masalah yang teridentifikasi, lalu jalankan ulang pemeriksaan.
Penting- Untuk hasil Warning, perbaiki semua item yang ditandai dan jalankan ulang pemeriksaan hingga hasilnya Success. - Jika Anda membuat plugin pada instans primary setelah pemeriksaan berhasil, jalankan ulang pemeriksaan sebelum melanjutkan.
Langkah selanjutnya
Jika Anda melakukan peningkatan menggunakan metode penyebaran biru-hijau (cutover), setelah memastikan layanan Anda berjalan stabil pada instans baru, lepas instans sumber. Ubah metode penagihan instans baru menjadi subscription untuk menghemat biaya.
Melepas instans subscription sebelum masa berlaku habis dapat menyebabkan kerugian finansial. Instans baru tidak mewarisi diskon apa pun dari instans sumber. Pengembalian dana mengikuti tagihan pembatalan langganan aktual dan tidak diproses secara real time.
(Opsional) Jika Anda menghapus instans read-only sebelum peningkatan, buat ulang pada instans baru:
Buat instans read-only PostgreSQL pada instans baru.
Di aplikasi Anda, perbarui titik akhir agar mengarah ke instans read-only baru.
Referensi API
| Operasi API | Deskripsi |
|---|---|
| UpgradeDBInstanceMajorVersionPrecheck | Menjalankan pemeriksaan pra-peningkatan untuk peningkatan versi utama |
| DescribeUpgradeMajorVersionPrecheckTask | Menanyakan laporan pemeriksaan pra-peningkatan |
| UpgradeDBInstanceMajorVersion | Meningkatkan versi mesin utama |
| DescribeUpgradeMajorVersionTasks | Menanyakan riwayat tugas peningkatan versi utama |
Referensi
FAQ
Apakah saya dapat memodifikasi instans selama peningkatan versi utama?
Tidak. Instans tidak dapat dimodifikasi selama peningkatan sedang berlangsung. Modifikasi hanya tersedia setelah peningkatan selesai.
Apakah peningkatan versi utama otomatis didukung?
Tidak. Peningkatan versi utama harus dipicu secara manual.
Apakah downgrade versi utama didukung?
Tidak. Downgrade tidak didukung setelah peningkatan versi utama. Untuk menjalankan versi yang lebih rendah, beli instans baru pada versi tersebut dan gunakan Data Transmission Service (DTS) untuk memigrasikan data Anda.
Setelah peningkatan versi utama, saya mendapatkan konflik `raster_overviews` saat membuat view di instans baru. Bagaimana cara memperbaikinya?
Masalah ini terjadi ketika versi PostGIS lebih awal dari 2.5.2 dan Anda meningkatkan dari PostgreSQL 10 atau 11 ke PostgreSQL 12 tanpa terlebih dahulu meningkatkan plugin PostGIS.
Langkah 1: Tingkatkan plugin PostGIS pada instans sumber.
Jalankan perintah berikut dua kali untuk memastikan peningkatan berhasil:
SELECT PostGIS_Extensions_Upgrade();
SELECT PostGIS_Extensions_Upgrade();Langkah 2: Pilih perbaikan berdasarkan apakah Anda menggunakan plugin PostGIS Raster.
Jika plugin PostGIS Raster sedang digunakan:
Pada instans sumber, lepaskan view
raster_overviewsdari ekstensi dan ganti dengan placeholder:ALTER EXTENSION PostGIS_Raster DROP VIEW raster_overviews; CREATE OR REPLACE VIEW raster_overviews AS SELECT 1;Tingkatkan instans PostgreSQL ke minimal PostgreSQL 12.
Setelah peningkatan, buat ulang view pada instans baru:
CREATE OR REPLACE VIEW raster_overviews AS SELECT current_database() AS o_table_catalog, n.nspname AS o_table_schema, c.relname AS o_table_name, a.attname AS o_raster_column, current_database() AS r_table_catalog, split_part( split_part(s.consrc, '''::name', 1), '''', 2 )::name AS r_table_schema, split_part( split_part(s.consrc, '''::name', 2), '''', 2 )::name AS r_table_name, split_part( split_part(s.consrc, '''::name', 3), '''', 2 )::name AS r_raster_column, trim( both from split_part(s.consrc, ',', 2) )::integer AS overview_factor FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n, ( SELECT connamespace, conrelid, conkey, pg_get_constraintdef(oid) As consrc FROM pg_constraint ) AS s WHERE t.typname = 'raster'::name AND a.attisdropped = false AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND c.relkind = ANY( ARRAY[ 'r'::char, 'v'::char, 'm'::char, 'f'::char ] ) AND s.connamespace = n.oid AND s.conrelid = c.oid AND s.consrc LIKE '%_overview_constraint(%' AND NOT pg_is_other_temp_schema(c.relnamespace) AND has_table_privilege(c.oid, 'SELECT'::text); ALTER EXTENSION PostGIS_Raster ADD VIEW raster_overviews;
Jika plugin PostGIS Raster tidak digunakan:
Letakkan plugin pada instance sumber:
DROP EXTENSION PostGIS_Raster;Tingkatkan instans PostgreSQL ke minimal PostgreSQL 12.
Bagaimana cara mencegah inkonsistensi data akibat preemption slot replikasi selama peningkatan?
Jika instans sumber adalah subscriber slot replikasi, slot replikasi dapat diambil alih oleh instans baru selama peningkatan, yang dapat menyebabkan inkonsistensi data.
Untuk menyimpan data subscription pada instans sumber (versi lebih rendah): pastikan instans sumber tidak gagal akibat beban berlebih selama peningkatan untuk mencegah slot replikasi diambil alih. Setelah peningkatan selesai, nonaktifkan subscription pada instans baru:
\c your_database
ALTER SUBSCRIPTION your_subscription_name DISABLE;Untuk mempertahankan data subscription pada instans baru (versi lebih tinggi): nonaktifkan subscription pada instans sumber sebelum memulai peningkatan, lalu aktifkan kembali pada instans baru setelah peningkatan selesai.
Nonaktifkan pada instans sumber:
\c your_database
ALTER SUBSCRIPTION your_subscription_name DISABLE;Aktifkan pada instans baru:
\c your_database
ALTER SUBSCRIPTION your_subscription_name ENABLE;Untuk informasi lebih lanjut, lihat Logical Subscription dan Change Tracking.
Bagaimana cara menangani inkonsistensi data subscription setelah peningkatan?
Jika inkonsistensi telah terjadi, gunakan pendekatan berikut untuk menyelaraskan:
Pada instans baru, hapus data tabel yang terdampak, buat ulang subscription dengan
copy_data=true. Untuk detailnya, lihat ALTER SUBSCRIPTION.Gunakan
ON CONFLICTuntuk mengimpor data dari instans sumber. Contoh berikut menunjukkan cara menangani skenario konflik berbeda:CREATE TABLE my_tbl(id INT PRIMARY KEY, t TIMESTAMP, val TEXT); INSERT INTO my_tbl VALUES (1, CURRENT_TIMESTAMP, 'a'); INSERT INTO my_tbl VALUES (2, CURRENT_TIMESTAMP, 'b'); INSERT INTO my_tbl VALUES (3, CURRENT_TIMESTAMP, 'c'); -- Timestamp lebih baru: perbarui baris yang ada INSERT INTO my_tbl VALUES (1, CURRENT_TIMESTAMP, 'd') ON CONFLICT(id) DO UPDATE SET t = excluded.t, val = excluded.val WHERE my_tbl.t < excluded.t; -- Timestamp lebih lama: pertahankan baris yang ada INSERT INTO my_tbl VALUES (2, CURRENT_TIMESTAMP - '10 hours'::interval, 'e') ON CONFLICT(id) DO UPDATE SET t = excluded.t, val = excluded.val WHERE my_tbl.t < excluded.t; -- Baris baru: sisipkan langsung INSERT INTO my_tbl VALUES (5, CURRENT_TIMESTAMP - '10 hours'::interval, 'f') ON CONFLICT(id) DO UPDATE SET t = excluded.t, val = excluded.val WHERE my_tbl.t < excluded.t;
Mengapa saya perlu menghapus instans read-only sebelum peningkatan?
Node read-only dan slot replikasi pada instans sumber tidak secara otomatis ditransfer ke instans baru setelah peningkatan. Menghapus instans read-only sebelum peningkatan mencegah konflik titik akhir dan memastikan cutover yang bersih. Setelah peningkatan, buat instans read-only baru pada instans baru dan perbarui titik akhir aplikasi Anda sesuai.