GeekClusterPi - Parte 5: Sincronización BBDD y Ficheros

Categoría: GeekClusterPi Creado: Miércoles, 24 Mayo 2017 Publicado: Jueves, 25 Mayo 2017 Escrito por Francisco Javier Sánchez Gragera

 Aunque nuestro cluster ya es funcional en éste punto, aún no lo podemos dar por terminado. Para evitar tener que realizar el trabajo por triplicado, una vez por cada nodo, debemos idear alguna forma de sincronizar los ficheros del servidor web y las bases de datos MySql. Realizaremos una replicación circular de los ficheros y entradas de bases de datos, de tal forma que el nodo 1 escribirá los cambios sobre el nodo 2, el nodo 2 sobre el nodo 3, y finalmente el nodo 3 sobre el primer nodo.

 

Esquema

 

Estos pasos de configuración habrá que realizarlos ya de forma distinta en cada nodo, ya que hay que relacionar las replicaciones usando las direcciones ip de cada uno.

 

Replicación de Base de Datos

La configuración de MySQL la podemos encontrar en /etc/mysql/my.cnf. Podemos editar este fichero desde el gestor de archivos de webmin o vía ssh, con el comando "nano /etc/mysql/my.cnf". En este fichero debemos hacer en primer lugar dos modificaciones dentro del apartado [mysqld]:

  • log_slave_updates = true. Con este parámetro decimos a MySQL del nodo que replique no solo los cambios en Bases de Datos que en él se producen, sino también los cambios que recibe de su maestro. Si hacemos un cambio en el nodo 1, este replicará el cambio al nodo 2, pero para que ese cambio pase del nodo 2 al nodo 3 debemos activar log_slave_updates.
  • binlog_do_db = nombre_base_de_datos. Aquí definimos la tabla a replicar, en mi caso utilicé una tabla llamada prueba, que veremos ahora como se crea. Podemos crear varias líneas si queremos que se repliquen varias bases de datos.

 

Configuración my.cnf

 

Para los siguientes pasos usaremos el asistente phpMyAdmin, que nos facilitará mucho la configuración y además nos proporciona un informe de replicación muy útil.

Para acceder a PhpMyAdmin en el primer nodo, por ejemplo, debemos introducir en el navegador: http://192.168.1.21/phpmyadmin. Se nos pide usuario y contraseña para acceder, el usuario es root y la contraseña es la del sistema.

Lo primero que debemos hacer es crear la base de datos que especificamos en el fichero my.cnf. Para ello abriremos la pestaña "Bases de datos", dónde se nos mostrará un campo en blanco para poner el nombre de la base de datos (prueba) , y un botón "Crear" que pulsaremos para enviar la orden.

 

Crear BBDD

 

El siguiente paso es crear un usuario replicador, que para no complicarnos será el mismo en cada nodo. Para ello pulsamos en la pestaña "Replicación", y luego a la opción "Agregar usuario de replicación esclavo". El usuario y contraseña debe ser distinto del root.

 

Usuario replicator

 

Cada nodo será maestro sobre el siguiente nodo, y esclavo del anterior. Debemos ahora especificar en cada nodo cuál el maestro del que recibirá la replicación. Para ello hay que especificar el usuario que va a replicar (el que configuramos antes), el puerto de comunicación (3306), y el servior maestro que replica a este nodo:

  • En phpmyadmin del nodo 1 (192.168.1.21), hay que poner como maestro el nodo 3 (192.168.1.23)
  • En phpmyadmin del nodo 2 (192.168.1.22), hay que poner como maestro el nodo 1 (192.168.1.21)
  • En phpmyadmin del nodo 3 (192.168.1.23), hay que poner como maestro el nodo 2 (192.168.1.22)

 

Agregar maestro

 

