Implementando Instancia de Base de Datos AWS RDS Multi-AZ
Tags: aws, database, cloud, spanish
Published: 2023-02-10 13:00:00

> **Nota:** ✋ Este post se publicó originalmente en mi blog [wiki-cloud.co](https://wiki-cloud.co/es/2022/10/deploying-amazon-rds-multi-az-instance/)

En un [artículo anterior](https://dev.to/aws-builders/alta-disponibilidad-con-aws-rds-multi-az-750) explicábamos los modelos de despliegue de alta disponibilidad que presenta Amazon RDS llamado Multi-AZ que presenta dos opciones donde se pueden tener una o dos instancias de base de datos en espera que son instancia de base de datos Multi-AZ y clúster de base de datos Multi-AZ respectivamente.

A continuación, nos vamos a concentrar en un ejemplo práctico de la implementación de _**instancia de base de datos Multi-AZ**_. El objetivo de este ejemplo práctico es configurar el esquema de instancia de base de datos Multi-AZ y vamos a comprobar su funcionalidad simulando cómo si hubiera una falla en la base de datos primaria haciendo un reinicio y ver cómo se hace el failover automáticamente en la base de datos en espera para que esta tome el lugar de la primaria.

![Multi-AZ DB Instance Deployment Architecture](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w57drl8ue46dv7edlief.png) Image 1 – Arquitectura implementación de instancia de base de datos Multi-AZ

Antes de iniciar con el despliegue de la base de datos RDS y la configuración del modelo de despliegue Multi-AZ, se debe haber previamente realizado la creación y configuración de la VPC con sus respectivas subredes públicas y privadas de acuerdo a la arquitectura que se haya diseñado.

Para el siguiente ejercicio práctico se utilizó la región de **_Europe (Paris) / eu-west-3_** que cuenta con tres zonas de disponibilidad y donde se hará uso de la VPC que viene por defecto para esta región, posteriormente durante la creación y configuración de la instancia de Amazon RDS se crearan las respectivas subredes.

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ti4vdcau0dj0f91rz2v7.png)

**<u>Creación y Configuración Amazon RDS Multi-AZ instance</u>**

Procederemos a buscar en la consola de administración de AWS el servicio de RDS y posteriormente iniciamos el proceso de creación y configuración de la instancia de base de datos de Amazon RDS habilitando el esquema Multi-AZ.

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t00g245fc0ug8ne416yk.png)

Seleccionamos la opción de creación estándar que nos permite establecer las opciones de configuración incluida la opción del modelo de despliegue Multi-AZ.

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1hq15wvzjsh6bos6hsdg.png)

En este ejemplo vamos a seleccionar el motor de base de datos MySQL para crear nuestra instancia y seleccionamos la última versión disponible en producción.

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uim1kj809igil8ysn2f6.png)

Ahora en las plantillas seleccionamos la de producción que nos trae ya por defecto valores predeterminados para una alta disponibilidad.

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o67ajrm5givlshx04vel.png)

El siguiente paso es definir el nombre de la instancia de base de datos y configuramos un usuario master con su respectiva contraseña cumpliendo con los parámetros definidos por la consola de administración de AWS.

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1aks0s6724wt3u52qvx1.png)

El siguiente paso es seleccionar el tipo de instancia para la base datos que incluye la cantidad de vCPUs, memoria RAM y red. Para este ejercicio práctico seleccione la instancia con las menores características.

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d4kuco67r80rd21qcbhx.png)

Ahora seleccionamos el almacenamiento donde estarán alojados nuestros datos, donde especificamos el tipo de disco, su capacidad en GiB y la cantidad de IOPS y si queremos que nuestro almacenamiento tenga auto escalamiento (opcional).

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2q7839d529pd5pzm0y1s.png)

Ahora viene el paso más importante de este ejercicio práctico y es la parte de disponibilidad y durabilidad donde seleccionamos el modelo de despliegue Multi-AZ que es el recomendado para escenarios de producción, en este caso se creará una instancia en espera en otra zona de disponibilidad en la región que hemos seleccionado (Europe – Paris / eu-west-3).

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8mhpzvyn0c7zlpx50law.png)

Por último, configuramos la parte de conectividad, donde en este caso seleccionamos la opción de conectarse a una instancia de EC2 que fue la que ya creamos previamente y seleccionamos la VPC que viene creada por defecto para esta región y agregamos un nuevo grupo de seguridad para la base de datos habilitando por el puerto 3306 que nos servirá para las pruebas de conectividad.

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n4tl9bgzn159r5cbyo62.png)

Las siguientes opciones las dejamos por defecto y damos click en el botón “Crear Base de Datos”.

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g8doo95rxmeihf7yn952.png)

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z5hvk7i8z4bhest4uwvs.png)

Una vez creada nuestra instancia de base de datos Amazon RDS (MySQL), adicionalmente tendremos creada nuestras subredes y nuestra instancia EC2 para hacer las respectivas pruebas de conectividad. Es importante copiar el Endpoint que nos servirá para configurar la cadena de conexión a nuestra instancia de base de datos.

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6eyk914gz0zyb4419njv.png)

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rn87rvao1h2k965ox8il.png)

