Práctica06
practica06
Balanceador de carga con Apache.
Arquitectura y direccionamiento IP de las maquinas.
La arquitectura estará formada por:
- Un balanceador de carga, implementado con un Apache HTTP Server configurado como proxy inverso.
- Una capa de front-end, formada por dos servidores web con Apache HTTP Server.
- Una capa de back-end, formada por un servidor MySQL.
Las direcciones IPs que tendrán las máquinas virtuales son las siguientes:
- Balanceador. (IP: 192.168.33.10)
- Frontal Web 1. (IP: 192.168.33.11)
- Frontal Web 2. (IP: 192.168.33.12)
- Servidor de Base de Datos MySQL. (IP: 192.168.33.13)
Como activamos los modulos necesarios de apache.
Activamos los siguientes módulos:
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_ajp
a2enmod rewrite
a2enmod deflate
a2enmod headers
a2enmod proxy_balancer
a2enmod proxy_connect
a2enmod proxy_html
a2enmod lbmethod_byrequests
Estos modulos tendremos que meterlos en el script que creemos para el balance.
Configuración de Apache para trabajar como balanceador de carga.
Editamos el archivo 000-default.conf que está en el directorio /etc/apache2/sites-enabled:
sudo nano /etc/apache2/sites-enabled/000-default.conf
Añadimos las directivas Proxy y ProxyPass dentro de VirtualHost.
<VirtualHost *:80>
# Dejamos la configuración del VirtualHost como estaba
# sólo hay que añadir las siguiente directivas: Proxy y ProxyPass
<Proxy balancer://mycluster>
# Server 1
BalancerMember http://IP-HTTP-SERVER-1
# Server 2
BalancerMember http://IP-HTTP-SERVER-2
</Proxy>
ProxyPass / balancer://mycluster/
</VirtualHost>
Cambiaremos IP-HTTP-SERVER-1 y IP-HTTP-SERVER-2 por las direcciones IPs de las maquinas del Front-end.
Despues de aplicar los cambios reiniciaremos el servicio de apache con:
sudo /etc/init.d/apache2 restart
Script Balance
#!/bin/bash
apt-get update
apt-get install -y apache2
apt-get install -y php libapache2-mod-php php-mysql
sudo /etc/init.d/apache2 restart
# modulos de activación
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_ajp
a2enmod rewrite
a2enmod deflate
a2enmod headers
a2enmod proxy_balancer
a2enmod proxy_connect
a2enmod proxy_html
a2enmod lbmethod_byrequests
# editamos el archivo 000-default.conf
sudo rm -rf /etc/apache2/sites-enabled/000-default.conf
cp /vagrant/000-default.conf /etc/apache2/sites-enabled/
sudo /etc/init.d/apache2 restart
Script apache
#!/bin/bash
# instalacion de apache
apt-get update
apt-get install -y apache2
apt-get install -y php libapache2-mod-php php-mysql
sudo /etc/init.d/apache2 restart
#clonar repositorios
apt-get install -y git
cd /tmp
rm -rf iaw-practica-lamp
git clone https://github.com/josejuansanchez/iaw-practica-lamp.git
#copiar repositorio
cd iaw-practica-lamp
cp src/* /var/www/html/
#modificar la base de datos que queremos usar
sed -i 's/localhost/192.168.33.12/' /var/www/html/config.php
chown www-data:www-data /var/www/html/* -R
#borramos el index
rm -rf /var/www/html/index.html
Script MySQL
#!/bin/bash
apt-get update
apt-get -y install debconf-utils
DB_ROOT_PASSWD=root
debconf-set-selections <<< "mysql-server mysql-server/root_password password $DB_ROOT_PASSWD"
debconf-set-selections <<< "mysql-server mysql-server/root_password_again password $DB_ROOT_PASSWD"
apt-get install -y mysql-server
sed -i -e 's/127.0.0.1/0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf
#/etc/init.d/mysql restart
#mysql -uroot mysql -p$DB_ROOT_PASSWD <<< "GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY '$DB_ROOT_PASSWD'; FLUSH PRIVILEGES;"
#clonar repositorios
apt-get install -y git
cd /tmp
rm -rf iaw-practica-lamp
git clone https://github.com/josejuansanchez/iaw-practica-lamp.git
#crear base de datos
mysql -u root -p$DB_ROOT_PASSWD < /tmp/iaw-practica-lamp/db/database.sql
/etc/init.d/mysql restart
Contenido de 000-default.conf
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
<Proxy balancer://mycluster>
# Server 1
BalancerMember http://192.168.33.10
# Server 2
BalancerMember http://192.168.33.11
</Proxy>
ProxyPass / balancer://mycluster/
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Contenido de Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/xenial64"
# Apache HTTP Server
config.vm.define "web1" do |app|
app.vm.hostname = "web1"
app.vm.network "private_network", ip: "192.168.33.10"
app.vm.provision "shell", path: "apache.sh"
end
# Apache HTTP Server
config.vm.define "web2" do |app|
app.vm.hostname = "web2"
app.vm.network "private_network", ip: "192.168.33.11"
app.vm.provision "shell", path: "apache.sh"
end
# MySQL Server
config.vm.define "db" do |app|
app.vm.hostname = "db"
app.vm.network "private_network", ip: "192.168.33.12"
app.vm.provision "shell", path: "mysql.sh"
end
# balanceador
config.vm.define "balance" do |app|
app.vm.hostname = "banlace"
app.vm.network "private_network", ip: "192.168.33.3"
app.vm.provision "shell", path: "balance.sh"
end
end