Diferència entre revisions de la pàgina «Proyecto PUVIC Infraestructura»
(Hi ha 10 revisions intermèdies del mateix usuari que no es mostren) | |||
Línia 1: | Línia 1: | ||
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. | 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. | ||
− | + | [[Fitxer:RedesBuenas.png|thumbnail|dreta|Mapa de IPs LAN]] | |
Los servicios que vamos a utilizar serán los siguientes: | Los servicios que vamos a utilizar serán los siguientes: | ||
* 1 Servidor de balanceo de carga (HAproxy) | * 1 Servidor de balanceo de carga (HAproxy) | ||
Línia 7: | Línia 7: | ||
* 1 Servidor de almacenamiento en red (FreeNAS) | * 1 Servidor de almacenamiento en red (FreeNAS) | ||
* 2 Servidores de Monitorización (ZABBIX) | * 2 Servidores de Monitorización (ZABBIX) | ||
− | + | <br> | |
− | |||
==FreeNAS== | ==FreeNAS== | ||
===Requisitos previos=== | ===Requisitos previos=== | ||
Línia 502: | Línia 501: | ||
</span> | </span> | ||
<br> | <br> | ||
− | Seguido a esto instalaremos el modulo de php, el ''php-mcrypt'' y lo activaremos así miesmo con el de ''rewrite'' y ''php-sjon'', para esto utilizaremos | + | Seguido a esto instalaremos el modulo de php, el ''php-mcrypt'' y lo activaremos así miesmo con el de ''rewrite'' y ''php-sjon'', para esto utilizaremos los siguientes comandos: |
<br> | <br> | ||
<br> | <br> | ||
Línia 512: | Línia 511: | ||
<br> | <br> | ||
<br> | <br> | ||
+ | Una vez realizados los anteriores pasos nos dispondremos a reiniciar el servicio de apache por medio del siguiente comando: | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>$sudo service apache2 restart</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | ---- | ||
+ | == Servidor de Monitoring (Zabbix)== | ||
+ | ===Instalación zabbix=== | ||
+ | Para montar el servicio de monitoring (Zabbix) primero tendremos que agregar los repositorios de Zabbix para esto tendremos que editar el archivo soruces.list por medio del siguiente comando: | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>$sudo nano /etc/apt/sources.list</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | Y agregaremos la siguientes lineas: | ||
+ | <br> | ||
+ | <span style="font-family: Consolas"> | ||
+ | deb http://ppa.launchpad.net/tbfr/zabbix/ubuntu precise main | ||
+ | deb-src http://ppa.launchpad.net/tbfr/zabbix/ubuntu precise main | ||
+ | </span> | ||
+ | <br> | ||
+ | Seguido a esto descargaremos la clave pública para poder autenticar los paquetes que se descargaran para esto tendremos que utilizar el siguiente comando: | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>$sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C407E17D5F76A32B</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | Ahora actualizaremos los repositorios por medio del siguiente comando: | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>$sudo apt-get update</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | Seguido instalaremos el servicio de monitoring y el servicio mysql utilizando el siguiente comando | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>$sudo apt-get install zabbix-server-mysql zabbix-frontend-php libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | ---- | ||
+ | ===Configuración Básica=== | ||
+ | Ahora nos dispondremos a editar el archivo de configuración del servicio para esto utilizaremos el siguiente comando: | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>$sudo apt-get install zabbix-server-mysql zabbix-frontend-php libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | Dentro del archivo reemplazaremos los siguientes valores: | ||
+ | <br> | ||
+ | <span style="font-family: Consolas"> | ||
+ | DBName=zabbix | ||
+ | DBUser=zabbix | ||
+ | DBPassword= 30393039 | ||
+ | </span> | ||
+ | <br> | ||
+ | Una vez realizados los cambios iremos a la carpeta mysql del servicio y dentro extraeremos todos los archivos que permitirán crear la estructura de la base de datos, para esto ejecutaremos estos comandos: | ||
+ | <br> | ||
+ | <span style="font-family: Consolas"> | ||
+ | $cd /usr/share/zabbix-server-mysql/ | ||
+ | $sudo gunzip *.gz | ||
+ | </span> | ||
+ | <br> | ||
+ | Una vez hecho los pasos anteriores nos dispondremos a entrar al servicio de base de datos del servidor para configurar el usuario de monitoring (este estará separado a la red de base de datos y estará dentro de cada servidor de monitoring), para poder utilizar el mysql por consola primero tendremos que utilizar el siguiente comando: | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>mysql -u root -p</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | Ahora crearemos el usuario para el zabbix y le asignaremos la contraseña que hemos puesto en los archivos de configuración, para esto utilizaremos la siguiente sentencia: | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>mysql>create user 'zabbix'@'localhost' identified by '30393039';</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | Seguido de esto crearemos la base de datos por medio de la siguiente sentencia: | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>mysql>create database zabbix;</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | Y por último daremos los permisos al usuario para poder utilizar la base de datos para esto utilizaremos las siguientes sentencias: | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>mysql>grant all privileges on zabbix.* to 'zabbix'@'localhost';</code> | ||
+ | <br> | ||
+ | <code>mysql>flush privileges;</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | Una vez hecho las configuraciones anteriores importaremos la estructura de la base de datos, para esto utilizaremos los siguientes comandos: | ||
+ | <br> | ||
+ | <span style="font-family: Consolas"> | ||
+ | $mysql -u zabbix -p zabbix < schema.sql | ||
+ | $mysql -u zabbix -p zabbix < images.sql | ||
+ | $mysql -u zabbix -p zabbix < data.sql | ||
+ | </span> | ||
+ | <br> | ||
+ | Una vez importada la estructura de la base de datos iremos al archivo principal de php para cambiar los valores de algunas variables, para editar el archivo principal ejecutaremos el siguiente comando: | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>$sudo nano /etc/php/apache2/php.ini</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | Una vez dentro del archivo reemplazaremos los valores por defecto de tamaño máximo de subida, el máximo tiempo de ejecución, el máximo tiempo de procesamiento y el tipo de zona horaria por los siguientes: | ||
+ | <br> | ||
+ | <span style="font-family: Consolas"> | ||
+ | post_max_size = 16M | ||
+ | max_execution_time = 300 | ||
+ | max_input_time = 300 | ||
+ | date.timezone = UTC | ||
+ | </span> | ||
+ | <br> | ||
+ | Copiaremos los ejemplos de configuración del zabbix para poder configurar el servicio, para esto utilizaremos el siguiente comando: | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>$sudo cp /usr/share/doc/zabbix-frontend-php/examples/zabbix.conf.php.example /etc/zabbix/zabbix.conf.php</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | Editaremos el archivo zabbix.conf.php para poner la contraseña fijada para el usuario zabbix de mysql en pasos anteriores, en este caso utilizaremos el siguiente comando: | ||
+ | <br> | ||
+ | <span style="font-family: Consolas"> | ||
+ | $DB['DATABASE'] = 'zabbix'; | ||
+ | $DB['USER'] = 'zabbix'; | ||
+ | $DB['PASSWORD'] = '30393039' | ||
+ | </span> | ||
+ | <br> | ||
+ | Seguido copiaremos el archivo de configuración ejemplo dentro de la configuración del apache por medio del siguiente comando: | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>$sudo cp /usr/share/doc/zabbix-frontend-php/examples/apache.conf /etc/apache2/conf-enabled/zabbix.conf</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | Ahora habilitaremos el modulo alias y reiniciaremos el servicio de apache, para esto utilizaremos los siguientes comandos: | ||
+ | <br> | ||
+ | <span style="font-family: Consolas"> | ||
+ | $sudo a2enmod alias | ||
+ | $sudo service apache2 restart | ||
+ | </span> | ||
+ | <br> | ||
+ | Después de hacer estos últimos pasos iniciaremos ya el servicio de monitoring por medio del siguiente comando: | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>$sudo service zabbix-server start</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | Una vez este corriendo el servicio podemos ir a nuestro navegador y poner la ipdelservidor/zabbix y nos aparecera un panel de autenticación como este en donde tendremos que poner usuario y contraseña por defecto será admin:zabbix | ||
+ | <br> | ||
+ | [[Fitxer:WebZabbix.png|frameless|center]] | ||
+ | ---- | ||
+ | ===Configuración para enviar alertas por GMAIL=== | ||
+ | Primero tendremos que instalar las herramientas de envío de correo para esto tendremos que utilizar el siguiente comando: | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>$sudo apt-get -y install postfix mailutils libsasl2-2 ca-certificates libsasl2-modules</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | Una vez todas las herramientas instaladas tendremos que ir a la carpeta de postfix y editar el archivo de configuración (Se recomienda hacer un backup del archivo antes de editarlo), para esto usaremos los siguientes comandos: | ||
+ | <br> | ||
+ | <span style="font-family: Consolas"> | ||
+ | $cd /etc/postfix/ | ||
+ | $sudo cp main.cf main.cf.bkp | ||
+ | $sudo nano main.cf | ||
+ | </span> | ||
+ | <br> | ||
+ | Dentro de este archivo al final agregaremos las siguientes lineas: | ||
+ | <br> | ||
+ | <span style="font-family: Consolas"> | ||
+ | relayhost = [smtp.gmail.com]:587 | ||
+ | smtp_sasl_auth_enable = yes | ||
+ | smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd | ||
+ | smtp_sasl_security_options = noanonymous | ||
+ | smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt | ||
+ | smtp_use_tls = yes | ||
+ | </span> | ||
+ | <br> | ||
+ | Ahora, editaremos el archivo sasl_password con sus credenciales de correo de gmail para esto utilizaremos el siguiente comando: | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>$sudo nano /etc/postfix/sasl_passwd</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | Una vez dentro del archivo (estará vacío), agregaremos la siguiente linea, donde sucrreo será su correo de gmail y donde contraseña será la contraseña con la que ingresa normalmente a este servicio: | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>[smtp.gmail.com]:587 [email protected]:contraseña</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | Ahora aplicaremos las configuraciones de seguridad para que el archivo anterior no sea visible para cualquiera para esto ejecutaremos los siguientes comandos: | ||
+ | <br> | ||
+ | <span style="font-family: Consolas"> | ||
+ | sudo postmap hash:/etc/postfix/sasl_passwd | ||
+ | $sudo chown root:root /etc/postfix/sasl_passwd | ||
+ | $sudo chmod 600 /etc/postfix/sasl_passwd | ||
+ | </span> | ||
+ | <br> | ||
+ | Una vez ejecutados los cambios de permisos y encriptado el archivo verificaremos los certificados por medio del siguiente comando: | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>$cat /etc/ssl/certs/Thawte_Premium_Server_CA.pem | sudo tee -a /etc/postfix/cacert.pem</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | Por último recargaremos el servicio de correo y haremos una prueba para recargar el servicio utilizaremos el siguiente comando: | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>$sudo /etc/init.d/postfix reload</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | Para realizar prueba de envio de correo por consola usando postfix utilizaremos el siguiente comando: | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>$echo "prueba envio" | sudo mail -s " Test Postfix +Gmail+Zabbix " [email protected]</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | Podemos verificar el log de eventos de email para comprobar que no existan errores, para esto utilizaremos el siguiente comando: | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>$tail -f /var/log/mail.log</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | Para que Zabbix envíe correo tenemos que ir al panel web, tal como se muestra en [[Configuración Media Types Reports Zabbix]] | ||
+ | ===Agregar Host a Zabbix=== | ||
+ | Para agregar un host en el servicio de monitoring ZABBIX, tenemos que ir a la interfaz web e ir a Configuration > Hosts y en host damos clic en Create Host tal como muestra la siguiente imagen: | ||
+ | <br> | ||
+ | [[Fitxer:Imagen1.png|framed|center]] | ||
+ | <br> | ||
+ | Una vez hemos dado clic en la pestaña Host tendremos que rellenar el campo de Host name, seleccionar un grupo al cual pertenecerá y en la interfaz tendremos que elegir un método o protocolo por el cual va a monitorizar y la ip o nombre dns tal y como muestra la siguiente imagen: | ||
+ | <br> | ||
+ | [[Fitxer:Imagen2.png|framed|center]] | ||
+ | <br> | ||
+ | Luego tendremos que ir a la pestaña Templates y aquí tendremos que elegir los templates los cuales tienen los disparadores para monitorizar, en el caso que se ve elegimos que deseamos monitorizar los servicios HTTP, el sistema operativo que usa y si deja de haber conectividad con este. Una vez hemos agregado las Templates que necesitamos daremos clic en añadir tal y como muestra la siguiente imagen: | ||
+ | <br> | ||
+ | [[Fitxer:Imagen3.png|framed|center]] | ||
+ | <br> | ||
+ | '''Nota:''' En los servidores utilizaremos el Template ICMP ping. En los servidores Web y de balanceo de carga agregaremos el Template de App HTTP Service. En los servidores de base de datos agregaremos el Template App MySQL, En el NAS lo configuraremos por SNMP y Zabbix Agent el cual tendrá un Template Personalizado para que alerte respecto a las caídas de un disco y el Template SNMP OS Linux para que nos muestre el estado completo de la máquina tanto de discos como memoria. | ||
+ | <br> | ||
+ | [[Fitxer:Imagen4.png|framed|center]] | ||
+ | <br> | ||
+ | ===Zabbix Agent=== | ||
+ | '''Zabbix Agent''' es el agente con el cual se comunica el servidor con los host u otros servidores del zabbix, permite y facilita el uso de disparadores, en nuestro caso necesitamos el zabbix agent para crear un disparador en el NAS que nos permitirá saber el estado de nuestra zpool. Por lo que nos dedicaremos a la [[Instalación y Configuración Básica del Zabbix Agent]]. | ||
+ | ===Crear Disparador=== | ||
+ | Para crear un disparador primero tenemos que añadir una nueva ''UserParamater'' a nuestros agentes Zabbix, que serán utilizados para la información de votación para las pools de ZFS. Primero, iremos al archivo de configuración del zabbix agent en este caso el del NAS el cual se encuentra en ''/usr/local/etc/zabbix24/zabbix_agentd.conf'' y miraremos que las siguientes líneas estén descomentadas y tengas los valores correspondientes. | ||
+ | <br> | ||
+ | Para crear el disparador utilizamos UserParameter=<key>,<command> | ||
+ | <br> | ||
+ | <span style="font-family: Consolas"> | ||
+ | UnsafeUserParameters=1 | ||
+ | UserParameter=zpool.health[*],zpool list -H -o health $1 | ||
+ | </span> | ||
+ | <br> | ||
+ | Ahora podemos continuar con la configuración de nuestros cheques Zabbix. Acceder a su servidor Zabbix y vaya a ''Configuration -> Template'' y haga clic en el'' Create Template'' de botón. | ||
+ | <br> | ||
+ | Nombre a la plantilla Template App ZFS y haga clic en el botón Guardar como se muestra en el ejemplo siguiente captura de pantalla: | ||
+ | <br> | ||
+ | [[Fitxer:Imagen5.1.png|framed|center]] | ||
+ | <br> | ||
+ | A continuación, creamos una nueva aplicación en nuestra plantilla, que se llama ''ZFS Checks'': | ||
+ | <br> | ||
+ | [[Fitxer:Imagen5.2.png|framed|center]] | ||
+ | <br> | ||
+ | Ahora vamos a crear un nuevo elemento que va a controlar nuestras pools para esto iremos a la Pestaña ''Items'' y haga clic en ''Create Item''. | ||
+ | <br> | ||
+ | En la siguiente imagen se puede ver el elemento que hemos creado. Utilizaremos la Key recién agregada al ''UserParameter'' que se llama ''zpool.health'' , el tipo de información se debe establecer en texto . También puede observar que se pasa un argumento a nuestra Key ''zpool.health [RAID5]'' , que especifica el nombre de la agrupación ZFS. | ||
+ | <br> | ||
+ | [[Fitxer:Imagen5.3.png|framed|center]] | ||
+ | <br> | ||
+ | Ahora iremos a la pestaña Triggers y crearemos el disparador la expresión que utilizaremos será la siguiente | ||
+ | <br> | ||
+ | <br> | ||
+ | <code>{Template App ZFS:zpool.health[zroot].regexp(ONLINE)}=0</code> | ||
+ | <br> | ||
+ | <br> | ||
+ | Lo que hace este disparador básicamente es que si el ZFS ya no está en ONLINE, lanzara una alerta si se llega a romper un disco o hay algo que falle en la pool. | ||
+ | <br> | ||
+ | [[Fitxer:Imagen5.4.png|framed|center]] | ||
+ | <br> | ||
+ | Una vez creado esto agregaremos el template al host FreeNAS para que se dispare si hay algún fallo dentro del RAID5. |
Revisió de 09:14, 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
Montar web en producción
IMPORTANTE!!!: Antes de montar la web en producción se debe asegurar de tener permisos suficientes, si llega a tener problemas de permisos para poder escribir o modificar vaya al apartado de Configuración Permisos carpeta NFS y realice los primeros 4 pasos.
Entraremos a la carpeta donde se ha montado nuestro carpeta compartida del NAS utilizando el siguiente comando:
$cd /web
Para poder poner la web de desarrollo en producción debemos tener instalado el git para esto utilizaremos el siguiente comando:
$sudo apt-get install git -y
Una vez instalado el git descargaremos de git-hub la web que ha estado en desarrollo para esto utilizaremos el siguiente comando:
$sudo git clone https://github.com/aws2-18/AWS2-MP12-Projecte.git
En este caso se creara la carpeta AWS2-MP12-Projecte donde estará toda la web y configuración de esta, seguido del anterior paso ahora tendremos que entrar a la carpeta creada utilizando el siguiente comando:
$cd AWS2-MP12-Projecte/
Haremos una copia del archivo .env.example para poder configurar la web para que se pueda conectar al servidor de base de datos:
$sudo cp .env.example .env
Una vez creado el archivo .env nos dispondremos a editarlo por medio del siguiente comando:
$sudo nano .env
Dentro del archivo tendremos que poner la IP del servidor de base de datos, la base de datos que vamos a utilizar, usuario y contraseña que tenga acceso a la base de datos que vamos a utilizar en nuestro caso ya tenemos creado el usuario admin:
APP_NAME=Laravel APP_ENV=local APP_KEY= APP_DEBUG=true APP_LOG_LEVEL=debug APP_URL=http://localhost DB_CONNECTION=mysql #IP Server DB DB_HOST=192.168.8.1 #Puerto que utiliza el MySQL DB_PORT=3306 #Nombre de la base de datos DB_DATABASE=PROJECTWEB #Usuario de la base de datos DB_USERNAME=admin #Contraseña del usuario DB_PASSWORD=admin BROADCAST_DRIVER=log CACHE_DRIVER=file SESSION_DRIVER=file QUEUE_DRIVER=sync REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_DRIVER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null
Como la web utiliza el Laravel tendremos que generar una clave por medio del siguiente comando:
$sudo php artisan key:generate
Una vez generada la clave tendremos que instalar dos extensiones que nos faltan del php el php-mbstring, el php7.0-gd el php-xml para esto utilizaremos el siguiente comando:
$sudo apt-get install php-mbstring php-xml php7-0-gd
Una vez instaladas las extensiones del php que nos faltaban instalaremos el Composer el cual gestionara las dependencias. Para instalarlo utilizaremos el siguiente comando:
$sudo apt-get install composer
Una vez instalado nos dispondremos a que gestione las dependencias de nuestra aplicación web por medio del siguiente comando:
$sudo composer install
Una vez termine de hacer toda la gestión de dependencias, nos dispondremos a migrar la base de datos para esto utilizaremos el siguiente comando:
$sudo php artisan migrate
Una vez realizada la migración de la base de datos lanzaremos toda la secuencia de seeders de la aplicación a través del siguiente comando:
$sudo artisan db:seed
Configuración del servidor Apache
Una vez hayamos montado toda la web de forma correcta tendremos que configurar el Apache para que se pueda visualizar la web para esto tendremos que editar dos archivos de configuración el primero será el archivo apache2.conf, para editarlo utilizaremos el siguiente comando:
$sudo nano /etc/apache2/apache2.conf
Dentro debemos reemplazar los directorios por los siguientes:
<Directory /> Options FollowSymLinks AllowOverride None Require all denied </Directory> <Directory /usr/share> AllowOverride None Require all granted </Directory> <Directory /web/AWS2-MP12-Projecte> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> #<Directory /srv/> # Options Indexes FollowSymLinks # AllowOverride None # Require all granted #</Directory>
Una vez modificado el archivo apache.conf tendremos que modificar el archivo por defecto de los sitios activados, para esto ejecutaremos el siguiente comando:
$sudo nano /etc/apache2/sites-available/000-default.conf
Una vez dentro reemplazaremos su contenido por el siguiente:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /web/www/AWS2-MP12-Projecte ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /web/www/AWS2-MP12-Projecte> AllowOverride All </Directory> </VirtualHost>
Seguido a esto instalaremos el modulo de php, el php-mcrypt y lo activaremos así miesmo con el de rewrite y php-sjon, para esto utilizaremos los siguientes comandos:
$sudo phpenmod mcrypt $sudo phpenmod json $sudo phpenmod rewrite
Una vez realizados los anteriores pasos nos dispondremos a reiniciar el servicio de apache por medio del siguiente comando:
$sudo service apache2 restart
Servidor de Monitoring (Zabbix)
Instalación zabbix
Para montar el servicio de monitoring (Zabbix) primero tendremos que agregar los repositorios de Zabbix para esto tendremos que editar el archivo soruces.list por medio del siguiente comando:
$sudo nano /etc/apt/sources.list
Y agregaremos la siguientes lineas:
deb http://ppa.launchpad.net/tbfr/zabbix/ubuntu precise main deb-src http://ppa.launchpad.net/tbfr/zabbix/ubuntu precise main
Seguido a esto descargaremos la clave pública para poder autenticar los paquetes que se descargaran para esto tendremos que utilizar el siguiente comando:
$sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C407E17D5F76A32B
Ahora actualizaremos los repositorios por medio del siguiente comando:
$sudo apt-get update
Seguido instalaremos el servicio de monitoring y el servicio mysql utilizando el siguiente comando
$sudo apt-get install zabbix-server-mysql zabbix-frontend-php libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json
Configuración Básica
Ahora nos dispondremos a editar el archivo de configuración del servicio para esto utilizaremos el siguiente comando:
$sudo apt-get install zabbix-server-mysql zabbix-frontend-php libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json
Dentro del archivo reemplazaremos los siguientes valores:
DBName=zabbix DBUser=zabbix DBPassword= 30393039
Una vez realizados los cambios iremos a la carpeta mysql del servicio y dentro extraeremos todos los archivos que permitirán crear la estructura de la base de datos, para esto ejecutaremos estos comandos:
$cd /usr/share/zabbix-server-mysql/ $sudo gunzip *.gz
Una vez hecho los pasos anteriores nos dispondremos a entrar al servicio de base de datos del servidor para configurar el usuario de monitoring (este estará separado a la red de base de datos y estará dentro de cada servidor de monitoring), para poder utilizar el mysql por consola primero tendremos que utilizar el siguiente comando:
mysql -u root -p
Ahora crearemos el usuario para el zabbix y le asignaremos la contraseña que hemos puesto en los archivos de configuración, para esto utilizaremos la siguiente sentencia:
mysql>create user 'zabbix'@'localhost' identified by '30393039';
Seguido de esto crearemos la base de datos por medio de la siguiente sentencia:
mysql>create database zabbix;
Y por último daremos los permisos al usuario para poder utilizar la base de datos para esto utilizaremos las siguientes sentencias:
mysql>grant all privileges on zabbix.* to 'zabbix'@'localhost';
mysql>flush privileges;
Una vez hecho las configuraciones anteriores importaremos la estructura de la base de datos, para esto utilizaremos los siguientes comandos:
$mysql -u zabbix -p zabbix < schema.sql $mysql -u zabbix -p zabbix < images.sql $mysql -u zabbix -p zabbix < data.sql
Una vez importada la estructura de la base de datos iremos al archivo principal de php para cambiar los valores de algunas variables, para editar el archivo principal ejecutaremos el siguiente comando:
$sudo nano /etc/php/apache2/php.ini
Una vez dentro del archivo reemplazaremos los valores por defecto de tamaño máximo de subida, el máximo tiempo de ejecución, el máximo tiempo de procesamiento y el tipo de zona horaria por los siguientes:
post_max_size = 16M max_execution_time = 300 max_input_time = 300 date.timezone = UTC
Copiaremos los ejemplos de configuración del zabbix para poder configurar el servicio, para esto utilizaremos el siguiente comando:
$sudo cp /usr/share/doc/zabbix-frontend-php/examples/zabbix.conf.php.example /etc/zabbix/zabbix.conf.php
Editaremos el archivo zabbix.conf.php para poner la contraseña fijada para el usuario zabbix de mysql en pasos anteriores, en este caso utilizaremos el siguiente comando:
$DB['DATABASE'] = 'zabbix'; $DB['USER'] = 'zabbix'; $DB['PASSWORD'] = '30393039'
Seguido copiaremos el archivo de configuración ejemplo dentro de la configuración del apache por medio del siguiente comando:
$sudo cp /usr/share/doc/zabbix-frontend-php/examples/apache.conf /etc/apache2/conf-enabled/zabbix.conf
Ahora habilitaremos el modulo alias y reiniciaremos el servicio de apache, para esto utilizaremos los siguientes comandos:
$sudo a2enmod alias $sudo service apache2 restart
Después de hacer estos últimos pasos iniciaremos ya el servicio de monitoring por medio del siguiente comando:
$sudo service zabbix-server start
Una vez este corriendo el servicio podemos ir a nuestro navegador y poner la ipdelservidor/zabbix y nos aparecera un panel de autenticación como este en donde tendremos que poner usuario y contraseña por defecto será admin:zabbix
Configuración para enviar alertas por GMAIL
Primero tendremos que instalar las herramientas de envío de correo para esto tendremos que utilizar el siguiente comando:
$sudo apt-get -y install postfix mailutils libsasl2-2 ca-certificates libsasl2-modules
Una vez todas las herramientas instaladas tendremos que ir a la carpeta de postfix y editar el archivo de configuración (Se recomienda hacer un backup del archivo antes de editarlo), para esto usaremos los siguientes comandos:
$cd /etc/postfix/ $sudo cp main.cf main.cf.bkp $sudo nano main.cf
Dentro de este archivo al final agregaremos las siguientes lineas:
relayhost = [smtp.gmail.com]:587 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt smtp_use_tls = yes
Ahora, editaremos el archivo sasl_password con sus credenciales de correo de gmail para esto utilizaremos el siguiente comando:
$sudo nano /etc/postfix/sasl_passwd
Una vez dentro del archivo (estará vacío), agregaremos la siguiente linea, donde sucrreo será su correo de gmail y donde contraseña será la contraseña con la que ingresa normalmente a este servicio:
[smtp.gmail.com]:587 [email protected]:contraseña
Ahora aplicaremos las configuraciones de seguridad para que el archivo anterior no sea visible para cualquiera para esto ejecutaremos los siguientes comandos:
sudo postmap hash:/etc/postfix/sasl_passwd $sudo chown root:root /etc/postfix/sasl_passwd $sudo chmod 600 /etc/postfix/sasl_passwd
Una vez ejecutados los cambios de permisos y encriptado el archivo verificaremos los certificados por medio del siguiente comando:
$cat /etc/ssl/certs/Thawte_Premium_Server_CA.pem | sudo tee -a /etc/postfix/cacert.pem
Por último recargaremos el servicio de correo y haremos una prueba para recargar el servicio utilizaremos el siguiente comando:
$sudo /etc/init.d/postfix reload
Para realizar prueba de envio de correo por consola usando postfix utilizaremos el siguiente comando:
$echo "prueba envio" | sudo mail -s " Test Postfix +Gmail+Zabbix " [email protected]
Podemos verificar el log de eventos de email para comprobar que no existan errores, para esto utilizaremos el siguiente comando:
$tail -f /var/log/mail.log
Para que Zabbix envíe correo tenemos que ir al panel web, tal como se muestra en Configuración Media Types Reports Zabbix
Agregar Host a Zabbix
Para agregar un host en el servicio de monitoring ZABBIX, tenemos que ir a la interfaz web e ir a Configuration > Hosts y en host damos clic en Create Host tal como muestra la siguiente imagen:
Una vez hemos dado clic en la pestaña Host tendremos que rellenar el campo de Host name, seleccionar un grupo al cual pertenecerá y en la interfaz tendremos que elegir un método o protocolo por el cual va a monitorizar y la ip o nombre dns tal y como muestra la siguiente imagen:
Luego tendremos que ir a la pestaña Templates y aquí tendremos que elegir los templates los cuales tienen los disparadores para monitorizar, en el caso que se ve elegimos que deseamos monitorizar los servicios HTTP, el sistema operativo que usa y si deja de haber conectividad con este. Una vez hemos agregado las Templates que necesitamos daremos clic en añadir tal y como muestra la siguiente imagen:
Nota: En los servidores utilizaremos el Template ICMP ping. En los servidores Web y de balanceo de carga agregaremos el Template de App HTTP Service. En los servidores de base de datos agregaremos el Template App MySQL, En el NAS lo configuraremos por SNMP y Zabbix Agent el cual tendrá un Template Personalizado para que alerte respecto a las caídas de un disco y el Template SNMP OS Linux para que nos muestre el estado completo de la máquina tanto de discos como memoria.
Zabbix Agent
Zabbix Agent es el agente con el cual se comunica el servidor con los host u otros servidores del zabbix, permite y facilita el uso de disparadores, en nuestro caso necesitamos el zabbix agent para crear un disparador en el NAS que nos permitirá saber el estado de nuestra zpool. Por lo que nos dedicaremos a la Instalación y Configuración Básica del Zabbix Agent.
Crear Disparador
Para crear un disparador primero tenemos que añadir una nueva UserParamater a nuestros agentes Zabbix, que serán utilizados para la información de votación para las pools de ZFS. Primero, iremos al archivo de configuración del zabbix agent en este caso el del NAS el cual se encuentra en /usr/local/etc/zabbix24/zabbix_agentd.conf y miraremos que las siguientes líneas estén descomentadas y tengas los valores correspondientes.
Para crear el disparador utilizamos UserParameter=<key>,<command>
UnsafeUserParameters=1 UserParameter=zpool.health[*],zpool list -H -o health $1
Ahora podemos continuar con la configuración de nuestros cheques Zabbix. Acceder a su servidor Zabbix y vaya a Configuration -> Template y haga clic en el Create Template de botón.
Nombre a la plantilla Template App ZFS y haga clic en el botón Guardar como se muestra en el ejemplo siguiente captura de pantalla:
A continuación, creamos una nueva aplicación en nuestra plantilla, que se llama ZFS Checks:
Ahora vamos a crear un nuevo elemento que va a controlar nuestras pools para esto iremos a la Pestaña Items y haga clic en Create Item.
En la siguiente imagen se puede ver el elemento que hemos creado. Utilizaremos la Key recién agregada al UserParameter que se llama zpool.health , el tipo de información se debe establecer en texto . También puede observar que se pasa un argumento a nuestra Key zpool.health [RAID5] , que especifica el nombre de la agrupación ZFS.
Ahora iremos a la pestaña Triggers y crearemos el disparador la expresión que utilizaremos será la siguiente
{Template App ZFS:zpool.health[zroot].regexp(ONLINE)}=0
Lo que hace este disparador básicamente es que si el ZFS ya no está en ONLINE, lanzara una alerta si se llega a romper un disco o hay algo que falle en la pool.
Una vez creado esto agregaremos el template al host FreeNAS para que se dispare si hay algún fallo dentro del RAID5.