TOP

Realizar pruebas de esfuerzo a nuestra MySQL

mysqlslap es una herramienta de diagnóstico diseñada para emular la carga que pueden producir los clientes sobre nuestro servidor MySQL y  y poder medir tiempos de respuesta. La forma de trabajo es similar al acceso concurrente de varios clientes a nuestro servidor. El proceso que lleva a cabo es el siguiente.

  1. Crea los esquemas o tablas usando una única conexión de cliente.
  2. Corre el test de carga sobre el esquema creado, usando la cantidad de conexiones de cliente configuradas.
  3. Limpia los esquemas usados mediante una única conexión de cliente.
Ejemplos de uso:

mysqlslap --concurrency=5 --iterations=200 --number-int-cols=25 --number-char-cols=10 --auto-generate-sql
TOP

Instalación Loganalyzer en Debian

Loganalyzer es una herramienta que nos permite gestionar nuestros logs de manera eficaz a través de una interfaz Web. Además nos ayuda al analisis de los mismos, generando reportes.



 Instalaremos el aplicativo en una máquina con Debian 6. El procedimiento es el siguiente:

Descargamos la aplicación de la página oficial de adison y lo subimos a nuestra máquina mediante FTP o el método que gustemos.

Descomprimimos el .tar.gz. Si hemos dejado el fichero en /home/usuario hacemos:

cd /home/usuario
tar -xvf loganalyzer-3.4.5.tar.gz

Copiamos el contenido de las carpetas src y contrib que aparecen dentro de la carpeta que genera dentro al descomprimir al directorio /var/www/loganalyzer, que creamos previamente ( o a algún directorio al cual tenga permisos nuestro webserver)

