Transporte SQL bases de datos de Postgre entre dos instancias de Amazon RDS DB mediante 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.

Transporte SQL bases de datos de Postgre entre dos instancias de Amazon RDS DB mediante pg_transport

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

Entorno: PoC o piloto

Origen: bases de datos: relacionales

Objetivo: Amazon RDS para Postgre SQL

Tipo R: reubicar

Carga de trabajo: código abierto

Tecnologías: migración; bases de datos

AWSservicios: 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 (RDSAmazon) para SQL Postgre 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 Postgre. SQL

  • 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 SQL cliente de Postgre, como psql, o PgAdminpara trabajar con la instancia de base de datos de Amazon RDS SQL Postgre. Puede instalar el cliente en su sistema local o utilizar una instancia de Amazon Elastic Compute Cloud (AmazonEC2). En este patrón, utilizamos psql en una EC2 instancia.

Limitaciones

  • No puedes transportar bases de datos entre distintas versiones principales de Amazon RDS for 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

  • Amazon RDS para Postgre SQL 10.10 y versiones posteriores y Amazon RDS para SQL Postgre 11.5 y versiones posteriores. Para obtener información sobre la versión más reciente, consulte Transporte de SQL bases de datos Postgre entre instancias de base de datos en la documentación de AmazonRDS.

Arquitectura

Transporte de SQL bases de datos de Postgre entre instancias de Amazon DB 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 SQL transportables de Postgre utilizan un modelo de extracción en el que 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 Postgre y trabajar con ellas. SQL Para instalar psql en su sistema, consulte la página de descargas de Postgre. SQL

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, consulta la RDSdocumentación de Amazon.

DBA

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 sobre estos parámetros, consulta la RDSdocumentación de Amazon.

DBA
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, consulta la RDSdocumentación de Amazon.

DBA

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 sobre estos parámetros, consulta la RDSdocumentación de Amazon.

DBA
TareaDescripciónHabilidades requeridas

Cree una nueva instancia de SQL base de datos de Amazon RDS for Postgre a la que transportar la base de datos de origen.

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

DBA, 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 EC2 instancia.

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

DBA, administrador de sistemas

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

Por ejemplo, pgtarget-param-group.

DBA

Reinicie la instancia de Amazon RDS DB de destino.

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

DBA, administrador de sistemas

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

Utilice el comando: 

psql -h <rds_end_point> -p PORT -U username -d database -W
DBA

Cree la extensión pg_transport.

Ejecute la siguiente consulta como usuario con el rol rds_superuser:

create extension pg_transport;
DBA
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 de Amazon y la EC2 instancia de base de datos de destino

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

DBA, administrador de sistemas

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

Por ejemplo, pgsource-param-group.

DBA

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

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

DBA

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

Utilice el comando: 

psql -h <rds_end_point> -p PORT -U username -d database -W
DBA

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.

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

DBA

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.

DBA

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.

DBA

Recursos relacionados