Actualiza a la versión 16.8.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 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. 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.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

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

  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"
    

    Cuando 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. Después de 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 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
    
  3. 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
    
  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 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.

  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"
    

    Cuando 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. Después de 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 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:

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