Diferència entre revisions de la pàgina «Proyecto PUVIC Infraestructura»

De Wiket
Salta a la navegació Salta a la cerca
Línia 328: Línia 328:
 
<br>
 
<br>
 
<br><code>$sudo mount -t nfs 192.168.15.1:/mnt/RAID5/master /web</code>
 
<br><code>$sudo mount -t nfs 192.168.15.1:/mnt/RAID5/master /web</code>
 +
<br>
 +
<br>
 +
Hay varias maneras para que se monte automáticamente a una carpeta compartida por NFS cuando iniciemos nuestro Linux, existe la posibilidad de añadir en el archivo /etc/fstab una línea pero en nuestro caso utilizaremos el crontab para hacerlo para ello ejecutaremos el siguiente comando:
 +
<br>
 +
<br><code>$sudo crontab -e</code>
 +
<br>
 +
<br>
 +
Dentro del crontab agregaremos la siguiente linea para que se ejecute el comando cada vez que se inicie:
 +
<br>
 +
<br><code>@reboot mount -t nfs 192.168.15.1:/mnt/RAID5/master /web</code>
 
<br>
 
<br>
 
<br>
 
<br>

Revisió del 05:29, 29 maig 2017

Este proyecto se basa en una infraestructura de alta disponibilidad que consiste de mantener un servicio web activo sin interrupciones siendo transparente para el usuario. Para ello hemos replicado cada servidor y servicio para lograr tener el máximo de redundancia en nuestra estructura. También hemos implementado un servicio de monitoreo con tal de poder controlar y tener alertas en caso de que cualquier anomalía se refleje en nuestro sistema por aplicación o mediante correos en el caso de no estar presencialmente delante de un ordenador.

Los servicios que vamos a utilizar serán los siguientes:

  • 1 Servidor de balanceo de carga (HAproxy)
  • 2 Servidores web (Apache2)
  • 2 Servidores BBDD (MySQL)
  • 1 Servidor de almacenamiento en red (FreeNAS)
  • 2 Servidores de Monitorización (ZABBIX)


FreeNAS

Requisitos previos

  • 1 GB RAM
  • 4 Discos (1 para el sistema, 3 para el RAID5)
  • 2 Tarjetas de Red

Instalación del FreeNAS

Para saber como instalar y configurar el sistema de almacenamiento puede acceder aquí.

Configuración del Almacenamiento

En nuestro caso tendremos que montar un RAID5 dentro del FreeNAS ya que este sistema nos da un rendimiento rápido al guardar los datos en todas las unidades de disco; protección de los datos al dedicar un cuarto de cada unidad a la tolerancia a las fallas, dejando tres cuartos de la capacidad del sistema disponibles para almacenamiento de datos.

Para saber como configurarlo entre a Configuración RAID5 FreeNAS

HAProxy

Requisitos previos

  • 1 GB RAM
  • 2 Tarjetas de Red
  • 1 disco duro de 10GB

Instalación del HAProxy

Para instalarlo debemos utilizar el comando:

$sudo apt-get install haproxy -y

Configuraciónc del HAProxy

Para configurarlo tendremos que ir a /etc/haproxy/ y editar el archivo haproxy.cfg

$sudo nano /etc/haproxy/haproxy.cfg

Tenemos que agregar las siguientes lineas:

       frontend http_front
               bind *:80
               stats uri /haproxy?stats
               default_backend http_back
       backend http_back
               balance roundrobin
               server server1 192.168.23.11:80 check
               server server2 192.168.23.12:80 check

En estas especificamos el tipo de balanceo, finalmente ponemos los servidores que se balancearan con sus respectivas IPs.

MySQL

Instalación MySQL Server

Para instalar el servidor de base de datos utilizaremos el siguiente comando:

$sudo apt-get install mysql-server -y

Replicación de la base de datos (Master - Slave)

Una vez tenemos los dos servidores de base de datos con el MySQL server instalado, los configuraremos para la replicación de master a slace, para esto editaremos el archivo de configuración principal:

$sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf


Configuración Master

