¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Kubernetes
  3. Implementar la replicación entre pods
Extrait - Kubernetes Administre la plataforma de despliegue de sus aplicaciones en contenedores
Extractos del libro
Kubernetes Administre la plataforma de despliegue de sus aplicaciones en contenedores
3 opiniones
Volver a la página de compra del libro

Implementar la replicación entre pods

Objetivos del capítulo y requisitos previos

Este capítulo es la continuación directa del capítulo anterior y va a abordar la implementación de la replicación (o sincronización) entre varios pods de bases de datos.

Se discutirán los mecanismos necesarios para configurar este tipo de sincronización, como por ejemplo:

  • creación del script de inicio,

  • los comandos que se ejecutarán al final del inicio de un contenedor,

  • los comandos que se ejecutarán al comienzo de la parada de un contenedor.

El contenido de este capítulo no se debe utilizar en producción. En primer lugar, se trata de un ejemplo de integración entre Kubernetes y MariaDB. Para implementar una base de datos con alta disponibilidad, consulte el capítulo Los operadores de Kubernetes.

Sincronizar los pods MariaDB

1. Presentación del problema

Las diferentes bases de datos arrancadas con anterioridad son completamente independientes: no hay sincronización.

Para sincronizar estas bases, Kubernetes no dispone de soluciones directas. La sincronización de contenidos es responsabilidad del administrador que configura la plataforma.

Antes de integrar correctamente este mecanismo dentro de Kubernetes, primero se estudiará una implementación manual.

2. Principio de funcionamiento de la sincronización

a. Operaciones que hay que realizar

La sincronización que se va a poner en marcha se estructurará de la siguiente manera:

  • Un maestro (máster) recibirá solicitudes de escritura.

  • Un esclavo replicará las peticiones del máster.

  • Las peticiones de lectura se realizarán en el máster o en el esclavo.

En MariaDB, el mecanismo de sincronización del máster a esclavo utiliza el siguiente principio:

  • Configurar el identificador de los servidores máster y esclavo(s).

  • Crear usuarios con permisos de replicación.

  • Configurar la sincronización en los esclavos.

b. Número de réplicas

Para el resto del ejercicio, el número de réplicas de los servidores MariaDB es dos.

 Para realizar esta operación, ejecute el siguiente comando:

$ kubectl scale sts mariadb --replicas=2 

El comando debe devolver el siguiente resultado:

statefulset.apps/mariadb scaled 

3. Identificadores de los servidores

a. Conexión a los pods

 En primer lugar, ejecute el comando para abrir un shell en el contenedor de MariaDB:

$ kubectl exec -it mariadb-0 -- bash 

b. Conexión a la base de datos

Cuando el Shell esté abierto en el contexto del pod, la conexión a la base de datos se realizará mediante el comando mysql, seguido de estas opciones:

  • la opción -u, seguida del usuario root,

  • la opción -p, seguida de la contraseña.

La contraseña del administrador de MariaDB está contenida en la variable de entorno MYSQL_ROOT_PASSWORD.

 Teniendo en cuenta estas instrucciones, ejecute el siguiente comando para abrir una conexión con el servidor MariaDB:

$ mysql -u root -p$MYSQL_ROOT_PASSWORD 

Ahora está conectado a la base de datos.

c. Identificadores de los servidores

Cada servidor del clúster MariaDB debe tener un identificador único....

Automatizar la sincronización

1. Scripts de inicio y sincronización

a. Script de inicio

Antes de continuar, se va a abordar un primer aspecto: cambiar las opciones de inicio en función del nombre del pod.

El script recuperará el identificador del pod (0 para mariadb-0, 1 para mariadb-1, etc.) y lo incrementará en 1. El número obtenido de esta manera servirá como identificador para la opción server-id.

Otra acción que es preciso realizar: configurar la sincronización en función del rol:

  • Crear una cuenta de sincronización en el maestro.

  • Configurar la sincronización en el esclavo.

Para separar un poco las cosas, esta segunda acción la realizará otro script.

Otro aspecto importante: el contenedor MariaDB del pod mariadb-1 no debe realizar la creación del usuario. Si el usuario ya está presente cuando se activa la sincronización, el proceso esclavo se detendrá, indicando que el usuario ya existe.

Una solución será eliminar la declaración de las variables MYSQL_USER y MYSQL_PASSWORD con el comando unset.

Reuniendo todas estas indicaciones, se utilizará el siguiente script para iniciar MariaDB y se almacenará con el nombre start.sh:

#!/bin/sh 
INDEX=`hostname | awk -F- '{ print $2 }'` 
ID=`expr $INDEX + 1` 
OPTIONS="--server-id=$ID --log-bin --log-basename=master" 
OPTIONS="$OPTIONS --binlog-do-db=$MYSQL_DATABASE" 
OPTIONS="$OPTIONS --binlog-format=row 
--replicate-do-db=$MYSQL_DATABASE" 
/mariadb-init-db/configure-sync.sh 
case `hostname` in 
   mariadb-0): ;; 
   *) unset MYSQL_USER MYSQL_PASSWORD ;; 
esac 
exec docker-entrypoint.sh $OPTIONS 

b. Configurar la sincronización

El segundo script de configuración de sincronización se almacenará con el nombre configure-sync.sh y tendrá la siguiente forma:

#!/bin/sh 
# Si estamos en master => creamos la cuenta de replicación y salimos 
if [ `hostname` = "mariadb-0" ]; then 
   cp /mariadb-init-db/replication-user.sql 
/docker-entrypoint-initdb.d 
 exit 
fi 
# Si no, configuramos el esclavo 
echo "show master status;" | \ 
   mysql -h mariadb-0.mariadb -p$MYSQL_ROOT_PASSWORD...