Descripción general
Database Migration Service admite migraciones continuas desde bases de datos de origen hasta bases de datos de destino de AlloyDB.
Entre las bases de datos de origen admitidas para PostgreSQL, se incluyen las siguientes:
- Amazon RDS 9.6.10+, 10.5+, 11.1+, 12, 13, 14, 15, 16 y 17
- Amazon Aurora 10.11+, 11.6+, 12.4+, 13.3+, 14, 15, 16 y 17
- PostgreSQL autoadministrado (local o en cualquier VM en la nube que controlas por completo) 9.4, 9.5, 9.6, 10, 11, 12, 13, 14, 15, 16 y 17
- Cloud SQL 9.6, 10, 11, 12, 13, 14, 15, 16 y 17
Para configurar tu fuente, debes configurar la instancia de origen y las bases de datos de origen subyacentes.
Configura tu instancia de origen
Para configurar tu instancia de origen, sigue los pasos que se indican a continuación:
- Tu instancia de origen debe incluir la base de datos
postgres. Si no tienes esta base de datos, créala. - Instala el paquete
pglogicalen la instancia de origen y asegúrate de que se incluya en la variableshared_preload_libraries.- Consulta Instala el paquete
pglogicalen la instancia de origen para tu entorno.
- Consulta Instala el paquete
Configura tus bases de datos de origen
Database Migration Service migra todas las bases de datos de la instancia de origen, excepto las siguientes:
- Para fuentes locales: bases de datos de plantillas
template0ytemplate1 - Para fuentes de Amazon RDS:
template0,template1yrdsadmin - Para fuentes de Cloud SQL: bases de datos de plantillas
template0ytemplate1
Haz lo siguiente en cada base de datos de la instancia de origen que no se mencionó con anterioridad:
Solo para fuentes de PostgreSQL versión 9.4, instala las siguientes extensiones
pglogicalen cada base de datos de tu instancia de origen:CREATE EXTENSION IF NOT EXISTS pglogical;CREATE EXTENSION IF NOT EXISTS pglogical_origin;
Para todas las demás versiones, instala solo la extensión
pglogicalen cada base de datos de tu instancia de origen:CREATE EXTENSION IF NOT EXISTS pglogical.Para las tablas que no tienen claves primarias, Database Migration Service admite la migración de la instantánea inicial y las sentencias
INSERTdurante la fase de CDC. Debes migrar las sentenciasUPDATEyDELETEde forma manual.El USER que uses para conectarte a la instancia de origen (que se configurará como usuario en la página Perfiles de conexión) debe tener ciertos privilegios en cada una de las bases de datos migradas, así como en la base de datos predeterminada de
postgres. Puedes crear un usuario nuevo o reutilizar uno existente. Para configurar estos privilegios, conéctate a la instancia y ejecuta los siguientes comandos:GRANT USAGE on SCHEMA SCHEMA to USERen todos los esquemas (aparte del esquema de información y los esquemas que comienzan con "pg_") de cada base de datos que vayas a migrar.GRANT USAGE on SCHEMA pglogical to PUBLIC;en cada base de datos que vayas a migrar.GRANT SELECT on ALL TABLES in SCHEMA pglogical to USERen todas las bases de datos para obtener información de replicación de las bases de datos de origen.GRANT SELECT on ALL TABLES in SCHEMA SCHEMA to USERen todos los esquemas (aparte del esquema de información y los esquemas que comienzan con "pg_") de cada base de datos que vayas a migrar.GRANT SELECT on ALL SEQUENCES in SCHEMA SCHEMA to USERen todos los esquemas (aparte del esquema de información y los esquemas que comienzan con "pg_") de cada base de datos que vayas a migrar.- Si tu fuente es Amazon RDS, ejecuta el siguiente comando:
GRANT rds_replication to USER
- Si tu fuente no es Amazon RDS, ejecuta el siguiente comando:
ALTER USER USER with REPLICATIONRol
Instala el paquete pglogical en la instancia de origen
En esta sección, se describe cómo configurar el paquete pglogical, incluida la configuración de los parámetros max_replication_slots, max_wal_senders y max_worker_processes.
También puedes obtener los valores correctos para estos parámetros si
ejecutas una prueba de trabajo de migración cuando creas el trabajo de migración.
Durante esta prueba, Database Migration Service puede verificar tu configuración y sugerir los valores correctos.
PostgreSQL local o autoadministrado
- Instala el paquete pglogical en el servidor.
- Conéctate a la instancia y establece los siguientes parámetros, según sea necesario:
shared_preload_librariesdebe incluirpglogical.Para establecer este parámetro, ejecuta el comando
ALTER SYSTEM SET shared_preload_libraries = 'pglogical,[any other libraries in your instance]';.Establece
wal_levelenlogical.Para establecer este parámetro, ejecuta el comando
ALTER SYSTEM SET wal_level = 'logical';.Establece
wal_sender_timeouten0.Para establecer este parámetro, ejecuta el
ALTER SYSTEM SET wal_sender_timeout = 0;, en el que0inhabilita el mecanismo de tiempo de espera que se usa para finalizar las conexiones de replicación inactivas.max_replication_slots define la cantidad máxima de ranuras de replicación que puede admitir la instancia de origen. Debe establecerse en, al menos, la cantidad de suscripciones que se espera conectar, además de algunas reservas para la sincronización de tablas.
Database Migration Service requiere una ranura para cada base de datos que se migra (que son todas las bases de datos de la instancia de origen).
Por ejemplo, si hay 5 bases de datos en la instancia de origen y se crean 2 trabajos de migración para la fuente, la cantidad de ranuras de replicación debe ser al menos de 5 * 2 = 10, además de la cantidad de ranuras de replicación que ya usas. Si planeas usar parámetros de paralelismo de volcado de datos ajustados, asegúrate de aumentar la cantidad de ranuras de replicación y verificar tu configuración ejecutando la prueba de trabajo de migración cuando crees el trabajo de migración.
Para establecer este parámetro, ejecuta el comando
ALTER SYSTEM SET max_replication_slots = #;, en el que # representa la cantidad máxima de ranuras de replicación.max_wal_senders debe ser, al menos, igual que
max_replication_slots, además de la cantidad de remitentes que ya se usaron en tu instancia.Por ejemplo, si el parámetro
Para establecer este parámetro, ejecuta el comandomax_replication_slotsse establece en10y ya usas 2 remitentes, la cantidad de procesos de remitente WAL que se ejecutan al mismo tiempo sería 10 + 2 = 12. Si planeas usar parámetros de paralelismo de volcado de datos ajustados, asegúrate de aumentar la cantidad de remitentes y verificar tu configuración ejecutando la prueba de trabajo de migración cuando crees el trabajo de migración.ALTER SYSTEM SET max_wal_senders = #;, en el que # representa la cantidad de procesos de remitente WAL que se ejecutan de manera simultánea.max_worker_processes debe ser una cantidad, por lo menos, igual a la de bases de datos que Database Migration Service va a migrar (que son todas las bases de datos de la instancia de origen), además de la cantidad de
max_worker_processesque ya se usan en tu instancia.Si planeas usar parámetros de paralelismo de volcado de datos ajustados, asegúrate de aumentar la cantidad de procesos de trabajadores y verificar tu configuración ejecutando la prueba de trabajo de migración cuando crees el trabajo de migración.
Para establecer este parámetro, ejecuta el comando
ALTER SYSTEM SET max_worker_processes = #;, en el que # representa la cantidad de bases de datos que se migrarán.
- Para aplicar los cambios de configuración, reinicia la instancia de origen.
Amazon RDS PostgreSQL
- Instala la extensión
pglogicalen tu base de datos de origen. Para obtener más información, consulta Cómo usar extensiones de PostgreSQL con Amazon RDS para PostgreSQL en la documentación de Amazon RDS. Configura la instancia de origen con grupos de parámetros.
- Crea un grupo de parámetros nuevo. En el grupo de parámetros:
- Asegúrate de que el parámetro
shared_preload_librariesincluyapglogical. - Establece el parámetro
rds.logical_replicationen1. Esto habilitará los registros WAL en el nivel lógico. - Establece el parámetro
wal_sender_timeouten 0. Esto inhabilitará el mecanismo de tiempo de espera que se usa para finalizar las conexiones de replicación inactivas. Establece el max_replication_slots parámetro. Este parámetro define la cantidad máxima de ranuras de replicación que puede admitir la instancia de origen. Debe establecerse en, al menos, la cantidad de suscripciones que se espera conectar, además de algunas reservas para la sincronización de tablas.
Database Migration Service requiere una ranura para cada base de datos que se migra (que son todas las bases de datos de la instancia de origen).
Por ejemplo, si hay 5 bases de datos en la instancia de origen y se crearán 2 trabajos de migración para la fuente, la cantidad de ranuras de replicación debe ser al menos de 5 * 2 = 10, además de la cantidad de ranuras de replicación que ya usas. Si planeas usar parámetros de paralelismo de volcado de datos ajustados, asegúrate de aumentar la cantidad de ranuras de replicación y verificar tu configuración ejecutando la prueba de trabajo de migración cuando crees el trabajo de migración.
El valor predeterminado para este parámetro es 10.
Establece el max_wal_senders parámetro en, al menos, lo mismo que
max_replication_slots, además de la cantidad de remitentes que ya se usaron en tu instancia.Por ejemplo, si el parámetro
max_replication_slotsse establece en10y ya usas 2 remitentes, la cantidad de procesos de remitente WAL que se ejecutan al mismo tiempo sería 10 + 2 = 12. Si planeas usar parámetros de paralelismo de volcado de datos ajustados, asegúrate de aumentar la cantidad de remitentes y verificar tu configuración ejecutando la prueba de trabajo de migración cuando crees el trabajo de migración.El valor predeterminado para este parámetro es 10.
Establece el parámetro de origen max_worker_processes en, al menos, la misma cantidad de bases de datos que Database Migration Service va a migrar (que son todas las bases de datos de la instancia de origen), además de la cantidad de
max_worker_processesque ya se usan en tu instancia. Si planeas usar parámetros de paralelismo de volcado de datos ajustados, asegúrate de aumentar la cantidad de procesos de trabajadores y verificar tu configuración ejecutando la prueba de trabajo de migración cuando crees el trabajo de migración.El valor predeterminado para este parámetro es 8.
Adjunta el grupo de parámetros a la instancia. Si creas una instancia nueva, puedes encontrar esta opción en Configuración adicional. De lo contrario, modifica la instancia para adjuntar el grupo de parámetros.
Para aplicar los cambios de configuración, reinicia la instancia de origen.
Cloud SQL para PostgreSQL
Habilita la replicación lógica y la decodificación para la base de datos de origen configurando las siguientes marcas.
- Establece las marcas
cloudsql.logical_decodingycloudsql.enable_pglogicalenon. Establece la marca max_replication_slots. Esta marca define la cantidad máxima de ranuras de replicación que puede admitir la instancia de origen. Debe establecerse en, al menos, la cantidad de suscripciones que se espera conectar, además de algunas reservas para la sincronización de tablas.
Database Migration Service requiere una ranura para cada base de datos que se migra (que son todas las bases de datos de la instancia de origen).
Por ejemplo, si hay 5 bases de datos en la instancia de origen y se crearán 2 trabajos de migración para la fuente, la cantidad de ranuras de replicación debe ser al menos de 5 * 2 = 10, además de la cantidad de ranuras de replicación que ya usas. Si planeas usar parámetros de paralelismo de volcado de datos ajustados, asegúrate de aumentar la cantidad de ranuras de replicación y verificar tu configuración ejecutando la prueba de trabajo de migración cuando crees el trabajo de migración.
El valor predeterminado para esta marca es 10.
Establece la marca max_wal_senders en, al menos, lo mismo que
max_replication_slots, además de la cantidad de remitentes que ya se usaron en tu instancia.Por ejemplo, si la marca
max_replication_slotsse establece en10y ya usas 2 remitentes, la cantidad de procesos de remitente WAL que se ejecutan al mismo tiempo sería 10 + 2 = 12. Si planeas usar parámetros de paralelismo de volcado de datos ajustados, asegúrate de aumentar la cantidad de remitentes y verificar tu configuración ejecutando la prueba de trabajo de migración cuando crees el trabajo de migración.El valor predeterminado para esta marca es 10.
Establece la marca de origen max_worker_processes en, al menos, la misma cantidad de bases de datos que Database Migration Service va a migrar (que son todas las bases de datos de la instancia de origen), además de la cantidad de
max_worker_processesque ya se usan en tu instancia. Si planeas usar parámetros de paralelismo de volcado de datos ajustados ten en cuenta dos procesos de trabajadores adicionales por conexión (hasta un máximo de 20 trabajadores).El valor predeterminado para esta marca es 8.
- Reinicia la instancia de origen para que se apliquen los cambios de configuración que realizaste en las marcas.
Habilita la supervisión del retraso de replicaciones para las versiones de PostgreSQL anteriores a la 9.6
Si migras desde una versión de PostgreSQL anterior a la 9.6, la métrica de retraso de replicación no está disponible de forma predeterminada. Existen tres alternativas que te permiten realizar un seguimiento de esta métrica para asegurar un tiempo de inactividad mínimo cuando promueves la base de datos:
Opción 1: Habilita Database Migration Service para hacer un seguimiento del retraso de replicación otorgando acceso a una consulta específica. Con un usuario con el privilegio
SUPERUSER, haz lo siguiente:Define la siguiente función para permitir que Database Migration Service consulte el retraso de replicación.
CREATE OR REPLACE FUNCTION pg_stat_replication_user() RETURNS TABLE ( pid integer , usesysid oid , username name , application_name text , client_addr inet , client_hostname text , client_port integer , backend_start timestamp with time zone , backend_xmin xid , state text , sent_location pg_lsn , write_location pg_lsn , flush_location pg_lsn , replay_location pg_lsn , sync_priority integer , sync_state text ) LANGUAGE SQL SECURITY DEFINER AS $$ SELECT * FROM pg_catalog.pg_stat_replication; $$;Otorga el permiso
EXECUTEal USER ejecutando los siguientes comandos:REVOKE EXECUTE ON FUNCTION pg_stat_replication_user() FROM public;GRANT EXECUTE ON FUNCTION pg_stat_replication_user() to {replication_user};
Opción 2: Otorga el privilegio
SUPERUSERdirectamente al USER que se usó para conectarse a la instancia de origen. Esto permitirá que Database Migration Service lea el retraso de replicación directamente.Opción 3: Realiza un seguimiento del retraso de replicación de forma independiente con la siguiente consulta:
SELECT current_timestamp, application_name, pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.sent_location) AS sent_location_lag, pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.write_location) AS write_location_lag, pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.flush_location) AS flush_location_lag, pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.replay_location) AS replay_location_lag FROM pg_stat_replication WHERE application_name like 'cloudsql%';
En esta opción, Database Migration Service no reflejará la métrica de retraso de replicación en los grafos o las respuestas de la API.