Como montar un servidor web en nuestro PC para realizar pruebas de estrés

Si estamos pensando en sacar algún tipo de aplicación web, puede ser interesante saber que estabilidad tendrá esta y cuantas visitas concurrentes soportará.

Por ello, en esta entrada se especificarán los pasos para realizar pruebas de estrés, desde nuestra propia máquina (usando el S.O. Centos y una máquina virtual), también se podría realizar dichas pruebas en maquinas de Amazon o en un servidor cualquiera.

 

PASO 1. Instalación de Centos en una Máquina Virtual sobre Windows. Esta máquina se utilizará como servidor php.

Necesitaremos descargar la versión de Virtual Box compatible con Windows e instalarla, la podremos descargar desde aquí en su web oficial. Luego necesitaremos descargar la imagen .iso del S.O. mencionado, lo cual podremos hacerlo desde también desde su web oficial. En nuestro caso la versión que hemos usado para realizar este tutorial es una versión minimal 6.6 (Descargar v6.6 minimal)
PASO 2. Configuración de Virtual Box.

    1. Hacer click en Nueva. Poner el nombre que queramos, tipo “Linux” y versión “Red Hat (32 bit)”. Hacer click en Siguiente.
    2. Establecer una memoria ram de 1024 MB y hacer click en Siguiente.
    3. Elegimos “Crear disco duro virtual ahora”. Click en Crear.
    4. Elegimos el tipo de disco “VDI (VirtualBox Dick Image) y hacemos click en Siguiente.
    5. Elegimos la opción de reservado dinámicamente. Click en Siguiente.
    6. Ahora hacemos click en Crear.
    7. Una vez creado, seleccionamos la máquina que acabamos de crear y hacemos click en “Configuración”.
    8. Ahora vamos a Almacenamiento → Controlador IDE → Controlador IDE/Vacio → (Icono de disco con flecha hacia abajo) → Seleccionar un archivo de disco virtual de CD/DVD… → (Buscar nuestra imagen .iso y seleccionar).
    9. Ahora configuramos la red: Ir a Red → Adaptador 1 → Conectado a:→ (Seleccionar Adaptador Puente y seleccionar la tarjeta de red de nuestro ordenador con la que nos conectamos a internet).
    10. Por último, hacemos click en Aceptar.

PASO 3. Configuración de Centos.

  1. Seleccionamos la máquina creada y hacemos click en Iniciar.
  2. Dejamos seleccionado “Install or upgrade an existing system”, pulsar Intro y esperar que cargue.
  3. Movemos con las flechas del teclado hasta seleccionar “SKIP” y pulsar Intro (esperar).
  4. Hacemos click en Next.
  5. Seleccionamos idioma (Spanish) y pulsamos en Next.
  6. Dejamos selecciono “Dispositivos de almacenamiento básicos” y hacemos click en “Siguiente”.
  7. Hacemos click en “Si, descarte todos los datos”
  8. Establecemos el nombre del equipo.
  9. Dejamos seleccionado “Europa/Madrid” y pulsamos en “Siguiente”.
  10. Establecemos la contraseña para el usuario root.
  11. Seleccionar “Remplazar sistema(s) Linux existente(s)” y pulsar “Siguiente”
  12. Hacemos click en “Escribir cambios al disco” y esperamos a que finalice la instalación
  13. Por último, reiniciamos.

PASO 4. Primer arranque y actualización.

  1. Usamos nuestro login y nuestra password para acceder como root.
  2. Ejecutamos el comando “ifconfig -a”. Se observa que la interfaz eth0 no tiene configuración IP y que no está levantada.
  3. Ejecutamos el comando “ifup et0″
  4. Ejecutamos “yum update”. Y pulsamos la tecla “s” para continuar cuando sea necesario.
  5. Ejecutamos “yum install nano”
  6. Ejecutamos “nano /etc/sysconfig/network-scripts/ifcfg-eth0″. Una vez dentro de este archivo cambiamos la linea “ONBOOT=no” por “ONBOOT=yes”. Guardamos y salimos. Con este paso habremos conseguido que la interfaz eth0 se levante automáticamente cada vez que arranquemos Centos.

