Diferència entre revisions de la pàgina «FIVAN - Manual técnico»
Línia 127: | Línia 127: | ||
Esta parte se referirá a toda la instalación y configuración que se haga sobre las dos Raspberry. Contendrán en ellas la web de la '''tienda online'''. Esta tienda será implementada en '''Wordpress''' dentro de un '''docker''', conectada a una base de datos externa que ya comentaremos más adelante. Elegimos hacerlo en docker ya que la infraestructura es más sencilla y básicamente tiene un despliegue rápido. La gran ventaja es que si esto en algún momento falla, podremos volver a levantar con facilidad de nuevo todo nuestro servidor de una manera rápida y sencilla. | Esta parte se referirá a toda la instalación y configuración que se haga sobre las dos Raspberry. Contendrán en ellas la web de la '''tienda online'''. Esta tienda será implementada en '''Wordpress''' dentro de un '''docker''', conectada a una base de datos externa que ya comentaremos más adelante. Elegimos hacerlo en docker ya que la infraestructura es más sencilla y básicamente tiene un despliegue rápido. La gran ventaja es que si esto en algún momento falla, podremos volver a levantar con facilidad de nuevo todo nuestro servidor de una manera rápida y sencilla. | ||
− | ===Instalación docker=== | + | ===Docker=== |
+ | La idea detrás de Docker es crear contenedores ligeros y portables para las aplicaciones software que puedan ejecutarse en cualquier máquina con Docker instalado, independientemente del sistema operativo que la máquina tenga por debajo, facilitando así también los despliegues. | ||
+ | ====Instalación docker==== | ||
+ | Dicho esto, empezaremos a instalar docker. | ||
− | ===Instalación docker-compose=== | + | sudo apt update |
+ | sudo apt docker docker.io | ||
+ | |||
+ | ====Instalación docker-compose==== |
Revisió del 18:21, 8 maig 2018
Esquema
Para realizar este proyecto, utilizaremos la forma más simple de equilibrar la carga del tráfico de red a varios servidores es usar el balanceador de carga de capa 4 (capa de transporte). De esta manera reenviará el tráfico del usuario en función del rango de IP y el puerto.
El usuario accede al balanceador de carga, que reenvía la solicitud del usuario al grupo de servidores back-end web-backend. Cualquiera que sea el servidor de back-end seleccionado, responderá directamente a la solicitud del usuario. En general, todos los servidores en el servidor web deben servir contenido idéntico; de lo contrario, el usuario podría recibir contenido incoherente. Ambos servidores web se conectan al mismo servidor de base de datos.
Hardware
Antes de empezar indicaremos que hardware hemos utilizado para llevarlo a cabo.
4 Raspberry Pi 3 | 4 Micro SD 16GB | 1 Hard Drive 500GB |
Instalación OS
Una vez tenemos montadas las Raspberry, lo primero que debemos hacer para trabajar con ellas es instalar un sistema operativo en cada una de ellas. En nuestro caso hemos utilizado Raspbian Stretch Lite. Raspbian Stretch Lite es un sistema operativo Debian sin interfaz gráfica. La ventaja que ofrece no tener interfaz, es que estas máquinas, al tener 1GB de RAM, podemos aprovechar más espacio de memoria que si tuviésemos un sistema operativo con interfaz y así poder evitarnos posibles sobrecargas.
Empezaremos descargando la imagen. (Download Raspbian for Raspberry Pi)
Al mismo tiempo tendremos que descargar también Etcher. Este programa nos permite grabar una imagen en un sistema de almacenamiento para utilizarlo como arranque y cargar así nuestro OS. (Download Etcher)
Una vez tengamos todo en nuestro sistema, empezaremos el proceso para poder trabajar en la Raspberry:
- Abriremos Etcher e introduciremos la microSD en nuestro equipo.
- Agregaremos la iso y le daremos a Flash para empezar el proceso.
- Una vez finalizado, extraeremos la microSD y la introduciremos en nuestra Raspberry para empezar a trabajar en nuestro sistema operativo Raspbian.
Por defecto, la distribución de teclado nos vendrá en Inglés. Para cambiarla deberemos usar la siguiente comanda y configurar la distribución de nuestro teclado en Español.
sudo dpkg-reconfigure keyboard-configuration
Habilitar servicio SSH
SSH (Secure SHell, en español: intérprete de órdenes seguro) es el nombre de un protocolo y del programa que lo implementa, y sirve para acceder servidores privados a través de una puerta trasera o backdoor. Permite manejar por completo el servidor mediante un intérprete de comandos. Se le asigna por defecto el puerto TCP 22.
El servicio SSH viene instalado ya por defecto, por lo tanto solo deberemos activarlo.
Activamos servicio SSH:
sudo systemctl enable ssh
Una vez activado lo iniciamos:
sudo service ssh start
Conexión cliente-servidor
Una vez habilitado el servicio, para conectarnos a nuestra Raspberry utilizaremos la siguiente comanda:
ssh -l pi direccion_ip
Load Balancer
Ahora nos centraremos en la implementación específica de cada Raspberry. Empezaremos con la que se encarga del balanceo de carga (en inglés, Load Balancer) y la alta disponibilidad.
Para ello, utilizaremos el software HAProxy, ya que incorpora las utilidades nombras anteriormente y necesarias para nuestro proyecto. (Más información clic aquí)
HAProxy
HAProxy es una solución popular de software de fuente abierta TCP / HTTP Load Balancer y proxy que se puede ejecutar en Linux, Solaris y FreeBSD. Su uso más común es mejorar el rendimiento y la confiabilidad de un entorno de servidor mediante la distribución de la carga de trabajo en varios servidores (por ejemplo, web, aplicación, base de datos).
Instalación
Para instalar HAProxy, utilizaremos el siguiente comando:
sudo apt update sudo apt install haproxy
Configuración
Empezaremos a configurar HAProxy para conseguir tener el balanceo de carga y la alta disponibilidad. Para ello debemos ir al archivo /etc/haproxy/haproxy.cfg y modificar las siguientes líneas.
sudo nano /etc/haproxy/haproxy.cfg
frontend http_front bind *:80 stats uri /haproxy?stats default_backend http_back backend http_back balance roundrobin server <server1 name> <private IP 1>:80 check server <server2 name> <private IP 2>:80 check
Sesiones
Algunas aplicaciones requieren que un usuario continúe conectándose al mismo servidor back-end. Esta persistencia se logra a través de sesiones adhesivas. Cambiaremos algunos parámetros de nuestro archivo para conseguir que un usuario no pierda la sesión. Lo modificamos del siguiente modo:
frontend http_front bind *:80 stats uri /haproxy?stats default_backend http_back
backend http_back balance leastconn cookie JSESSIONID prefix nocache server <server1 name> <private IP 1>:80 check cookie <server1 name> server <server2 name> <private IP 2>:80 check cookie <server2 name>
Los parámetros más utilizados para el balancear la carga son los siguientes:
roundrobin | Round Robin selecciona servidores por turnos, es decir, va alternando un servidor con otro repartiendo uno a uno cada conexión. |
leastconn | Selecciona el servidor con la menor cantidad de conexiones: se recomienda para sesiones más largas. Los servidores en el mismo back-end también se rotan de manera round-robin. |
source | Esto selecciona qué servidor usar basado en un hash de la IP de origen, es decir, la dirección IP de su usuario. Este es un método para garantizar que un usuario se conecte al mismo servidor. |
Web-Backend
Esta parte se referirá a toda la instalación y configuración que se haga sobre las dos Raspberry. Contendrán en ellas la web de la tienda online. Esta tienda será implementada en Wordpress dentro de un docker, conectada a una base de datos externa que ya comentaremos más adelante. Elegimos hacerlo en docker ya que la infraestructura es más sencilla y básicamente tiene un despliegue rápido. La gran ventaja es que si esto en algún momento falla, podremos volver a levantar con facilidad de nuevo todo nuestro servidor de una manera rápida y sencilla.
Docker
La idea detrás de Docker es crear contenedores ligeros y portables para las aplicaciones software que puedan ejecutarse en cualquier máquina con Docker instalado, independientemente del sistema operativo que la máquina tenga por debajo, facilitando así también los despliegues.
Instalación docker
Dicho esto, empezaremos a instalar docker.
sudo apt update sudo apt docker docker.io