Transportar bases de datos PostgreSQL entre dos instancias de base de datos de Amazon RDS utilizando pg_transport - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Transportar bases de datos PostgreSQL entre dos instancias de base de datos de Amazon RDS utilizando pg_transport

Creado por Raunak Rishabh (AWS) y Jitender Kumar (AWS)

Entorno: PoC o piloto

Origen: bases de datos: relacionales

Destino: Amazon RDS para PostgreSQL

Tipo R: reubicar

Carga de trabajo: código abierto

Tecnologías: migración; bases de datos

Servicios de AWS: Amazon RDS

Resumen

Este patrón describe los pasos para migrar bases de datos extremadamente grandes entre dos instancias de base de datos de Amazon Relational Database Service (Amazon RDS) para PostgreSQL mediante la extensión pg_transport. Esta extensión proporciona un mecanismo físico de transporte para trasladar cada base de datos. Al transmitir por streaming los archivos de base de datos con un procesamiento mínimo, proporciona un método extremadamente rápido para migrar bases de datos de gran tamaño entre instancias de base de datos con un tiempo de inactividad mínimo. Esta extensión utiliza un modelo de extracción donde la instancia de base de datos de destino importa la base de datos de la instancia de base de datos de origen.

Requisitos previos y limitaciones

Requisitos previos 

  • Ambas instancias de base de datos deben ejecutar la misma versión principal de PostgreSQL.

  • La base de datos no debe existir en el destino. De lo contrario, el transporte devuelve un error.

  • No se debe habilitar ninguna extensión que no sea pg_transport en la base de datos de origen.

  • Todos los objetos de base de datos deben estar en el espacio de tablas predeterminado pg_default.

  • El grupo de seguridad de la instancia de base de datos de origen debe permitir el tráfico desde la instancia de base de datos de destino.

  • Instale un cliente de PostgreSQL, como psql, PgAdmino para trabajar con la instancia de base de datos PostgreSQL de Amazon RDS. Puede instalar el cliente en su sistema local o utilizar una instancia de Amazon Elastic Compute Cloud (Amazon EC2). En este patrón, utilizamos psql en una instancia EC2.

Limitaciones

  • No puede transportar bases de datos entre distintas versiones principales de Amazon RDS para PostgreSQL.

  • Los privilegios de acceso y la propiedad de la base de datos de origen no se transfieren a la base de datos de destino.

  • No puede transportar bases de datos en réplicas de lectura ni en instancias principales de réplicas de lectura.

  • No puede utilizar tipos de datos de registro en ninguna tabla de base de datos que planee transportar con este método.

  • Puede ejecutar hasta 32 transportes totales al mismo tiempo en una instancia de base de datos, (incluidas tanto importaciones como exportaciones).

  • No puede cambiar el nombre de las tablas ni incluirlas o excluirlas. Todo se migra tal cual.

Precaución

  • Realice copias de seguridad antes de eliminar la extensión, ya que al eliminar la extensión también se eliminan los objetos dependientes y algunos datos que son fundamentales para el funcionamiento de la base de datos.

  • Tenga en cuenta la clase de instancia y los procesos que se ejecutan en otras bases de datos de la instancia de origen al determinar la cantidad de trabajadores y los work_mem valores de pg_transport.

  • Cuando se inicia el transporte, finalizan todas las conexiones de la base de datos de origen y la base de datos pasa al modo de solo lectura.

Nota: Cuando el transporte se ejecuta en una base de datos, no afecta a las demás bases de datos del mismo servidor.

Versiones de producto

Arquitectura

Transporte de bases de datos de PostgreSQL entre instancias de base de datos RDS

Herramientas

  • pg_transport proporciona un mecanismo físico de transporte para trasladar cada base de datos. Al transmitir por streaming los archivos de la base de datos con un procesamiento mínimo, el transporte físico mueve los datos mucho más rápido que los procesos tradicionales de volcado y carga y requiere un tiempo de inactividad mínimo. Las bases de datos transportables de PostgreSQL utilizan un modelo de extracción donde la instancia de base de datos de destino importa la base de datos de la instancia de base de datos de origen. Esta extensión se instala en las instancias de base de datos al preparar los entornos de origen y destino, tal y como se explica en este patrón.

  • psql le permite conectarse a sus instancias de base de datos de PostgreSQL y trabajar con ellas. Para instalar psql en su sistema, consulte la página de descargas de PostgreSQL.

Epics

TareaDescripciónHabilidades requeridas

Cree un grupo de parámetros para el sistema de destino.

Especifique un nombre de grupo que lo identifique como grupo de parámetros de destino; por ejemplo,vpgtarget-param-group. Para obtener instrucciones, consulte la Documentación de Amazon RDS.

Administrador de base de datos

Modifique los parámetros para el grupo de parámetros.

Establezca los siguientes parámetros:

  1. Añada pg_transport al parámetro shared_preload_libraries.

    shared_preload_libraries = pg_stat_statements, pg_transport
  2. Establezca el parámetro pg_transport.num_workers. Seleccione el número de trabajadores con los que quiere gestionar el transporte. El valor que establezca determina la cantidad de transport.send_file trabajadores que se crearán en la fuente.

  3. Aumente el valor de max_worker_processes a más de tres veces el valor decpg_transport.num_workers. Por ejemplo, si establece el valor de pg_transport.num_workers en 4, el max_worker_processes valor debe ser al menos 13. Si esto no funciona, pg_transport recomienda un valor mínimo. 

  4. Establezca pg_transport.timing en 1. Esta configuración permite notificar la información de tiempo durante el transporte.

  5. Establezca el parámetro pg_transport.work_mem. Este parámetro especifica la memoria máxima que se debe asignar a cada trabajador. El valor predeterminado es 128 MB.