PASO 5. Configuración de carpeta compartida entre Windows y Centos.

  1. Máquina → Configuración → Carpetas Compartidas
  2. Pulsamos sobre “Añadir Carpeta”
  3. Hacemos click en Ruta Carpeta → Otro → (Crear Carpeta en Escritorio y seleccionar) → Aceptar
  4. Seleccionamos “Automontar” y “Hacer Permanente”. Luego hacemos click en aceptar.
  5. Dentro de la máquina Centos, ejecutamos el comando “mkdir CarpetaCompartida”.
  6. Ejecutamos el comando “yum groupinstall “Development Tools” “
  7. Ejecutamos comando “yum install kernel-devel”
  8. Luego vamos a Dispositivos → Insertar la imagen de CD de las “Guest Additions”
  9. Ejecutamos el comando “mkdir /mnt/cd”
  10. Ejecutamos el comando “mount /dev/sr0 /mnt/cd”
  11. Ejecutamos el comando “cd /mnt/cd”
  12. Ejecutamos el comando “./VBoxLinuxAdditions.run”
  13. Ejecutamos el comando “mount –t vboxsf CarpetaCentos /root/CarpetaCompartida/”

Desde este momento, cualquier archivo que incluyamos en la carpeta creada en Windows, también aparecerá en la creada en Centos, y viceversa.

 

PASO 6. Instalación servidor Apache y mysql

  1. Ejecutamos el comando “yum install httpd”
  2. Ejecutamos el comando “nano /etc/sysconfig/iptables”
  3. Modificamos el fichero añadiendo bajo la línea “-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT” la siguiente línea: “-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT”
  4. Ejecutamos el comando “service iptables start”
  5. Ejecutamos el comando “service httpd start”
  6. Ejecutamos el comando “yum install mysql-server”
  7. Ejecutamos el comando “service mysqld start”
  8. Ejecutamos los comandos “chkconfig httpd on” y “chkconfig mysqld on”
  9. Configuramos mysql-server ejecutando “/usr/bin/mysql_secure_installation”, estableciendo una contraseña y respondiendo si a todo.
  10. Ejecutamos el comando “yum install php php-mysql”
  11. Ejecutamos el comando “service httpd restart”

Instalacion Servidores

PASO 7. Probando php

  1. Ejecutamos el comando “nano /var/www/html/info.php” y escribirmos lo siguiente: <?phpphpinfo();?>
  2. Ejecutamos el comando “ifconfig” y apuntamos la dirección ip de la interfaz eth0
  3. Abrimos un navegador en Windows y escribimos: [IP_ETH0]/info.php

