pg_upgrade
. En esta página se describen los pasos para actualizar AlloyDB Omni implementado como servidor independiente y AlloyDB Omni configurado como nodos de espera replicados. Usar pg_upgrade
ayuda a asegurarse de que la actualización se complete sin perder datos.
Para obtener más información sobre las opciones de actualización de PostgreSQL, consulta pg_upgrade.
Antes de empezar
- Antes de iniciar la actualización, te recomendamos que hagas una copia de seguridad completa de tu clúster de base de datos.
Para asegurarte de que el servicio 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
de PostgreSQL 15 no es compatible con AlloyDB Omni PostgreSQL 16.3.0. Sipg_squeeze
está en tu instalación de AlloyDB Omni 15, debes quitar la extensión antes de actualizar a AlloyDB Omni 16.Si has instalado extensiones personalizadas en AlloyDB Omni, asegúrate de que esas extensiones personalizadas también estén instaladas en la imagen 16.3.0. Comprueba las extensiones instaladas ejecutando el siguiente comando:
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 vas a actualizar 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. Migrar de la versión 15.5.2 o anterior de AlloyDB Omni a la versión más reciente
Actualizar AlloyDB Omni en un entorno de contenedor Docker
Para actualizar de AlloyDB Omni PostgreSQL 15 a AlloyDB Omni PostgreSQL 16.3.0 en un entorno de contenedor Docker o Podman, sigue estos pasos:
Docker
Copia
bin
y comparte el directorio de la versión del contenedor de AlloyDB Omni que quieras 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 directorio de datos para el contenedor de AlloyDB Omni PostgreSQL 16 donde se almacenarán los datos actualizados:
mkdir -p DATA_PATH/16/data chown 999 DATA_PATH/16/data
Inicia el contenedor de AlloyDB Omni PostgreSQL 16 con todas las rutas montadas en la misma red que el contenedor de AlloyDB Omni anterior. 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 antiguo tenía algún ajuste especial, por ejemplo,
--data-checksum
o--locale
, también debes pasar esos parámetros para crear el contenedor de AlloyDB Omni 16.Si has habilitado 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"
Una vez que se haya completado 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 comprueba y cierra el contenedor de AlloyDB Omni PostgreSQL 15. Una vez que se haya completadopg_upgrade --check
, las aplicaciones ya no podrán 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, a continuación, comprueba quepg_upgrade
se ha completado correctamente y que el contenedor de AlloyDB Omni PostgreSQL 15 se ha cerrado: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, vuelve 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 del fallo de la actualización, consulta los registros.
Si la actualización se completa correctamente, limpia y 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 de la versión del contenedor de AlloyDB Omni que quieras 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 directorio de datos para el contenedor de AlloyDB Omni PostgreSQL 16 donde se almacenarán los datos actualizados:
mkdir -p DATA_PATH/16/data chown 999 DATA_PATH/16/data
Inicia el contenedor de AlloyDB Omni PostgreSQL 16 con todas las rutas montadas en la misma red que el contenedor de AlloyDB Omni anterior. 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 antiguo tenía algún ajuste especial, por ejemplo,
--data-checksum
o--locale
, también debes pasar esos parámetros para crear el contenedor de AlloyDB Omni 16.Si has habilitado 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"
Una vez que se haya completado 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 comprueba y cierra el contenedor de AlloyDB Omni PostgreSQL 15. Una vez que se haya completadopg_upgrade --check
, las aplicaciones ya no podrán 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, a continuación, comprueba quepg_upgrade
se ha completado correctamente y que el contenedor de AlloyDB Omni PostgreSQL 15 se ha cerrado: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, vuelve 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 del fallo de la actualización, consulta los registros.
Si la actualización se completa correctamente, limpia y 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
Actualizar el servidor de AlloyDB Omni en el nodo en espera
Si tu servidor AlloyDB Omni se ha implementado con una configuración de réplica en espera activa y de streaming, no puedes ejecutar pg_upgrade
en el nodo en espera. Para actualizar el servidor AlloyDB Omni en un nodo de espera, te recomendamos que, antes de actualizar AlloyDB Omni en el nodo activo, te asegures de que no haya retrasos en la réplica en el nodo de espera.
Para actualizar el servidor AlloyDB Omni en espera, sigue estos pasos generales:
- Detén el contenedor de AlloyDB Omni en espera antes de actualizar el nodo activo.
- Una vez que se haya actualizado el nodo activo, sincroniza el directorio de datos actualizado del nuevo nodo activo con el nodo de espera mediante rsync.
Para obtener más información sobre cómo actualizar un servidor de espera replicado de streaming, consulta
pg_upgrade
. - Inicia el contenedor con la imagen de PostgreSQL 16 de AlloyDB para PostgreSQL usando el mismo directorio de datos.
Si utilizas la replicación lógica, consulta Actualizar datos mediante la replicación.