Una vez establecidas las prioridades de replicación, se pueden comprobar los parámetros con el monitor de estado, tanto de la parte maestra como esclava. Como se ve MySql no identifica los servidores con la ip, si no con el id de cada servidor. Gracias al asistente de phpmyadmin nosotros no tenemos hacerlo así, pero conviene anotar el id del MySql de cada nodo.

 

Resultado replicacion

 

Estos son los pasos que yo seguí para configurar la replicación. Por supuesto hay muchos más parámetros que se pueden consultar en la referencia de mySQL

 

Sincronización de Ficheros

La solución de almacenamiento mas común en clustering es NFS. Sin embargo yo me he limitado a sincronizar la carpeta "/var/www/" con rsync y ftp. NFS es más adecuado, probablemente usaré esta opción en el futuro.

Como servicio ftp uso ProFTPD, debiendo configurar en el fichero "/etc/proftpd/proftpd.conf" el parámetro "DefaultRoot= /var/www"

 

Configuración Proftpd

 

Una vez modificada la raiz del servidor ftp, debemos configurar nuevamente la replicación circular entre nodos. Para evitar problemas de permisos de escritura en carpetas ftp remotas, usaremos ftp para leer los ficheros y los escribiremos en local, de la siguiente forma:

  • Nodo 1 (192.168.1.21): Leerá por ftp el Nodo 3 (192.168.1.23) y sincronizará escribiendo localmente en "/var/www"
  • Nodo 2 (192.168.1.22): Leerá por ftp el Nodo 1 (192.168.1.21) y sincronizará escribiendo localmente en "/var/www"
  • Nodo 3 (192.168.1.23): Leerá por ftp el Nodo 2 (192.168.1.22) y sincronizará escribiendo localmente en "/var/www"

Para realizar esta configuración usaremos el script dietpi-sync que nos brinda el sistema y que nos guiará en la elección del origen de la sincronización, del destino y del canal (ftp). El mismo script nos deja introducir la sincronización en Cron.

 

Dietpi-Sync

 

La sincronización de ficheros de esta forma no es inmediata, tendremos que esperar a que se ejecuten las tareas cron. Nuevamente es mas adecuado montar un servidor NFS como origen de ficheros, pues nos resolvería este problema. Si modifico la sincronización de ficheros lo mostraré en un nuevo artículo.

Con esto llegamos al final de este tutorial. Espero que les haya gustado, y que se animen a probar. Por supuesto se pueden mejorar muchas cosas y espero que me comenten sus ideas. ¡Un saludo y gracias por el interés!

 

Anterior: Instalación Balanceador y Servidor Web

 

Visto: 507

Comentarios   

#3 Javier 22-06-2017 06:01
Yo instalé primero la web completa en un servidor. Después cloné la sd y a cada una le dí su correspondiente dirección ip. A partir de ahí sincronizo las carpetas de anexos. Si quiero instalar complementos no tengo más remedio que hacerlo en cada servidor de forma individual.
Citar
#2 Javier 22-06-2017 05:58
Pues si la página web es estática puedes hacerlo así. Si es un CMS como en mi caso, se complica la cosa. Hay que deshabilitar chaches, y tener mucho cuidado cuando se instalen nuevos módulos. Joomla funciona en php, y trabaja coordinando mysql con los ficheros físicos. En este tema es mejor dejar que cada nodo vaya a su aire. La replicación de BBDD si es inmediata, y funciona bien. Como la base de datos gestiona los usuarios autentificados te mantiene la sesión abierta aunque pases de un nodo a otro (bajo la misma ip del balanceador). Quizás si hiciese un nuevo clúster usaría un sistema de ficheros NFS, entonces el funcionamiento de páginas web dinámicas sería mejor.
Citar
#1 caracolgeek 20-06-2017 12:40
Pues fíjate que hasta lo he entendido, no veo por que no se lo podría hacer cualquier persona.
Solo una duda: la web que pones en /var/www la pones en el nodo 1 solo y luego ya se replica sola en los otros nodos.¿es asi?
Citar

Escribir un comentario


Código de seguridad
Refescar