PASO 8. Descargar la BD, crearla e importarla

  1.  Descargar en Windows la BD en formato .csv (“IP2LOCATION-LIST-DB5.CSV”) desde la siguiente url: Descargar BD
  2. Copiar la BD a la carpeta compartida creada anteriormente.
  3. En Centos, ejecutamos el comando “cd /root/CarpetaCompartida”
  4. Ejecutamos el comando “mysql –u root –p”, introducimos nuestra contraseña y a continuación los siguiente comandos:CREATE DATABASE ip2location;USE ip2location;CREATE TABLE `ip2location_db5`(`ip_from` INT(10) UNSIGNED,`ip_to` INT(10) UNSIGNED,`country_code` CHAR(2),`country_name` VARCHAR(64),`region_name` VARCHAR(128),`city_name` VARCHAR(128),`latitude` DOUBLE,`longitude` DOUBLE,INDEX `idx_ip_from` (`ip_from`),

    INDEX `idx_ip_to` (`ip_to`),

    INDEX `idx_ip_from_to` (`ip_from`, `ip_to`)

    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

    LOAD DATA LOCAL

    INFILE ‘/root/CarpetaCompatida/IP2LOCATION-LITE-DB5.CSV’

    INTO TABLE

    `ip2location_db5`

    FIELDS TERMINATED BY ‘,’

    ENCLOSED BY ‘”‘

    LINES TERMINATED BY ‘\r\n’

    IGNORE 0 LINES;

  5. Ejecutamos el comando “exit”

Descargar, Crear, Importar BD 1

PASO 9. Creación del fichero .php que acceda a la BD y devuelva una respuesta

  1. Ejecutamos el comando “mkdir /var/www/html/MAC”
  2. Ejecutamos el comando “nano /var/www/html/MAC/localizarIpv2.php” y escribimos lo siguiente:<!DOCTYPE html><html ><head><meta charset=”utf-8″><meta http-equiv=”X-UA-Compatible” content=”IE=edge”><meta name=”viewport” content=”width=device-width, initial-scale=1″><meta name=”description” content=”"><meta name=”author” content=”"><title>Localiza tu IP</title></head><body><div>

    <div>

    <h2>Localizador IP</h2>

    <?php

    function Dot2LongIP ($IPaddr)

    {

    if ($IPaddr == “”) {

    return 0;

    } else {

    $ips = split (“\.”, “$IPaddr”);

    return ($ips[3] + $ips[2] * 256 + $ips[1] * 256 * 256 + $ips[0] * 256 * 256 * 256);

    }

    }

    if(isset($_GET["ip"]) & !empty($_GET["ip"])){

    $result=Dot2LongIP($_GET["ip"]);

    $host = “localhost”;

    $user = “root”;

    $pass = “localhost”;

    $db = “ip2location”;

    $conexion = mysql_connect($host, $user, $pass);

    mysql_select_db($db, $conexion);

    $str=”SELECT IP.country_name, IP.region_name, IP.city_name, IP.latitude, IP.longitude FROM ip2location_db5 IP

    WHERE (IP.ip_from <= “.$result.”) AND (IP.ip_to >= “.$result.”)”;

    $query = mysql_query($str);

    $row=mysql_fetch_array($query);

    echo(“<h3>Pais:”.$row[0].”</h3>”);

    echo(“<h3>Region:”.$row[1].”</h3>”);

    echo(“<h3>Ciudad:”.$row[2].”</h3>”);

    }

    else{

    echo(“<h3>Parámetros no validos</h3>”);

    }

    ?>

    </div>

    </div>

    </body>

    </html>

  3. Probamos en un navegador en Windows la siguiente dirección: “http://[direccion ip eth0]/MAC/localizarIpv2.php?ip=125.12.36.158″

PASO 10. Crear una nueva máquina virtual repitiendo los pasos 1, 2, 3 y 4. Se puede realizar en el mismo ordenador o en otro conectado a la misma red.

En la nueva máquina virtual…

  1. Ejecutamos el comando “yum install wget”
  2. Ejecutamos el comando “wget http://download.joedog.org/siege/siege-3.0.9.tar.gz
  3. Ejecutamos el comando “tar xvfz siege-3.0.9.tar.gz”
  4. Ejecutamos el comando “cd siege-3.0.9″
  5. Ejecutamos el comando “./configure”
  6. Ejecutamos el comando “make”
  7. Ejecutamos el comando “make install”

Pruebas estres siege 0

PASO 11. Pruebas de estrés (desde la máquina cliente).

Primera prueba ejecutando el comando “siege –t 1m –c 100 –u http://[ip maquina servidor]/MAC/localizarIpv2.php?ip=125.12.36.158″

Los resultados son los siguientes:

Transactions:                   3066 hits

Availability:                 100.00 %

Elapsed time:                  62.96 secs

Data transferred:               1.70 MB

Response time:                  4.18 secs

Transaction rate:              48.70 trans/sec

Throughput:                     0.03 MB/sec

Concurrency:                  203.41

Successful transactions:        3066

Failed transactions:               0

Longest transaction:           34.83

Shortest transaction:           0.30

 

Una primera forma de mejorar estos resultados es modificar la consulta con el comando “nano /var/www/html/MAC/localizarIpv2.php” modificando la línea:

WHERE (IP.ip_from <= “.$result.”) AND (IP.ip_to >= “.$result.”)”;  por la línea:

WHERE (IP.ip_to >= “.$result.”) LIMIT 1″;

 

Otro forma en la que pueden mejorarse estos resultados es modificando la configuración del servidor Apache para que lance más hilos concurrentes. Esto se hace ejecutando el comando “nano /etc/httpd/conf/httpd.conf” y modificando en el fichero las líneas:

StartServers -> 15

MinSpareServers -> 15

MaxSpareServers -> 35

Configuracion httpd 0

Tras esto, antes de realizar la siguiente prueba de estrés deberemos ejecutar el comando “service httpd restart”

Leave a Reply