Para obtener más información acerca de estos parámetros, consulte la documentación de Amazon RDS.

Administrador de base de datos
TareaDescripciónHabilidades requeridas

Cree un grupo de parámetros para el sistema de origen.

Especifique un nombre de grupo que lo identifique como grupo de parámetros de origen; por ejemplo, pgsource-param-group. Para obtener instrucciones, consulte la Documentación de Amazon RDS.

Administrador de base de datos

Modifique los parámetros para el grupo de parámetros.

Establezca los siguientes parámetros:

  1. Añada pg_transport al parámetro shared_preload_libraries.

    shared_preload_libraries = pg_stat_statements, pg_transport
  2. Establezca el parámetro pg_transport.num_workers. El valor de este parámetro definido en el objetivo determina el número de transport.send_file trabajadores que se van a utilizar. Si tiene una importación en ejecución en esta instancia, aumente este valor, pero tenga en cuenta la cantidad de trabajadores que ya se están ejecutando.

  3. Aumente el valor de max_worker_processes a más de tres veces el valor del pg_transport.num_workers objetivo. Por ejemplo, si establece el valor de pg_transport.num_workers 4 en el destino, el max_worker_processes valor del origen debe ser al menos 13. Si esto no funciona, pg_transport recomienda un valor mínimo. 

  4. Establezca el parámetro pg_transport.work_mem. Este parámetro especifica la memoria máxima que se debe asignar a cada trabajador. El valor predeterminado es 128 MB.

Para obtener más información acerca de estos parámetros, consulte la documentación de Amazon RDS.

Administrador de base de datos
TareaDescripciónHabilidades requeridas

Cree una nueva instancia de base de datos de Amazon RDS para PostgreSQL a la que transportar la base de datos de origen.

Determine la clase de instancia y la versión de PostgreSQL en función de los requisitos de su empresa.

Administrador de base de datos, administrador de sistemas, arquitecto de bases de datos

Modifique el grupo de seguridad del destino para permitir las conexiones en el puerto de la instancia de base de datos desde la instancia EC2.

De forma predeterminada, el puerto para la instancia de PostgreSQL es 5432. Si utiliza otro puerto, las conexiones a ese puerto deben estar abiertas para la instancia EC2.

Administrador de base de datos, administrador de sistemas

Modifique la instancia y asigne el nuevo grupo de parámetros de destino.

Por ejemplo, pgtarget-param-group.

Administrador de base de datos

Reinicie la instancia de base de datos de Amazon RDS de destino.

Los parámetros shared_preload_libraries y max_worker_processes son parámetros estáticos y requieren el reinicio de la instancia.

Administrador de base de datos, administrador de sistemas

Conéctese a la base de datos desde la instancia de EC2 mediante psql.

Utilice el comando: 

psql -h <rds_end_point> -p PORT -U username -d database -W
Administrador de base de datos

Cree la extensión pg_transport.

Ejecute la siguiente consulta como usuario con el rol rds_superuser:

create extension pg_transport;
Administrador de base de datos
TareaDescripciónHabilidades requeridas

Modifique el grupo de seguridad de la fuente para permitir las conexiones en el puerto de la instancia de base de datos desde la instancia Amazon EC2 y la instancia de base de datos de destino

De forma predeterminada, el puerto para la instancia de PostgreSQL es 5432. Si utiliza otro puerto, las conexiones a ese puerto deben estar abiertas para la instancia EC2.

Administrador de base de datos, administrador de sistemas

Modifique la instancia y asigne el nuevo grupo de parámetros de origen.

Por ejemplo, pgsource-param-group.

Administrador de base de datos

Reinicie la instancia de base de datos de Amazon RDS de origen.

Los parámetros shared_preload_libraries y max_worker_processes son parámetros estáticos y requieren el reinicio de la instancia.

Administrador de base de datos

Conéctese a la base de datos desde la instancia de EC2 mediante psql.

Utilice el comando: 

psql -h <rds_end_point> -p PORT -U username -d database -W
Administrador de base de datos

Cree la extensión pg_transport y elimine todas las demás extensiones de las bases de datos que se van a transportar.

El transporte fallará si hay alguna extensión que no sea pg_transport instalada en la base de datos de origen. Este comando debe ejecutarlo un usuario con el rol rds_superuser.

Administrador de base de datos
TareaDescripciónHabilidades requeridas

Ejecute una prueba.

Utilice la función transport.import_from_server para realizar primero un simulacro:

SELECT transport.import_from_server( 'source-db-instance-endpoint', source-db-instance-port, 'source-db-instance-user', 'source-user-password', 'source-database-name', 'destination-user-password', 'true');

El último parámetro de esta función (establecido entrue) define el funcionamiento en seco.

Esta función muestra los errores que aparecen al ejecutar el transporte principal. Resuelva los errores antes de ejecutar el transporte principal.

Administrador de base de datos

Si el simulacro se realiza correctamente, inicie el transporte de la base de datos.

Ejecute la función transport.import_from_server para realizar el transporte. Se conecta a la fuente e importa los datos. 

SELECT transport.import_from_server( 'source-db-instance-endpoint', source-db-instance-port, 'source-db-instance-user', 'source-user-password', 'source-database-name', 'destination-user-password', false);

El último parámetro de esta función (establecido enfalse) indica que no se trata de un simulacro.

Administrador de base de datos

Realice los pasos posteriores al transporte.

Una vez finalizado el transporte de la base de datos:

  • Valide los datos en el entorno de destino.

  • Añada todos los roles y permisos al objetivo.

  • Habilite todas las extensiones necesarias en el destino y el origen, si es necesario.

  • Revierta el valor del parámetro max_worker_processes.

Administrador de base de datos

Recursos relacionados