Actualizar 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 los contenedores basados en PostgreSQL 15 de AlloyDB Omni a PostgreSQL 16 de AlloyDB Omni mediante 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. Si pg_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

  1. 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
    
  2. 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
    
  3. 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
    
  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 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.

  5. 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
    
  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 haya completado 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 comprueba y cierra el contenedor de AlloyDB Omni PostgreSQL 15. Una vez que se haya completado pg_upgrade --check, las aplicaciones ya no podrán 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, a continuación, comprueba que pg_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
    
  8. 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.

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

  1. 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
    
  2. 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
    
  3. 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
    
  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 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.

  5. 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
    
  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 haya completado 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 comprueba y cierra el contenedor de AlloyDB Omni PostgreSQL 15. Una vez que se haya completado pg_upgrade --check, las aplicaciones ya no podrán 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, a continuación, comprueba que pg_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
    
  8. 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.

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

  1. Detén el contenedor de AlloyDB Omni en espera antes de actualizar el nodo activo.
  2. 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.
  3. 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.