Nodos
Última actualización
Última actualización
Vamos con la configuración de los nodos que contendrán Apache2 + PHP + MySQL Galera Clusters + GlusterFS + memcached
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
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.
Existe un bug en glusterfs en ubuntu si se usan los volúmenes en los propios servidores.
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.
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
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
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.
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
Como los repositorios de mariadb no han sido actualizados todavía a "22.04 (Jammy Jellyfish)" No lanzaremos los repositorios oficiales, por lo que las versiones que se nos instalaran son las siguiente:
Cuando se lance el repositorio seria recomendable activarlos.
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
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.