En el servidor MASTER en este archivo de configuración tendremos que tener los siguientes valores agregados:

       bind-address            = 192.168.8.1
       server-id               = 1
       log_bin                 = /var/log/mysql/mysql-bin.log
       expire_logs_days        = 10
       max_binlog_size         = 100M
       binlog_do_db            = PROJECTWEB

Una vez hemos editado el archivo de configuración reiniciamos el servicio utilizando el siguiente comando:

$sudo service mysql restart

Procedemos a entrar al servicio mysql con el usuario root:

$mysql -u root -p

Aquí creamos el usuario para poder acceder a cualquier base de datos para la replicación del SLAVE y así mismo lo creamos:

mysql>GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password';
mysql>FLUSH PRIVILEGES;

Seguido a esto creamos la base de datos y bloquearemos las tablas para que solo se puedan realizar lecturas:

mysql>CREATE DATABASE PROJECTWEB;
mysql>USE PROJECTWEB;
mysql>FLUSH TABLES WITH READ LOCK;

Una vez hemos bloqueado las tablas de la base de datos utilizaremos el siguiente comando para saber la información del master:

       mysql> SHOW MASTER STATUS;
       +------------------+----------+--------------+------------------+
       | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
       +------------------+----------+--------------+------------------+
       | mysql-bin.000118 |      154 | PROJECTWEB   |                  |
       +------------------+----------+--------------+------------------+

Exportaremos la BBDD que tenemos en el servidor MASTER para posteriormente importarla en el SLAVE por medio del siguiente comando:

$mysqldump -u root -p --opt PROJECTWEB > PROJECTWEB.sql

Una vez hemos hecho lo anterior desbloqueamos las tablas para hacer cualquier tipo de transacción:

mysql>UNLOCK TABLES;

Pasaremos el archivo por medio del protocolo scp al servidor SLAVE por medio de este comando:

$scp PROJECTWEB.sql 192.168.8.2:/home/projecte/


Configuración Slave

En el servidor SLAVE en este archivo de configuración tendremos que tener los siguientes valores agregados:

       bind-address            = 192.168.8.2
       server-id               = 2
       log_bin                 = /var/log/mysql/mysql-bin.log
       expire_logs_days        = 10
       max_binlog_size         = 100M
       binlog_do_db            = PROJECTWEB

Una vez hemos editado el archivo de configuración reiniciamos el servicio utilizando el siguiente comando:

$sudo service mysql restart

Procederemos a importar la BBDD exportada anteriormente, por medio del siguiente comando:

$mysql -u root -p PROJECTWEB < /home/projecte/PROJECTWEB.sql

Luego de haber importado la base de datos entraremos al mysqsl para especificar cual es el servidor MASTER, el usuario y contraseña que utilizaremos (El que creamos en el servidor SLAVE), el MASTER_LOG_FILE y el MASTER_LOG_POS que hemos consultado antes el el servidor MASTER:

mysql>CHANGE MASTER TO MASTER_HOST='192.168.8.1',
MASTER_USER='slave_user', 
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000118',
MASTER_LOG_POS=  154;


Iniciaremos el servidor como SLAVE:

mysql>START SLAVE;

Iniciaremos el servidor como SLAVE:

mysql>START SLAVE;

Procedemos a ejecutar el siguiente comando con tal de consultar si efectivamente hemos hecho bien los pasos anteriores y que nos muestre el estado del servidor (SLAVE) y cuál es el master:

mysql>SHOW SLAVE STATUS\G

Los valores más importantes al comprobar que se ha hecho bien son los siguientes:

************************** 1. row ***************************
              Slave_IO_State: Waiting for master to send event
                 Master_Host: 192.168.8.1
                 Master_User: slave_user
                 Master_Port: 3306
             Master_Log_File: mysql-bin.000118
         Read_Master_Log_Pos: 154
              Relay_Log_File: SlaveServerDB-relay-bin.000051
               Relay_Log_Pos: 367
       Relay_Master_Log_File: mysql-bin.000118
            Slave_IO_Running: Yes
           Slave_SQL_Running: Yes
     Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

