¿Cómo migrar tu base de datos on premise a la nube de AWS?
criscarba
Posted on August 11, 2022
En esta publicación voy a estar hablando sobre el servicio de AWS llamado Database Migration Service (DMS).
Caracteristicas Principales
AWS Database Migration Service (DMS) es un servicio de AWS que nos permite la migración de bases de datos a la nube.
Permite realizar la migración de bases de datos On Premise (y cloud) hacia AWS.
DMS es un servicio resiliente a potenciales fallos (highly resilient & self–healing)
A lo largo de la migración de datos la base de datos de origen (Source) se mantiene activa sin interrupciones.
DMS Soporta migraciones de bases de datos de manera:
Homogéneas: Ej. Caso de uso: PostgreSQL ⇒ PostgreSQL
Heterogéneas: Ej. Caso de uso: MS Sql Server ⇒ Aurora (Debe utilizarse el SCT (Schema Conversion Tool))Los tipos de migraciones pueden ser:
Full/Snapshot
Change Data Capture (CDC)El Schema Conversion Tool (SCT) permite convertir el schema de una BDD de un motor a otro.
Puede ser utilizado entre bases de datos OLTP / OLAP
Ej. OLTP: Oracle ⇒ PostgreSQL
Ej. OLAP: Teradata ⇒ Redshift
Endpoints
Para utilizar DMS es necesario definir un Sourcer y Target Endpoint. A Continuación mostraré los actualmente disponibles:
DEMO
Descripción del escenario:
- La compañía “Sin Nombre SRL” está comenzando a dar sus primeros pasos en el mundo Cloud.
- Luego de analizar las distintas soluciones y tecnologías disponibles en el mercado, optaron por migrar su infraestructura de Base de datos hacia AWS, utilizando el servicio RDS.
- La actual base de datos es PostgreSQL y está sobre un servidor dedicado el cual requiere mantenimiento (patches/seguridad/OS/etc), el cual debe ser reducido.
- Es necesario que el 100% de los datos actuales sean migrados a la nube, exceptuando algunas entidades de datos.
- Debe replicarse diariamente los cambios ocurridos en el origen.
NOTA: Debemos contar con una instancia de Clod9
Pasos a Realizar:
- Crear las 2 instancias (Source y Target) con un script de CloudFormation.
- Crear una Inbound Rule en el security group de cada Base de datos para abrir el puerto de PostgreSQL.
- Crear instancia de replicación en DMS.
- Instalar Postgres Tools (psql)
- Conectarse a Source DB
- Ejecutar script de creación de tablas en Source DB
- Crear en DMS el Source Endpoint y Target Endpoint.
- Probar conexión a Target DB y validar que se encuentra sin datos
- Crear tarea de replicación (FULL LOAD) y ejecutar.
- Validar que los datos hayan sido replicados en el target.
- Crear tarea de replicación (CDC) y ejecutar.
- Insertar registros nuevos en la tabla de Source DB.
- Validar que los datos hayan sido replicados en el target.
- Eliminar Recursos.
Paso # 1: Crear las 2 instancias (Source y Target) con un script de CloudFormation.
- Ejecutar el siguiente comando para posicionarse en el directorio donde se encuentra el archivo bash para realizar el deployment.
cd /home/ec2-user/environment/Datapath/DMS
- Ejecutar el archivo “deploy.sh” (Creación de Stack CloudFormation)
bash deploy.sh
- Verificar que se esté ejecutando el stack en Cloudformation
Paso # 2: Crear una Inbound Rule en el security group de cada Base de datos para abrir el puerto de PostgreSQL.
- Ir al servicio de RDS y modificar los security groups para poder abrir los puertos 5432 (PostgreSQL)
- En la parte inferior derecha se puede visualizar el security group de nuestra instancia de BDD. Hacer Click en el link del security group para que nos direccione a las configuraciones
- Hacer Click en “Edit inbound Rules” y agregar la misma regla que está en las imágenes de a continuación para abrir el puerto de postgres.
Paso # 3: Crear instancia de replicación en DMS.
- Ingresar al servicio DMS y crear una nueva Replication Instance haciendo click en el boton “Create replicacion instance” (boton naranja)
Ingresar un nombre (no utilizar el de la imagen) que debe ser único. Se recomienda agregarle de sufijo el ID de cuenta de AWS
Dejar los valores por default y establecer:
Allocated Storage: 5 Gb
VPC: Dejar la default
Type: Single AZ
Publicly Accessible: No seleccionado
Paso # 4: Instalar Postgres Tools (psql)
- Dentro de la instancia de Cloud9, ejecutar el siguiente comando:
sudo yum install postgresql -y
Paso #5: Conectarse a Source DB
- Dentro de la instancia de Cloud9, ejecutar el siguiente comando para conectarnos a la Source DB:
Asegurarse de reemplazar el valor en rojo por el endpoint de la base de datos source:
psql -h [[++SOURCE_ENDPOINT++]] \
-U postgres \
-p 5432 \
-d postgres
Password es: source_p4assw0rd
Paso #6: Ejecutar script de creación de tablas en Source DB
`create table if not exists personas
(
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
nombre varchar(100),
apellido varchar(100),
telefono varchar(100)
);
insert into personas (nombre, apellido, telefono) values ('cristian','carballo','1234');
insert into personas (nombre, apellido, telefono) values ('Juan','Lopez','1234');
insert into personas (nombre, apellido, telefono) values ('Miguel','Garcia','1234');
insert into personas (nombre, apellido, telefono) values ('Roman','Riquelme','1234');
insert into personas (nombre, apellido, telefono) values ('Diego','Maradona','1234');
create table if not exists marcas
(
id bigint GENERATED ALWAYS AS IDENTITY,
nombre varchar(100),
ubicacion varchar(100)
);
insert into marcas (nombre, ubicacion) values ('Nike','USA');
insert into marcas (nombre, ubicacion) values ('Reebok','UK');
insert into marcas (nombre, ubicacion) values ('Adidas','Nigeria');
`
Paso #7: Crear en DMS el Source Endpoint y Target Endpoint.
- Ingresar al servicio DMS y dentro de la opción de Endpoints, crear 2 endpoint:
Source Endpoint ⇒ PostgreSQL Source
Target Endpoint ⇒ PostgreSQL Target
*Paso #8: Probar conexión a Target DB y validar que se encuentra sin datos
*
Dentro de la instancia de Cloud9, ejecutar el comando para conectarnos a la Target DB, de igual manera a lo realizado en paso # 5.
Para validar que la Target BDD esté vacía, ejecutar el siguiente comando:
SELECT *
FROM pg_catalog.pg_tables
WHERE schemaname != 'pg_catalog' AND
schemaname != 'information_schema';
Paso #9: Crear tarea de replicación (FULL LOAD) y ejecutar.
- Dentro del servicio DMS crear una Migration Task con los siguientes parametros:
Paso #10: Validar que los datos hayan sido replicados en el target.
- Ejecutar en el Target BDD el siguiente comando y ver que se generó la tabla personas y luego accederla:
SELECT *
FROM pg_catalog.pg_tables
WHERE schemaname != 'pg_catalog' AND
schemaname != 'information_schema';
Paso #11: Crear tarea de replicación (CDC) y ejecutar.
- Dentro del servicio DMS crear una Migration Task con los siguientes parametros:
Paso # 12: Insertar registros nuevos en la tabla de Source DB.
- Para este ejemplo insertaremos 2 registros y actualizaremos uno ya existente
Paso #13: Validar que los datos hayan sido replicados en el target.
- Como se puede ver en la imagen a continuación, los registros fueron migrados correctamente.
Paso #14: Eliminar Recursos
- Para eliminar los recursos realizarlos de la siguiente manera respetando el orden:
Detener la tarea de migración del CDC.
Esperar que detenga y eliminar tarea de migración de CDC y FULL.
Esperar a que terminen de eliminarse las 2 tareas de migración y luego eliminar la Replication Instance.
Eliminar los 2 endpoints (Source & Target) creados en DMS.
Eliminar las 2 bases de datos en RDS de manera manual asegurándose de no realizar el backup.
En CloudFormation eliminar el stack de RDS (StackRDS).
En CloudFormation eliminar el stack generado por la creación de Cloud9 (aws-cloud9-datapath-xxxxx)
Posted on August 11, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 29, 2024