Actualiza a la versión 16.3.0 de AlloyDB Omni en una VM

Selecciona una versión de la documentación:

En esta página, se describe cómo actualizar tus contenedores basados en AlloyDB Omni PostgreSQL 15 a AlloyDB Omni PostgreSQL 16 con pg_upgrade. En las instrucciones de esta página, se describen los pasos de actualización para AlloyDB Omni implementado como un servidor independiente y para AlloyDB Omni configurado como nodos de espera replicados. El uso de 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 realices una copia de seguridad completa de tu clúster de base de datos.
  • Para asegurarte de que se esté ejecutando el servicio de AlloyDB Omni 15, 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.3.0. Si pg_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.3.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 realizas la actualización desde AlloyDB Omni versión 15.5.2 o anterior, primero debes actualizar a una versión más reciente de AlloyDB Omni 15. Migra desde AlloyDB Omni versión 15.5.2 y versiones anteriores 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.3.0 en un entorno de contenedor de Docker o Podman, sigue estos pasos:

Docker

  1. 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
    
  2. Crea un directorio de datos nuevo 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
    
  3. Inicia el contenedor en ejecución de AlloyDB Omni PostgreSQL 16 con todas las rutas de acceso activadas 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
    
  4. 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 alguna configuración especial, por ejemplo, --data-checksum o --locale, también debes pasar esos parámetros para crear el contenedor de AlloyDB Omni 16.

  5. 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
    
  6. 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 complete el comando pg_upgrade --check, verás un resultado que termina con Clusters 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. Una vez que se completa pg_upgrade --check, las aplicaciones ya no pueden conectarse a la base de datos ni ejecutar ninguna consulta.

  7. Ejecuta pg_upgrade para copiar los datos actualizados en el nuevo directorio de datos y, luego, verifica que pg_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
    
  8. 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.

  9. 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

  1. 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
    
  2. Crea un directorio de datos nuevo 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
    
  3. Inicia el contenedor en ejecución de AlloyDB Omni PostgreSQL 16 con todas las rutas de acceso activadas 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
    
  4. 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 alguna configuración especial, por ejemplo, --data-checksum o --locale, también debes pasar esos parámetros para crear el contenedor de AlloyDB Omni 16.

  5. 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
    
  6. 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 complete el comando pg_upgrade --check, verás un resultado que termina con Clusters 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. Una vez que se completa pg_upgrade --check, las aplicaciones ya no pueden conectarse a la base de datos ni ejecutar ninguna consulta.

  7. Ejecuta pg_upgrade para copiar los datos actualizados en el nuevo directorio de datos y, luego, verifica que pg_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
    
  8. 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.

  9. 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 de espera

Si tu servidor de AlloyDB Omni se implementa con una configuración de espera replicada activa y de transmisión, no puedes ejecutar pg_upgrade en el nodo de espera. Para actualizar el servidor de 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 de replicación en el nodo de espera.

Para actualizar el servidor de AlloyDB Omni de espera, sigue estos pasos generales:

  1. Detén el contenedor de AlloyDB Omni de espera antes de actualizar el nodo activo.
  2. Una vez que se actualiza el nodo activo, sincroniza el directorio de datos actualizado de el nuevo nodo activo al nodo de espera con rsync. Para obtener más información sobre cómo actualizar un servidor de espera replicado de transmisión, consulta pg_upgrade.
  3. Inicia el contenedor con la imagen de AlloyDB para PostgreSQL PostgreSQL 16 con el mismo directorio de datos.

Si usas la replicación lógica, consulta Actualiza datos a través de la replicación.