Script para simular MySQL Cluster

Se han desarrollado dos scripts los cuales sirven para hacer el cambio de dirección IP dentro de la red de base de datos y así que la aplicación no pierda conexión en el caso de que se caiga el Master o el servicio MySQL.

Para descargar los scripts o copiarlos, haga clic en este enlace

Una vez descargados en su respectivo servidor tendremos que modificar los permisos para que se puedan ejecutar para esto utilizaremos el siguiente comando

$sudo chmod +x <ubicación del script>/<script>.sh

Ahora tendremos que utilizar el contrab para que se ejecute el script al iniciar el sistema, para esto utilizaremos el comando:

$sudo contrab -e

Una vez dentro, tendremos que escribir esta regla al final:

Server Master

@reboot <ubicación de los scripts>/scriptMaster.sh

Server Slave

@reboot <ubicación de los scripts>/scriptSlave.sh


Apache

Instalación del apache

instalaremos el apache utilizando el siguiente comando:

$sudo apt-get install apache2 -y

Luego instalaremos el php, librerías y módulos para poder utilizarlo con el servidor apache, para esto utilizaremos los siguientes comandos:

Instalar PHP


$sudo apt-get install php7.0 -y

Instalar Librerías y módulos


$sudo apt-get install libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json

Una vez tengamos instalado el Apache y el php con sus librerías correspondientes, pasaremos a configurar las interfaces de red para esto utilizaremos el siguiente comando:

$sudo nano /etc/network/interfaces

Una vez entramos al archivo tenemos que configurar las interfaces de esta manera.

Apache A Apache B
auto lo 
iface lo inet loopback

# Red con salida a internet
auto ens33 
iface ens33 inet static 
address 192.168.23.11 
netmask 255.255.255.0

# Red para la Base de datos 
auto ens38 
iface ens38 inet static 
address 192.168.8.11 
netmask 255.255.255.0 

# Red para almacenamiento (NAS) 
auto ens39
iface ens39 
inet static address 192.168.15.11 
netmask 255.255.255.0 
 
# Red para Monitoring y Administración 
auto ens40 
iface ens40 inet static 
address 192.168.21.11 
netmask 255.255.255.0

auto lo
iface lo inet loopback 

# Red con salida a internet
auto ens33 
iface ens33 inet static 
address 192.168.23.12 
netmask 255.255.255.0

# Red para la Base de datos 
auto ens38 
iface ens38 inet static 
address 192.168.8.12
netmask 255.255.255.0

# Red para almacenamiento (NAS) 
auto ens39
iface ens39 inet static 
address 192.168.15.12 
netmask 255.255.255.0

# Red para Monitoring y Administración 
auto ens40 
iface ens40 inet static 
address 192.168.21.12 
netmask 255.255.255.0


Reiniciamos el servicio de red para que se apliquen los cambios por medio del siguiente comando:

$sudo service networking restart

Montar NAS en el servidor web

Lo primero que tenemos que hacer es instalar los paquetes portmap y nfs-common que nos permitirán acceder como clientes, para eso utilizaremos el siguiente comando:

$sudo apt-get install portmap nfs-common

Una vez instalado crearemos primero una carpeta donde queremos que se monte la carpeta compartida, para eso utilizaremos el comando mkdir en nuestro caso crearemos la carpeta web.

$sudo mkdir /web

Montaremos la carpeta compartida por NFS utilizando el siguiente comando:

$sudo mount -t nfs 192.168.15.1:/mnt/RAID5/master /web

Hay varias maneras para que se monte automáticamente a una carpeta compartida por NFS cuando iniciemos nuestro Linux, existe la posibilidad de añadir en el archivo /etc/fstab una línea pero en nuestro caso utilizaremos el crontab para hacerlo para ello ejecutaremos el siguiente comando:

$sudo crontab -e

Dentro del crontab agregaremos la siguiente linea para que se ejecute el comando cada vez que se inicie:

@reboot mount -t nfs 192.168.15.1:/mnt/RAID5/master /web