mkdir /var/www/loganalyzer
cp -R /home/usuario/loganalyzer-3.4.5/src/* /var/www/loganalyzer/
cp -R /home/usuario/loganalyzer-3.4.5/contrib/* /var/www/loganalyzer/

 Damos permisos de ejecución al fichero configure.sh (que hemos copiado de la carpeta contrib), y lo ejecutamos para que nos genere el archivo config.php.

Antes de iniciar la configuración a través del navegador web, configuraremos la base de datos donde se guardarán todos los cambios y configuraciones, para ellos tenemos que instalar los siguiente:

apt-get install mysql-server php5-mysql
( y Php5 si no lo tenemos previamente)

Creamos la base de datos y el usuario con permisos sobre la misma, que le pasaremos posteriormente a la configuración de loganalyzer.

mysql -uroot -p
create database loganalyzer;
grant all privileges on loganalyzer.* to 'loganalyzer'@'localhost' identified by "password";
flush privileges;

Con estos comandos, hemos creado la base de datos loganalyzer y el usuario loganalyzer con password "password" con permisos sobre la misma.

Instalamos Apache si no lo tenemos ya, y modificamos el archivo con el virtualhost por defecto, para que el document root apunte a nuestro directorio de loganalyzer.

vi  /etc/apache2/sites-enabled/000-default

#
DocumentRoot /var/www/loganalyzer
.
.
#

Ya estamos en disposición de iniciar la instalación via web. Para ello abrimos nuestro navegador web favorito e introducimos la ip de nuestra máquina, con la modificación del fichero 000-default conseguimos que metiendo la ip nos redireccione a la instalación de loganalyzer directamente.

Seguimos los pasos que nos va mostrando el proceso para completar la instalación, sin olvidarnos de habilitar el uso de la base de datos y eligiendo nuestra fuente de datos.


En posteriores entradas veremos como configurar syslog-ng para que muestre nuestros logs mediante loganalyzer.



TOP

Instalación Moodle en Debian Squeeze

Moodle es un Sistema de Gestión de Cursos de Código Abierto (Open Source Course Management System, CMS), conocido también como Sistema de Gestión del Aprendizaje (Learning Management System, LMS) o como Entorno de Aprendizaje Virtual (Virtual Learning Environment, VLE). Es una aplicación web gratuita que los educadores pueden utilizar para crear sitios de aprendizaje efectivo en línea.


 Para la instalación de Moodle utilizaremos la infraestructura LAMP basada en:
  • Linux: Usaremos la distribución Debian, pero es posible usar cualquier otra, e incluso MAC o Windows, aunque el soporte para estas es menor.
  • Apache: Como servidor Web. tambien se puede usar ISS o nginx entre otros. Recomendable usar versiones recientes.
  • Mysql: Como sistema de base de datos. Es posible utilizar Postgres en su defecto. Puede ir en local, o en un servidor aparte. Es necesaria como mínimo la versión 5.1.33.
  • PHP: Toda la aplicación está basada en PHP por lo que es necesario. Además de PHP puro y duro, es necesario añadir algunas extensiones propias del mismo. Versión mínima 5.3.2.

La lista de paquetes que instalaremos relacionados con PHP es la siguiente (todos se encuentran en los repositorios de Debian):
  • Php5
  • Php-mysql: Estas funciones permiten acceder a servidores de bases de datos MySQL.
  • Php-curl: permite conectarse y comunicarse con diferentes tipos de servidores y diferentes tipos de protocolos.
  • Php-gd: para crear y manipular ficheros de imágenes en una variedad de diferentes formatos de imagen, incluyendo GIF, PNG, JPEG, WBMP y XPM.
  • Php-intl: La extensión para la internacionalización.
  • Php-xmlrpc: implementa el protocolo xml-rpc para php.

    Instalación

    Pasamos a explicar el proceso de instalación. El escenario que tenemos es bien simple. Y puede serlo aún más si decidimos poner la base de datos en local. Yo prefiero ponerlo en equipos distintos por temas de rendimiento.







    Lo primero que haremos será descargar Moodle y llevarlo a nuestra máquina que hará de frontend con Apache. Si no tenemos instalado Apache es buen momento para hacerlo.

    apt-get install apache2

    Descomprimimos el tar.gz con nuestro moodle y copiamos la carpeta resultante en el directorio donde se alojan los recursos web de nuestro servidor, por defecto, en /var/www.

    tar -xvf moodle-latest-23.tar.gz

    cp -r /pathtomoodle/moodle/* /var/www/

    Cambiamos usuario:grupo de los ficheros que acabamos de copiar para que puedan ser manejados por el usuario Apache. Por defecto este usuario es www-data, pero podemos comprobarlo en el fichero de configuración de Apache.

    chown -R www-data:www-data /var/www/*

    Creamos también el directorio /var/moodledata ya que lo solicitará durante la instalación y le hacemos lo mismo que a /var/www
    Instalamos los paquetes de los que hablabamos antes.

    apt-get install php5 php5-mysql php5-gd php5-curl php5-intl php5-xmlrpc

    Reiniciamos Apache:

    /etc/init.d/apache2 restart

    Antes de empezar la instalación vía Web, pondremos a punto la BBDD. Durante el proceso de instalación moodle nos solicitará que le pasemos los datos relacionados con la BBDD donde almacenará todos los registros.

    Si no tenemos instalado mysql, procedemos a ello, ya sea en local o en un sistema aparte.

    apt-get install mysql-server

    Durante el proceso de instalación nos solicitará que metamos la clave de root.
    Una vez finalizado el procesos de instalación, accedemos a mysql para crear la base de datos y el usuario que la gestiona.

    mysql -uroot -p
    password: <password>

    Creamos la base de datos y el usuario con los permisos. Es necesario crear la BBDD con formato UTF8.

     mysql> create database moodle character set UTF8;
     mysql> create user 'moodle'@'%' identified by '<Passwordforuser>';
     mysql> grant all privileges on moodle.* to 'moodle'@'%';
     mysql> flush privileges;

    Con estos comandos, creamos la base de datos de nombre moodle en formato UTF8, el usuario moodle con su correspondiente password y le damos permisos sobre la base de datos.

    Ya estamos en disposición de iniciar la instalación Web de moodle. Introducimos la IP de nuestro equipo en el navegador e instalamos. Nos irá solicitando datos relacionados con la BBDD, con php etc etc. Una vez finalizado, comprobará que todo está en orden y procederá a crear las tablas.

     Tras crear las tablas nos solicitará información sobre la cuenta de administración, username, password, ciudad, pais, descripción etc, etc... así como el nombre del portal. Una vez introducido todo, ya podremos acceder a nuestra plataforma moodle.




    TOP

    Comandos útiles de Linux (I)

    Los siguientes comandos nos permiten llevar un mejor seguimiento de nuestros sistemas linux, control de acceso, estado de discos, rendimiento global del sistema y no son tan conocidos como otros.

    • Uptime: Nos permite conocer cuanto tiempo lleva nuestro sistema encendido. Además, incluye información relacionada con el número de usuarios logueados y la carga del sistema hace 1 , 5 y 15 minutos. Ejemplo:

       root@Tomcat1:~# uptime
       18:57:14 up 24 min,  2 users,  load average: 0.00, 0.00, 0.00

     

    • Lastlog: Nos da información de cuando se ha producido el último login por parte de un usuario dado (-u) y de donde procede esa conexión. En caso de no pasarle ningún argumento, muestra todos los usuarios. Ejemplo:

       root@Tomcat1:~# lastlog -u system
       Nombre           Puerto   De               Ãltimo
       system                                     **Nunca ha entrado**


    • Sar: Recolecta, reporta o guarda información acerca de la actividad del sistema. Es necesario instalar el paquete sysstat. Ejemplo:

        root@Tomcat1:/# sar -q
        Linux 2.6.30-5-amd64 (Tomcat1)  24/10/12 _x86_64_ (1 CPU)

        19:14:27      runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
        19:15:01            0        80      0,01      0,02      0,00
        19:25:01            0        79      0,00      0,00      0,00
        Media:              0        80      0,01      0,01      0,00


    • IostatReporta información relacionada con la actividad de la CPU (-c), así como estadísticas de entrada/salida de los dispositivos (-d), particiones y sistemas de ficheros NFS (-p). Es necesario instalar el paquete sysstat.:  
             iostat
         Muestra el historial de todos las CPUs y dispositivos.
                
        iostat -d 2 

         Muestra un reporte de todos los dispositivos cada 2 segundos.
                 
        iostat -d 2 6 

                Muestra 6 reportes con un intervalo de dos segundos para todos los dispositivos.
                  

        iostat -x sda sdb 2 6 
         Muesta 6 reportes con las estadísticas extendidas con un intervalo de 2 segundos para los dispositivos sda y sdb.
                 

    V.
     
    TOP

    Habilitar autenticación LDAP en freeradius

    Radius (Remote Authentication Dial-In User Server),es un protocolo de autenticación y autorización para aplicaciones de acceso a la red o movilidad IP. Utiliza el puerto 1812 UDP para establecer sus conexiones.
    Una de las principales aplicaciones que utilizan e implementan este protocolo es, freeradius.

                                                    

    Freeradius permite entre otras cosas, distintas formas de autenticación y entre ellas está realizar la autenticación contra un servidor LDAP. En esta características nos centraremos. La manera de habilitar la autenticación LDAP, es la siguiente:
    Modificamos los siguientes ficheros,
    • /etc/freeradius/modules/ldap
    En este fichero, cambiamos lo siguiente:
    ldap {
           #
           #  Note that this needs to match the name in the LDAP
           #  server certificate, if you're using ldaps.
            server = "NOMBRE O IP DEL SERVIDOR LDAP" 
            identity = "cn=admin,dc=pruebas,dc=com" 
            password = "Password" 
            basedn = "ou=people,dc=pruebas,dc=com" 
            filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})" 
            base_filter = "(objectclass=radiusprofile)" 
            password_attribute = userPassword
     
    • server= Nombre del servidor LDAP, o en su defecto IP.
    • identity= Usuario con privilegios en el ldap y dominio de busqueda.
    • password= Password de este usuario
      (es posible suprimir estos dos campos)
    • basedn= le decimos donde buscar en el ldap
    Del resto de campos no es necesario tocar nada. Pasamos a modificar el otro fichero necesario, para habilitar la autenticación LDAP.
    • /etc/freeradius/sites-enabled/default
    Aqui simplemente descomentamos de la parte authorize y authenticate las partes relacionadas con el LDAP.
    authorize {
                #
                #  The ldap module will set Auth-Type to LDAP if it has not
                #  already been set
                 ldap 
                 ....
     authenticate {
                # Uncomment it if you want to use ldap for authentication
                #
                # Note that this means "check plain-text password against
                # the ldap database", which means that EAP won't work,
                # as it does not supply a plain-text password.
                 Auth-Type LDAP {
                 ldap
                 }
    Con esto sería suficiente. Reiniciamos freeradius y comprobamos mediante la herramienta Radtest:

    root@Demo:~# radtest Usuario Password localhost 1812 test123
     Sending Access-Request of id 54 to 127.0.0.1 port 1812
            User-Name = "Usuario" 
            User-Password = "Password" 
            NAS-IP-Address = xxx.xxx.xxx.xxx
            NAS-Port = 1812
     rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=54, 
    length=20
     
    Donde "Usuario" es un usuario dado de alta en el LDAP. Si vemos los logs que deja freeradius (ejecutando freeradius con la opción -X) encontramos:

    [ldap] performing user authorization for Usuario
     [ldap]  expand:  
     [ldap]  ... expanding second conditional
     [ldap]  expand: %{User-Name}-> Usuario
     [ldap]  expand: (uid={%{Stripped-User-Name}:-%{User-Name}})->(uid=Usuario)
     [ldap]  expand: ou=people,dc=pruebas,dc=com -> ou=people,dc=pruebas,dc=com
      [ldap] ldap_get_conn: Checking Id: 0
      [ldap] ldap_get_conn: Got Id: 0
      [ldap] performing search in ou=people,dc=pruebas,dc=com, with filter 
    (uid=password)
     [ldap] Added User-Password = radius in check items
     [ldap] No default NMAS login sequence
     [ldap] looking for check items in directory...
      [ldap] userPassword -> Password-With-Header == "password" 
     [ldap] looking for reply items in directory...
     [ldap] user Usuario authorized to use remote access
      [ldap] ldap_release_conn: Release Id: 0
     ++[ldap] returns ok
     
    Que la petición de autenticación se lleva a cabo correctamente contra el LDAP.
    *Nota: importante, si hacemos backup de un fichero de configuración, no debemos dejarlo en el mismo directorio, ya que puede crear conflictos.
    TOP

    Ampliar partición con LVM

    Procedimiento de amplicación:
    • Añadimos disco a la máquina virtual. 
    • fdisk -l. Comprobamos estado de las particiones y del espacio no particionado
    • fdisk <partición> . Procedemos a modificar el espacio no particionado, <particion> será el path hacia el disco que acabamos de añadir.  Mediante "m" podemos acceder al menú de ayuda de fdisk.


    Para hacer este espacio accesible. Añadimos una partición primaria con "n", una vez hecho, comprobamos el espacio de particones con "p" y escribimos la nueva tabla de particiones con "w"
    • vgdisplay. Comprobamos nombre y tamaño de los "volumes groups" de LMV
    • vgextend <VGGroup> <partición>. Extendemos el tamaño del Volumen group con el disco que acabamos de añadir. Si hacemos un vgdisplay veremos que el tamaño total ha aumentado.
    • lvextend -L+/-tamaño <volumen lógico>. Aumentamos el "logical volume" con la opción -L.
    • resize2fs <partición> -> la podemos sacar con df -h. Redimensionamos partición para que el nuevo bloque sea accesible.
    TOP

    KeepAlived: Alta Disponibilidad y balanceo de carga

    Keepalived nos ofrece una solución de alta disponibilidad mediante el uso del protocolo VRRP . Este protocolo, ideado para la L3 de la capa OSI, simula la presencia de un router "virtual" contra el que van dirigidas las peticiones, enrutando las peticiones sobre uno de los routers físicos que prestan servicio de manera totalmente transparente para el usuario. En caso de caida del router físico, se negocia el paso del servicio a otro router físico sin que se aprecie perdida de servicio.Keepalived también nos proporciona balanceo de carga basado en LVS.


    El gran fuerte de Keepalived es posiblemente su sencillez. La configuración se basa unicamente en un fichero de configuración (keepalived.conf) donde se incluyen todas las opciones necesarias para la puesta a punto, (nada de linea de comandos, nada de interfaces gráficas), y los scripts de arranque y parada típicos. Quizá se pueda echar en falta algún método de configuración más elaborado, por ejemplo, para producir un failover controlado, cambiar el estado Master-Slave de los nodos mediante línea de comandos, ya que la única manera de hacerlo es producirlo manualmente, parando el servicio en el nodo Master.

    Vamos ahora con un pequeño ejemplo de la forma que presenta el fichero de configuración. Necesitamos un fichero de configuración en cada uno de los nodos del cluster.

    vrrp_sync_group VG1 {
        group {
            VI_1
            VI_2
        }
    }


    En Vrrp_sync_group especificamos los recursos que se van a sincronizar en caso de failover. En nuestro caso tenemos dos instancias VI_1 y VI_2 que se corresponden con dos interfaces virtuales. En caso de fallo queremos que ambas interfaces se cambien de nodo, por ello las metemos en este grupo.

    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.110.115/24
        }
    }

    vrrp_instance VI_2 {
        state MASTER
        interface eth1
        virtual_router_id 52
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            10.0.0.5/24
        }
    }

    El resto del fichero se compondrá de las instancias, entendiendo por instancia, los servicios que mantendremos en alta disponibilidad. La forma de estas es la que sigue.

    • state MASTER: Aqui definimos quien será el Master/Slave sobre este recurso. En uno de los nodos estará puesto en Master, en el otro/otros estará/an como Slave.
    • interface eth1: Sobre qué interfaz se levantará nuestra Ip virtual.
    • virtual_router_id 51: Identificador de "Cluster". Debe ser el mismo en ambos (o los que sean) nodos del cluster y distinto a cualquier otro Id de cluster que utilice keepalived.
    • authentication: Opciones de autenticación.
      • auth_type PASS: tipo de autenticación por Password.
      • auth_pass xxxx: password que comparten los nodos para identificarse. Debe ser el mismo en todos los nodos. va en texto claro, así que ojito con quien ve este fichero.
    • virtual_ipaddress: Ip virtual. Formato IP/mascara.

    Con estos parametros en todos los nodos de nuestro cluster tendriamos configurado la alta disponibilidad de interfaces en nuestro cluster. La forma de configurar los servicios es ligeramente distinta a la forma de configurar las interfaces y no entraremos en ello aquí.

    Para ver quien tiene configuradas las interfaces virtuales que hemos configurado en keepalived, no es suficiente con el comando "ifconfig" . Podemos ver las interfaces con uno de los siguientes comando.
      • ip address list
      • ip -4 addr show
    Ambos comandos nos mostrarán las ips virtuales asociadas a nuestras interfaces físicas. Por último, si queremos provocar un failover manual, es suficiente con apagar el servicio keepalived en el nodo que tenga los recursos.

    V.