pg_upgrade
. En esta página, se describen los pasos para actualizar AlloyDB Omni implementado como un servidor independiente y AlloyDB Omni configurado como nodos en espera replicados. Usar pg_upgrade
ayuda a garantizar que la actualización se complete sin pérdida de datos.
Para obtener más información sobre las opciones de actualización de PostgreSQL, consulta pg_upgrade.
Antes de comenzar
- Antes de iniciar la actualización, te recomendamos que crees una copia de seguridad completa del clúster de la base de datos.
Para asegurarte de que el servicio de AlloyDB Omni 15 se esté ejecutando, ejecuta el siguiente comando:
Docker
docker exec ALLOYDB15_CONTAINER psql -U postgres -c "SELECT 1;"
Podman
podman exec ALLOYDB15_CONTAINER psql -U postgres -c "SELECT 1;"
La extensión
pg_squeeze
en PostgreSQL 15 no es compatible con AlloyDB Omni PostgreSQL 16.8.0. Sipg_squeeze
está en tu instalación de AlloyDB Omni 15, debes quitar la extensión antes de realizar la actualización a AlloyDB Omni 16.Si instalaste extensiones personalizadas sobre AlloyDB Omni, asegúrate de que esas extensiones personalizadas también estén instaladas en la imagen 16.8.0. Ejecuta el siguiente comando para verificar las extensiones instaladas:
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;
Si actualizas desde la versión 15.5.2 o una anterior de AlloyDB Omni, primero debes actualizar a una versión más reciente de AlloyDB Omni 15. Migra desde la versión 15.5.2 y versiones anteriores de AlloyDB Omni a la versión más reciente.
Actualiza AlloyDB Omni en un entorno de contenedor de Docker
Para actualizar de AlloyDB Omni PostgreSQL 15 a AlloyDB Omni PostgreSQL 16.8.0 en un entorno de contenedor de Docker o Podman, sigue estos pasos:
Docker
Copia
bin
y comparte el directorio desde la versión del contenedor de AlloyDB Omni que deseas actualizar: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
Crea un nuevo directorio de datos para el contenedor de AlloyDB Omni PostgreSQL 16 en el que se almacenarán los datos actualizados:
mkdir -p DATA_PATH/16/data chown 999 DATA_PATH/16/data
Inicia el contenedor en ejecución de AlloyDB Omni PostgreSQL 16 con todas las rutas de acceso montadas en la misma red que el contenedor anterior de AlloyDB Omni. Consulta el siguiente ejemplo:
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
Inicializa el nuevo directorio de datos para la versión actualizada del contenedor.
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
Si el clúster anterior tenía algún parámetro de configuración especial, por ejemplo,
--data-checksum
o--locale
, también debes pasar esos parámetros para crear el contenedor de AlloyDB Omni 16.Si habilitaste la política de reinicio en el contenedor de la versión anterior, debes inhabilitarla, como se muestra en el siguiente ejemplo:
docker update --restart=no ALLOYDB15_CONTAINER
Ejecuta
pg_upgrade --check
para verificar que el clúster esté listo para actualizarse a 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"
Cuando se complete el comando
pg_upgrade --check
, verás un resultado que termina conClusters are compatible
, lo que indica que el clúster está listo para actualizarse. Este comando también verifica y cierra el contenedor de AlloyDB Omni PostgreSQL 15. Después de que se completapg_upgrade --check
, las aplicaciones ya no pueden conectarse a la base de datos ni ejecutar ninguna consulta.Ejecuta
pg_upgrade
para copiar los datos actualizados en el nuevo directorio de datos y, luego, verifica quepg_upgrade
se haya completado correctamente y que el contenedor de AlloyDB Omni PostgreSQL 15 haya salido: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
Si
pg_upgrade
falla, revierte al contenedor de AlloyDB Omni PostgreSQL 15 iniciando el contenedor de 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
Para determinar los motivos de la falla de actualización, revisa los registros.
Si la actualización se realiza correctamente, limpia y, luego, reinicia el contenedor de 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
Copia
bin
y comparte el directorio desde la versión del contenedor de AlloyDB Omni que deseas actualizar: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
Crea un nuevo directorio de datos para el contenedor de AlloyDB Omni PostgreSQL 16 en el que se almacenarán los datos actualizados:
mkdir -p DATA_PATH/16/data chown 999 DATA_PATH/16/data
Inicia el contenedor en ejecución de AlloyDB Omni PostgreSQL 16 con todas las rutas de acceso montadas en la misma red que el contenedor anterior de AlloyDB Omni. Consulta el siguiente ejemplo:
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
Inicializa el nuevo directorio de datos para la versión actualizada del contenedor.
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
Si el clúster anterior tenía algún parámetro de configuración especial, por ejemplo,
--data-checksum
o--locale
, también debes pasar esos parámetros para crear el contenedor de AlloyDB Omni 16.Si habilitaste la política de reinicio en el contenedor de la versión anterior, debes inhabilitarla, como se muestra en el siguiente ejemplo:
podman update --restart=no ALLOYDB15_CONTAINER
Ejecuta
pg_upgrade --check
para verificar que el clúster esté listo para actualizarse a 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"
Cuando se complete el comando
pg_upgrade --check
, verás un resultado que termina conClusters are compatible
, lo que indica que el clúster está listo para actualizarse. Este comando también verifica y cierra el contenedor de AlloyDB Omni PostgreSQL 15. Después de que se completapg_upgrade --check
, las aplicaciones ya no pueden conectarse a la base de datos ni ejecutar ninguna consulta.Ejecuta
pg_upgrade
para copiar los datos actualizados en el nuevo directorio de datos y, luego, verifica quepg_upgrade
se haya completado correctamente y que el contenedor de AlloyDB Omni PostgreSQL 15 haya salido: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
Si
pg_upgrade
falla, revierte al contenedor de AlloyDB Omni PostgreSQL 15 iniciando el contenedor de 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
Para determinar los motivos de la falla de actualización, revisa los registros.
Si la actualización se realiza correctamente, limpia y, luego, reinicia el contenedor de 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
Actualiza el servidor de AlloyDB Omni en el nodo en espera
Si tu servidor de AlloyDB Omni se implementa con una configuración de replicación en espera activa y de transmisión, no puedes ejecutar pg_upgrade
en el nodo en espera. Para actualizar el servidor de AlloyDB Omni en un nodo en espera, te recomendamos que, antes de actualizar AlloyDB Omni en el nodo activo, te asegures de que no haya retrasos en la replicación en el nodo en espera.
Para actualizar el servidor en espera de AlloyDB Omni, sigue estos pasos generales:
- Detén el contenedor de AlloyDB Omni en espera antes de actualizar el nodo activo.
- Después de actualizar el nodo activo, sincroniza el directorio de datos actualizado del nodo activo nuevo con el nodo en espera usando rsync.
Para obtener más información sobre cómo actualizar un servidor de espera replicado de transmisión, consulta
pg_upgrade
. - Inicia el contenedor con la imagen de AlloyDB para PostgreSQL PostgreSQL 16 usando el mismo directorio de datos.
Si usas la replicación lógica, consulta Actualización de datos a través de la replicación.