Caso de estudio
Es necesario tener un servicio web con alta disponibilidad y alto rendimiento para uno o varios sitios web, también es importante, sin ser crítico, tener servicio de correo, ftp y DNS secundario. Hay buscar una solución con tecnología Cloud lo más potente y sencilla posible para el fin detallado.
Solución
Para ello se decide montar un balanceador de carga redundado, como frontal para tener alta disponibilidad, de backend para el mismo fin, dos servidores web capaces de dar servicio web individualmente, además de dar mayor rendimiento adicionalmente aporta seguridad al tener la información redundada y con backups , también uno de estos servidores dará el servicio de correo, DNS secundario, FTP….
En cuanto a hardware se utiliza lo mínimo para un correcto funcionamiento, con opción de escalarlo si fuera necesario aumentar.
Infraestructura
Los servidores se crean sobre un Plan Cloud Data Center, en Gigas Hosting, dicho plan incluye varios servidores, ips, backups, Vlan y balanceador, necesarios para el proyecto, de la siguiente manera.
Balanceador
En otros proveedores es posible que no faciliten creado, pero en Gigas el balanceador lo tenemos creado en el panel, solo es necesario, añadir un ip de la Vlan y crear las instancias rellenando los campos con la ip de los backend, puerto del servicio a balancear y tipo de balanceo https://gigas.com/support/docs/index.php/Balanceador_y_Autoescalado con eso está listo el balanceador.
Servidor 1
Backend1
Ubuntu 20.04 + Plesk obsidian
6Gb de RAM
5CPUs Intel
200GB disco SSD
IP Publica e IP privada Vlan
En este servidor como va a dar más servicios se instala Ubuntu 20.04 y Plesk panel https://get.plesk.com/ sobre Ubuntu 20.04 , con instalación típica de ambos, una vez instalado actualizar y optimizar Plesk y el SO, con esto lo dejamos listo para las configuraciones necesarias para montar el clúster de BB.DD y sincronizar sitios web.
Algunas referencias para optimizar plesk:
- https://support.plesk.com/hc/en-us/articles/360018814453-How-to-increase-website-loading-speed-on-Plesk-
- https://support.plesk.com/hc/en-us/articles/115001711985-How-to-enable-leverage-browser-caching-for-Apache-in-Plesk
- https://support.plesk.com/hc/en-us/articles/115000935049-How-to-ensure-that-Opcache-is-enabled-
- https://www.solutein.com/acelerar-y-optimizar-mysql-con-mysql-tuner
Resumen de instalaciones:
Plesk panel
Unison
$ sudo apt install unison
Galera cluster Master/master
Para la réplica de BB.DD en ambos servidores usar Galera clúster, sincroniza en tiempo real y es muy sencillo de configurar, en la últimas versiones de Mariadb ya viene instalado., es necesario tenerlo instalado y configurarlo en ambos servidores, en plesk ya viene instalado, solo hay que configurarlo.
Referencias:
- https://www.josedomingo.org/pledin/2022/02/galera-mariadb/
- https://computingforgeeks.com/mariadb-master-master-replication-on-ubuntu/
Resumen de los pasos a seguir:
- Verificar que el hostname, archivos hosts y la zona horaria son correctos.
- Abrir puertos en ufw
- Instalar MariaDB en ambos servidores
- Configurar cluster desde el archivo /etc/mysql/mariadb.conf.d/50-cluster.cnf
Ejemplo de archivo para servidor 1:
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
# NOTA: la ruta correcta de la librería puede ser /usr/lib/libgalera_smm.so
wsrep_provider=/usr/lib/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name=»galera_cluster1″
wsrep_cluster_address=»gcomm://192.168.1.101,192.168.1.102″
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address=»192.168.1.101″
wsrep_node_name=»node1″
# The following line will save error messages to a plain file.
log_error = /var/log/mysql/error.log
Sincronizar archivos con Unison
Unison es una herramienta para sincronizar archivos y directorios entre diferentes sistemas de manera bidireccional. Se instala en ambos servidores pero solo es necesario configurarlo en uno de ellos, en este caso el backend1 que será el servidor ftp. Se puede crear un archivo de perfil con extensión prf en mi caso no funcionaba, por lo que cree un cron con las opciones necesarias.
Referencias:
- https://winamic.es/blog/sincronizacion-ficheros-bidireccional-unison/
- https://plataforma.josedomingo.org/pledin/cursos/servicios2011/doc/Ejercicio_Sincronizacion_de_directorios_con_Unison
Resumen de los pasos a seguir:
- Instalar unison
- Configurar ssh key para acceso sin contraseña
- Configurar archivo de perfil /root/.unison/default.prf o crear cron con la opciones.
*/5 * * * * unison -batch -auto /var/www/vhosts/ ssh://root@192.168.1.102//var/www/vhosts/ >/dev/null 2>&1
Servidor 2
Backend2
Ubuntu 20.04
6Gb de RAM
5CPUs Intel
200GB disco SSD
IP privada Vlan
Este es algo mas complicado, hay que hacerlo a mano, lo vamos a instalar lo mas parecido al servidor 1 en cuanto servicios y versiones, Apache con nginx como reverse proxy + php-FPM con opcache y Mariadb
Manual de instalaciones y configuraciones Apache, php-fpm y nginx :
Resumen de instalaciones
Actualizar SO
# sudo aptitude update && aptitude safe-upgrade && aptitude clean && aptitude autoclean
Instalar servicios necesarios:
Apache y php-fpm
$ sudo apt install apache2 php-fpm
FASTCGI
$ wget https://mirrors.edge.kernel.org/ubuntu/pool/multiverse/liba/libapache-mod-fastcgi/libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb
$ sudo dpkg -i libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb
Nginx
$ apt install nginx
mod_rpaf
$ sudo apt install unzip build-essential apache2-dev
$ wget https://github.com/gnif/mod_rpaf/archive/stable.zip
$ unzip stable.zip
$ make
$ sudo make install
Opcache
$ apt-get install php-opcache –y (https://howtoforge.es/instalar-y-configurar-php-opcache-en-ubuntu-20-04/ )
MariaDB/Galera cluster
$ sudo apt install mariadb-server mariadb-client
Unison
$ sudo apt install unison
Galera cluster Master/master
Para la réplica de BB.DD en ambos servidores usar Galera clúster, sincroniza en tiempo real y es muy sencillo de configurar, en la últimas versiones de Mariadb ya viene instalado.
Referencias:
- https://www.josedomingo.org/pledin/2022/02/galera-mariadb/
- https://computingforgeeks.com/mariadb-master-master-replication-on-ubuntu/
Resumen de los pasos a seguir:
- Verificar que el hostname, archivos hosts y la zona horaria son correctos.
- Abrir puertos en ufw
- Instalar MariaDB en ambos servidores
- Configurar cluster desde el archivo /etc/mysql/mariadb.conf.d/50-cluster.cnf
Ejemplo de archivo para servidor 2:
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
# NOTA: la ruta correcta de la librería puede ser /usr/lib/libgalera_smm.so
wsrep_provider=/usr/lib/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name=»galera_cluster1″
wsrep_cluster_address=»gcomm://192.168.1.101,192.168.1.102″
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address=»192.168.1.102″
wsrep_node_name=»node2«
# The following line will save error messages to a plain file.
log_error = /var/log/mysql/error.log