**<u>Conexión y pruebas Amazon RDS Multi-AZ instance</u>**

Para la parte de las pruebas de conexión y verificación del modelo de despliegue Multi-AZ, vamos a iniciar con la parte de las pruebas de conectividad desde una instancia EC2 (Linux) y posteriormente vamos a simular una falla para verificar que funcione correctamente el modelo de despliegue Multi-AZ y la replicación.

El primer paso es conectarnos a la instancia de EC2 que hemos creado y configurado. En mi caso me conectaré a través de [Putty](https://www.putty.org/) pero también lo podemos hacer directamente desde la consola de administración de AWS.

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d4r9aazjfsoz7ndkovmv.png)

Enseguida vamos a ejecutar el siguiente comando en nuestra instancia EC2 de Linux para descargar las listas de paquetes actualizados de los repositorios con el fin de obtener información sobre las versiones más recientes de los paquetes y sus respectivas dependencias.

```
sudo apt-get update
```

Ahora vamos a instalar el cliente de MySQL en nuestra instancia de EC2 para conectarnos a la instancia de Amazon RDS (MySQL) que ya hemos creado y configurado y donde ejecutaremos algunos comandos para interactuar con una base de datos y verificar la replicación. Durante la ejecución del siguiente comando se nos pregunta si deseamos continuar y digitamos “Y” y la tecla “Enter” para continuar con el proceso.

```
sudo apt-get install default-mysql-client
```

Una vez instalado el cliente de MySQL, el siguiente paso será conectarnos a nuestra instancia de Amazon RDS y lo haremos a través del siguiente comando donde ponemos el Endponit que nos proporciona la configuración de Amazon RDS que aparece en la consola de administración de AWS.

```
mysql -h project-db.cmklzpffazxt.eu-west-3.rds.amazonaws.com -u admin -P 3306 -p
```

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aq3fgw30xhan9qy8550g.png)

A continuación, vamos a ejecutar una serie de comandos al motor de base de datos de MySQL para crear una base de datos, una tabla e insertar algunos datos de ejemplo.

```
SHOW DATABASES;
```
![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0itvr2bwyatfeoez2owi.png)
```
CREATE DATABASE Company;
```
```
SHOW DATABASES;
```

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fdk37a86gcu9mai3u7b3.png)

```
USE Company;
```
```
SHOW TABLES;
```
```
CREATE TABLE Employees (
  employeeId int(11) NOT NULL,
  lastName varchar(50) NOT NULL,
  firstName varchar(50) NOT NULL,
  jobTitle varchar(50) NOT NULL,
  city varchar(20) NOT NULL,
  country varchar(10) NOT NULL
);
```
```
SHOW TABLES;
```

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w4d3zsdne37mzsyb8qlf.png)

```
INSERT INTO Employees (employeeID, lastName, firstName, jobTitle, city, country) VALUES (1002,'Murphy','Diane','President', 'Seattle','United States');
INSERT INTO Employees (employeeID, lastName, firstName, jobTitle, city, country) VALUES (1056,'Patterson','Mary','VP Sales', 'London','England');
INSERT INTO Employees (employeeID, lastName, firstName, jobTitle, city, country) values (1102,'Bondur','Gerard','Sales Manager EMEA', 'Berlin','Germany');
INSERT INTO Employees (employeeID, lastName, firstName, jobTitle, city, country) values (1567,'Castillo','Paola','Sales Rep', 'Madrid','Spain');
```
```
SELECT * FROM Employees;
```

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2wubqufzxrgu4t1mk304.png)

Ahora lo que hacemos es ejecutar un comando en un intervalo de cada 5 segundos para saber la dirección IP de la base de datos (primaria) que está respondiendo a las solicitudes que haría una aplicación.

```
while true; do host project-db.cmklzpffazxt.eu-west-3.rds.amazonaws.com; sleep 5; done
```

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vxn8l7j3ui7d6jr36bc8.png)

Para verificar que se haga el failover lo que hacemos es un reinicio a la instancia de base de datos de Amazon RDS desde la consola de administración de AWS.

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uyweuqoc3pok7w8xxr0f.png)

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tby6rbaaz3lcs6rhgcul.png)

Una vez se realice el reinicio de la base de datos primaria de Amazon RDS, la base de datos en espera que contiene la réplica de los datos toma su lugar para convertirse en primaria y empieza a atender las solicitudes que van llegando.

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h62qxtb9qmzgvtvfa46r.png)

Por último, verificamos los eventos de la instancia de Amazon RDS (MySQL) en la consola de administración de AWS para verificar que efectivamente haya hecho el failover y se haya aplicado el modelo de despliegue Multi-AZ.

![Multi-AZ DB Instance Deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eavt2stbd1rz5r5dagph.png)

Espero esta demostración sea de utilidad!!

**Síguenos:**

> 👉[Wiki Cloud](http://wiki-cloud.co/) | 👉[Twitter](https://twitter.com/johnbulla) | 👉[LinkedIn](https://www.linkedin.com/in/johnbulla) | 👉[Youtube](https://www.youtube.com/user/johnbulla)