pg_upgrade
. Petunjuk di halaman ini menjelaskan langkah-langkah upgrade untuk
AlloyDB Omni yang di-deploy sebagai server mandiri dan untuk
AlloyDB Omni yang dikonfigurasi sebagai node standby yang direplikasi. Penggunaan
pg_upgrade
membantu memastikan bahwa upgrade selesai tanpa kehilangan data.
Untuk mengetahui informasi selengkapnya tentang opsi upgrade PostgreSQL, lihat pg_upgrade.
Sebelum memulai
- Sebelum memulai upgrade, sebaiknya buat cadangan lengkap cluster database Anda.
Untuk memastikan layanan AlloyDB Omni 15 berjalan, jalankan perintah berikut:
Docker
docker exec ALLOYDB15_CONTAINER psql -U postgres -c "SELECT 1;"
Podman
podman exec ALLOYDB15_CONTAINER psql -U postgres -c "SELECT 1;"
Ekstensi
pg_squeeze
di PostgreSQL 15 tidak didukung di AlloyDB Omni PostgreSQL 16.8.0. Jikapg_squeeze
ada di penginstalan AlloyDB Omni 15, Anda harus menghapus ekstensi sebelum melakukan upgrade ke AlloyDB Omni 16.Jika Anda menginstal ekstensi kustom di atas AlloyDB Omni, pastikan ekstensi kustom tersebut juga diinstal di image 16.8.0. Periksa ekstensi yang diinstal dengan menjalankan perintah berikut:
Docker
docker exec ALLOYDB15_CONTAINER psql -U postgres -d postgres -c " SELECT * FROM pg_extension;"
Podman
podman exec ALLOYDB15_CONTAINER psql -U postgres -d postgres -c " SELECT * FROM pg_extension;
Jika Anda mengupgrade dari AlloyDB Omni versi 15.5.2 atau yang lebih lama, Anda harus mengupgrade terlebih dahulu ke AlloyDB Omni 15 versi yang lebih baru. Migrasikan dari AlloyDB Omni versi 15.5.2 dan yang lebih lama ke versi terbaru.
Mengupgrade AlloyDB Omni di lingkungan container Docker
Untuk mengupgrade dari AlloyDB Omni PostgreSQL 15 ke AlloyDB Omni PostgreSQL 16.8.0 di lingkungan container Docker atau Podman, ikuti langkah-langkah berikut:
Docker
Salin
bin
dan bagikan direktori dari versi penampung AlloyDB Omni yang ingin Anda upgrade:mkdir -p TMP/alloydb15_bin TMP/alloydb15_share docker cp ALLOYDB15_CONTAINER:/usr/lib/postgresql/15 TMP/alloydb15_bin docker cp ALLOYDB15_CONTAINER:/usr/share/postgresql/15 TMP/alloydb15_share
Buat direktori data baru untuk container AlloyDB Omni PostgreSQL 16 tempat data yang diupgrade akan disimpan:
mkdir -p DATA_PATH/16/data chown 999 DATA_PATH/16/data
Mulai container yang menjalankan AlloyDB Omni PostgreSQL 16 dengan semua jalur yang di-mount di jaringan yang sama dengan container AlloyDB Omni sebelumnya. Lihat contoh berikut:
docker run -d --name ALLOYDB16_CONTAINER \ -e POSTGRES_PASSWORD=PASSWORD -e PGPORT=5433 \ -v DATA_PATH/16/data:/var/lib/postgresql/data \ -v DATA_PATH/15/data:/var/lib/postgresql/old_data \ -v TMP/alloydb15_bin/15:/usr/lib/postgresql/15 \ -v TMP/alloydb15_share/15:/usr/share/postgresql/15 \ --network container:ALLOYDB15_CONTAINER \ google/alloydbomni:IMAGE_TAG /bin/sleep infinity
Lakukan inisialisasi direktori data baru untuk versi container yang diupgrade.
docker exec -u postgres ALLOYDB16_CONTAINER bash -c " cd /tmp; initdb -D /var/lib/postgresql/data --frozen-collations --encoding=UTF8 --locale=C --locale-provider=icu --icu-locale=und-x-icu
Jika cluster lama memiliki setelan khusus, misalnya,
--data-checksum
atau--locale
, Anda juga harus meneruskan parameter tersebut untuk membuat container AlloyDB Omni 16.Jika Anda mengaktifkan kebijakan mulai ulang pada container versi sebelumnya, Anda harus menonaktifkan kebijakan mulai ulang, seperti yang ditunjukkan dalam contoh berikut:
docker update --restart=no ALLOYDB15_CONTAINER
Jalankan
pg_upgrade --check
untuk memverifikasi bahwa cluster siap diupgrade ke AlloyDB Omni 16.docker exec -u postgres ALLOYDB16_CONTAINER bash -c " cd /tmp; pg_upgrade -p 5432 -P 5433 --check -v \ -b /usr/lib/postgresql/15/bin \ -B /usr/lib/postgresql/16/bin \ -d /var/lib/postgresql/old_data \ -D /var/lib/postgresql/data"
Setelah perintah
pg_upgrade --check
selesai, Anda akan melihat output yang berakhir denganClusters are compatible
, yang menunjukkan bahwa cluster siap diupgrade. Perintah ini juga memeriksa dan menghentikan container AlloyDB Omni PostgreSQL 15. Setelahpg_upgrade --check
selesai, aplikasi tidak dapat lagi terhubung ke database atau menjalankan kueri apa pun.Jalankan
pg_upgrade
untuk menyalin data yang diupgrade ke direktori data baru, lalu verifikasi bahwapg_upgrade
telah berhasil diselesaikan dan bahwa penampung AlloyDB Omni PostgreSQL 15 telah keluar:docker exec -u postgres ALLOYDB16_CONTAINER bash -c " cd /tmp; pg_upgrade -v --copy \ -b /usr/lib/postgresql/15/bin \ -B /usr/lib/postgresql/16/bin \ -d /var/lib/postgresql/old_data \ -D /var/lib/postgresql/data" docker ps -a
Jika
pg_upgrade
gagal, lakukan roll back ke container AlloyDB Omni PostgreSQL 15 dengan memulai container PostgreSQL 15:docker logs ALLOYDB16_CONTAINER docker rm -f ALLOYDB15_CONTAINER ALLOYDB16_CONTAINER docker run -d --name ALLOYDB15_CONTAINER -p 5432:5432 \ -e POSTGRES_PASSWORD=postgres \ -v DATA_PATH/15/data:/var/lib/postgresql/data \ google/alloydbomni:15
Untuk mengetahui alasan kegagalan upgrade, tinjau log.
Jika upgrade berhasil, hapus dan mulai ulang container AlloyDB Omni PostgreSQL 16:
docker rm -f ALLOYDB16_CONTAINER ALLOYDB15_CONTAINER docker run -d --name ALLOYDB16_CONTAINER -p 5432:5432 \ -e POSTGRES_PASSWORD=postgres \ -v DATA_PATH/16/data:/var/lib/postgresql/data \ google/alloydbomni:16
Podman
Salin
bin
dan bagikan direktori dari versi penampung AlloyDB Omni yang ingin Anda upgrade:mkdir -p TMP/alloydb15_bin TMP/alloydb15_share podman cp ALLOYDB15_CONTAINER:/usr/lib/postgresql/15 TMP/alloydb15_bin podman cp ALLOYDB15_CONTAINER:/usr/share/postgresql/15 TMP/alloydb15_share
Buat direktori data baru untuk container AlloyDB Omni PostgreSQL 16 tempat data yang diupgrade akan disimpan:
mkdir -p DATA_PATH/16/data chown 999 DATA_PATH/16/data
Mulai container yang menjalankan AlloyDB Omni PostgreSQL 16 dengan semua jalur yang di-mount di jaringan yang sama dengan container AlloyDB Omni sebelumnya. Lihat contoh berikut:
podman run -d --name ALLOYDB16_CONTAINER \ -e POSTGRES_PASSWORD=PASSWORD -e PGPORT=5433 \ -v DATA_PATH/16/data:/var/lib/postgresql/data \ -v DATA_PATH/15/data:/var/lib/postgresql/old_data \ -v TMP/alloydb15_bin/15:/usr/lib/postgresql/15 \ -v TMP/alloydb15_share/15:/usr/share/postgresql/15 \ --network container:ALLOYDB15_CONTAINER \ google/alloydbomni:16 /bin/sleep infinity
Lakukan inisialisasi direktori data baru untuk versi container yang diupgrade.
podman exec -u postgres ALLOYDB16_CONTAINER bash -c " cd /tmp; initdb -D /var/lib/postgresql/data --frozen-collations --encoding=UTF8 --locale=C --locale-provider=icu --icu-locale=und-x-icu
Jika cluster lama memiliki setelan khusus, misalnya,
--data-checksum
atau--locale
, Anda juga harus meneruskan parameter tersebut untuk membuat container AlloyDB Omni 16.Jika Anda mengaktifkan kebijakan mulai ulang pada container versi sebelumnya, Anda harus menonaktifkan kebijakan mulai ulang, seperti yang ditunjukkan dalam contoh berikut:
podman update --restart=no ALLOYDB15_CONTAINER
Jalankan
pg_upgrade --check
untuk memverifikasi bahwa cluster siap diupgrade ke AlloyDB Omni 16.podman exec -u postgres ALLOYDB16_CONTAINER bash -c " cd /tmp; pg_upgrade -p 5432 -P 5433 --check -v \ -b /usr/lib/postgresql/15/bin \ -B /usr/lib/postgresql/16/bin \ -d /var/lib/postgresql/old_data \ -D /var/lib/postgresql/data"
Setelah perintah
pg_upgrade --check
selesai, Anda akan melihat output yang berakhir denganClusters are compatible
, yang menunjukkan bahwa cluster siap diupgrade. Perintah ini juga memeriksa dan menghentikan container AlloyDB Omni PostgreSQL 15. Setelahpg_upgrade --check
selesai, aplikasi tidak dapat lagi terhubung ke database atau menjalankan kueri apa pun.Jalankan
pg_upgrade
untuk menyalin data yang diupgrade ke direktori data baru, lalu verifikasi bahwapg_upgrade
telah berhasil diselesaikan dan bahwa penampung AlloyDB Omni PostgreSQL 15 telah keluar:podman exec -u postgres ALLOYDB16_CONTAINER bash -c " cd /tmp; pg_upgrade -v --copy \ -b /usr/lib/postgresql/15/bin \ -B /usr/lib/postgresql/16/bin \ -d /var/lib/postgresql/old_data \ -D /var/lib/postgresql/data" podman ps -a
Jika
pg_upgrade
gagal, lakukan roll back ke container AlloyDB Omni PostgreSQL 15 dengan memulai container PostgreSQL 15:podman logs ALLOYDB16_CONTAINER podman rm -f ALLOYDB15_CONTAINER ALLOYDB16_CONTAINER podman run -d --name ALLOYDB15_CONTAINER -p 5432:5432 \ -e POSTGRES_PASSWORD=postgres \ -v DATA_PATH/15/data:/var/lib/postgresql/data \ google/alloydbomni:15
Untuk mengetahui alasan kegagalan upgrade, tinjau log.
Jika upgrade berhasil, hapus dan mulai ulang container AlloyDB Omni PostgreSQL 16:
podman rm -f ALLOYDB16_CONTAINER ALLOYDB15_CONTAINER podman run -d --name ALLOYDB16_CONTAINER -p 5432:5432 \ -e POSTGRES_PASSWORD=postgres \ -v DATA_PATH/16/data:/var/lib/postgresql/data \ google/alloydbomni:16
Mengupgrade server AlloyDB Omni di node standby
Jika server AlloyDB Omni Anda di-deploy dengan konfigurasi standby yang direplikasi secara aktif dan streaming, Anda tidak dapat menjalankan pg_upgrade
di node standby. Untuk mengupgrade server AlloyDB Omni di node standby, sebaiknya, sebelum mengupgrade AlloyDB Omni di node aktif, pastikan tidak ada jeda replikasi di node standby.
Untuk mengupgrade server AlloyDB Omni standby, ikuti langkah-langkah umum berikut:
- Hentikan container AlloyDB Omni standby sebelum mengupgrade node Aktif.
- Setelah node aktif diupgrade, sinkronkan direktori data yang diupgrade dari
node aktif baru ke node standby menggunakan rsync.
Untuk mengetahui informasi selengkapnya tentang cara mengupgrade server standby yang direplikasi streaming,
lihat
pg_upgrade
. - Mulai penampung menggunakan image PostgreSQL 16 AlloyDB untuk PostgreSQL menggunakan direktori data yang sama.
Jika Anda menggunakan replikasi logis, lihat Mengupgrade Data melalui Replikasi.