Nodos

Vamos con la configuración de los nodos que contendrán Apache2 + PHP + MySQL Galera Clusters + GlusterFS + memcached

GlusterFs

El primer problema que nos encontramos cuando queremos utilizar un sistema de nodos es que cada servidor tiene sus discos duros y por lo tanto tenemos que buscar alguna manera de sincronizar los ficheros, para esto vamos a usar GlusterFS

Tenemos varios métodos de sincronización de ficheros pero nosotros vamos a utilizar el tipo replica

GlusterFS Replica

Lo primero que vamos a realizar es añadir al fichero hosts las direcciones de la red interna de los diferentes nodos para facilitarnos la vida en la comunicación con gusterfs

Para tener la ultima versión de GlusterFS vamos a agregar el respositorio PPA

Instalamos el paquete software-properties-common

Instalamos glusterfs-server en todos los nodos

Arrancamos GlusterFs

Y lo habilitamos para que arranque al arrancar el sistema

Vamos a conectar los nodos entre si, no es necesario conectar el nodo-1 a si mismo por lo que lo obviamos

Para comprobar que los nodos están conectados disponemos de los siguientes comandos

NOTA: Para servers en producción es recomendable usar glusterfs en otra partición que no sea la de sistema.

Creamos un volumen con los 3 nodos en modo replica

Si en el futuro quisiéramos agregar un nuevo nodo para dar más maquinas a nuestro clusters, lo realizaríamos de la siguiente manera

Una vez listo el el volumen lo arrancamos

Podemos comprobar el estado del volumen

Ahora para poder utilizar nuestro volumen vamos a montarlo en la carpeta /var/www/html/ para ello en cada nodo editamos el fstab

Y agregamos la siguiente linea

guardamos y montamos el nuevo punto

Ahora cada fichero que se cree modifique o elimine de uno de los nodos se replicara en los otros nodos de manera automática.

Durante el proceso de arranque, GlusterFS tardará un poco en iniciarse. systemd-mount, que maneja los puntos de montaje desde /etc/fstab, se ejecutará antes de que el servicio glusterfs-server termine de iniciarse.

El montaje fallará, por lo que terminará sin su volumen montado después de reiniciar.

La solución es crear el siguiente directorio

y dentro el siguiente fichero

recargamos systemd

Y en el siguiente arranque ya tendremos el punto de montaje cargado automaticamente.

Apache + PHP

Ahora que ya nos funciona el sistema de archivos compartidos vamos instalar apache2 + php

instalamos php y los complementos para mysql

Agregamos apache al arranque del sistema

Eliminar el banner de la versión del servidor

Apache por defecto nos muestra en las peticiones su versión y el sistema operativo en el que esta corriendo.

Vamos a ocultar las versiones y el sistema operativo de nuestro servidor para dar la menor información posible a los atacantes, para ello editamos el siguiente fichero

Dejando los siguiente valores de esta manera

Deshabilitar el listado de directorios en el navegador

Una configuración que trae por defecto apache es listar los ficheros de los directorios por lo que se puede producir una fuga de información si no nos acordamos de poner un fichero index.php o index.html para evitar el listado, para no tener que revisar todas las carpetas.

Editamos el fichero

y buscamos donde se encuentre la opcion Indexes y le ponemos un guion delante quedando de la siguiente manera o podemos eliminar directamente la opcion

Reiniciamos apache para aplicar los cambios.

Mariadb Galera Cluster

Tenemos muchas maneras de montar un sistema de base de datos en modo clúster con mysql, Percona, galera, en nuestro caso lo vamos a realizar con MariaDB.

Nos descargamos el siguiente paquete para configurar los repositorios según nuestro sistema

Damos permisos de ejecución

Ejecutamos el script para que nos agregue los repositorios

Si no tenemos el siguiente paquete nos dará error a la hora de agregar los repositorios

Actualizamos

Instalamos MariaDB y galera

Ahora vamos a pasar a configurar los nodos, las configuraciones entre ellos son casi idénticas.

De forma predeterminada, MariaDB está configurado para comprobar el directorio /etc/mysql/mariadb.conf.d donde busca configuraciones adicionales desde los archivos que terminan en .cnf. Por lo que vamos a crear el siguiente fichero.

Agregamos la siguiente configuración:

  • bind-address: En la ip que escuchara galera.

  • wsrep_cluster_name: El nombre de nuestro cluster

  • wsrep_cluster_address: Los nodos del cluster

  • wsrep_node_address: La ip del nodo

  • wsrep_node_name: EL nombre del nodo

Replicamos esta configuración en el resto de los nodos cambiado los diferentes datos.

Activamos mysql para que arranque al comienzo

Para configurar el primer nodo, deberá usar una secuencia de comandos de inicio especial. Por la manera en que configuró el clúster, cada nodo que se conecte intentará establecer conexión con al menos otro nodo especificado en su archivo 61-clustervaclusterviene.cnf para obtener su estado inicial. Un systemctl start mysql normal fallaría porque no hay en ejecución nodos con los que el primer nodo se pueda conectar.

Ejecutamos en el primer nodo

Una vez terminado podemos comprobar el tamaño del cluster

En el resto de los nodos arrancamos mysql de manera normal

Repetimos el comando de antes para ver el aumento del cluster

Y así sucesivamente entre todos los nodos que tengamos.

Vamos a probar la replicación

Con este comando crearemos la base de datos clusterVaClusterViene y la table equipment, donde agregaremos un row con los valores, slide, 2, blue.

Ahora vamos a otro nodo para ver que los datos son accesibles y ejecutamos

Insertamos otro dato y repetimos el proceso en el resto de nodos.

Para que la gente no se pueda conectar por la ip publica a los puertos 80 y 443 lo bloqueamos mediante iptables en la interfaz publica

Como las iptables si se reinicia el equipo se pierden y no queremos estar agregándolas manualmente vamos a instalar el paquete iptables-persistent

Las configuraciones se guardan en estos dos ficheros

Si hacemos algún cambio a las iptables nos tenemos que acordar de guardarlas

Memcached

Ahora que ya solo nos falta poder tener las sesiones compartidas entre los diferentes nodos para ello vamos a usar memcached

Si vamos a la configuración vemos que la ip de escucha es localhost pero para poderlo tener en modo cluster tenemos que decirle que escuche en nuestra red interna.

cambiándola de la siguiente manera en cada nodo

Una vez que tenemos configurado reiniciamos los nodos e iremos a configurar php

Abrimos la configuración de php y buscamos la sección de sesiones

Y la dejamos de la siguiente manera

Ahora vamos a configurar el modulo de memcached

La directiva memcache.session_redundancy debe ser igual a la cantidad de servidores Memcached + 1 para que la información de la sesión se replique en todos los servidores. Esto se debe a un error en PHP.

Estas directivas permiten la conmutación por error y la redundancia de la sesión, por lo que PHP escribe la información de la sesión en todos los servidores especificados en session.save_path; similar a una configuración RAID-1.

Última actualización