diciembre 2010


Como siempre, uno de los asuntos que más tiempo consume cuando se está configurando un servidor es elegir correctamente todos los parámetros de configuración para mejorar al máximo su rendimiento. En el caso de MySQL hay una herramienta que facilita mucho la vida: mysqltuner. Se trata de un script escrito en Perl que se encarga de revisar la configuración del servidor MySQL haciendo un estudio de su rendimiento. Además, al finalizar la ejecución muestra unas cuantas sugerencias para el archivo de configuración my.cnf que mejorarían el rendimiento en nuestra instalación.

Para utilizarlo, hay que descargarlo utilizando wget como se muestra a continuación:

abian@server:~$ wget -O mysqltuner.pl mysqltuner.pl

abian@server:~$ chmod +x mysqltuner.pl

abian@server:~$ ./mysqltuner.pl

Aunque también se puede instalar desde los repositorios de Ubuntu o Debian:

abian@server:~$ sudo apt-get install mysqltuner.pl

abian@server:~$ mysqltuner.pl

El resultado de su ejecución se puede ver a continuación:

mysqltuner

Resultado de la ejecución de mysqltuner

Un saludo

 

Os dejo unos cuantos comando útiles para crear un sistema de particiones utilizando LVM:

1- Borrar la tabla de particiones de los tres discos que queremos utilizar para crear el volumen. (CUIDADO, esto borrará las particiones de dichos duros):

root@abian:~# dd if=/dev/zero of=/dev/sdb bs=1k count=1
root@abian:~# dd if=/dev/zero of=/dev/sdc bs=1k count=1
root@abian:~#  dd if=/dev/zero of=/dev/sdd bs=1k count=1

2- Instalación de LVM versión 2:

root@abian:~# apt-get install lvm2

3- Crear el volumen físico en cada disco:

root@abian:~# pvcreate /dev/sdb
root@abian:~# pvcreate /dev/sdc
root@abian:~# pvcreate /dev/sdd

4- Crear el grupo de volúmenes lógicos

root@abian:~# vgcreate datos /dev/sdb /dev/sdc /dev/sdd

Si se quisiera ampliar el grupo de volúmenes lógicos habría que utilizar:

root@abian:~# pvcreate /dev/sdX
root@abian:~# vgextend datos /dev/sdX

5- Creación de un volumen lógico:

root@abian:~# lvcreate -L1500 -n lv_datos datos

-L indica el tamaño, en este caso 1,5TB
-n indica el nombre para el nuevo volumen
-El último parámetro es el nombre del grupo de volúmenes lógicos.

6- En caso de que sea necesario modificar su tamaño solo habría que utilizar los siguientes comandos:

root@abian:~# lvextend -L1,36T /dev/datos/lv_datos
root@abian:~# e2fsck -f /dev/datos/lv_datos
root@abian:~# resize2fs /dev/datos/lv_datos

7- Crear el sistema de ficheros para nuestro nuevo volumen:

root@abian:~# mkfs.ext3 /dev/datos/lv_datos

8- Montar la nueva partición

root@abian:~#  mount -t ext3 /dev/datos/lv_datos /media/datos/

Es recomendable modificar el fichero /etc/fstab para que se monte automáticamente la partición al arrancar el sistema en /media/datos añadiendo la siguiente línea:

/dev/datos/lv_datos     /media/datos/                     ext3    defaults,user       0       0

Por supuesto se pueden utilizar todas las herramientas que tiene linux sobre LVM (http://tldp.org/HOWTO/LVM-HOWTO/) aunque tal vez la más importante sea vgdisplay, os copio el resultado:

root@abian:~# vgdisplay
— Volume group —
VG Name               datos
System ID
Format                lvm2
Metadata Areas        3
Metadata Sequence No  4
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                1
Open LV               0
Max PV                0
Cur PV                3
Act PV                3
VG Size               1,36 TB
PE Size               4,00 MB
Total PE              357702
Alloc PE / Size       356516 / 1,36 TB
Free  PE / Size       1186 / 4,63 GB
VG UUID               lrMxQA-fel1-6Cny-QgEB-pPvg-uuA9-QYxkuJ

Para los que tengan algo de alergia a la consola, hay una interfaz gráfica que hace todo:

root@abian:~# apt-get install system-config-lvm

configuración con entorno gráfico de LVM

system-config-lvm

Espero que os resulte de utilidad.

Hace un tiempo “apareció” en el despacho un bladecenter. La cuestión es que no se nos informó ni de la marca ni de la versión de dicho cacharrito y tardamos un tiempo en descubrir cómo se configuraba. Por supuesto, ni siquiera sabíamos lo que era un bladecenter a sí que la investigación incluyó búsquedas infructuosas de imágenes en google, descarga aleatoria de CD de instalación de servidores de intel… Todo muy profesional. Al final buscando en google todos los números de versión de una pegatina del cacharro en cuestión dimos con su nombre y versión. Fue más un acto de suerte que de buen criterio, pero a veces la suerte también funciona.

Se puede definir coloquialmente un bladecenter como un contenedor de servidores o equipos, es un chasis muy completo al que se le pueden enchufar directamente blades y discos duros.

Intel mfsys25

Intel mfsys25

La parte derecha contiene 6 bahías para insertar blades, cada uno de ellos tiene dos puertos USB y un VGA frontales, mientras que la parte superior izquierda contiene 14 bahías para los discos duros. Las especificaciones completas se encuentran en este pdf.

Como se puede ver en la siguiente imagen (la fijación del monitor es propia de “there I fixed it“), su instalación dentro de un armario rack no es complicada:

Intel MFSYS25 Modular Server System dentro de un armario rack

Intel MFSYS25 Modular Server System dentro de un armario rack

Antes de intentar instalar el sistema operativo hay que configurar los recursos del chasis que se asignan a cada servidor. Por supuesto, antes de nada de nada hay que leerse el manual de usuario.

El chasis incluye un componente hardware exclusivamente para el control de los recursos del chasis. Para acceder a la aplicación de configuración, es necesario conectar un equipo al puerto ethernet del módulo de control como se muestra en la siguiente imagen:

MFSYS25 back

Módulo de control del MFSYS25

El módulo de control tiene por defecto la IP 192.168.150.150, por lo tanto hay que configurar la red del equipo que se conecta a dicho módulo de control para que se pueda comunicar. El archivo /etc/network/interfaces debería tener la siguiente configuración:

abian@laptop:~$ cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth1
iface eth1 inet static
address 192.168.150.151
netmask 255.255.255.0
network 192.168.150.0

Luego bastaría con levantar la interfaz:

abian@laptop:~$ sudo ifup eth1

Ahora hay que abrir un navegador con la URL http://192.168.150.150 y empezaremos a utilizar la herramienta de configuración de Intel. Por defecto el usuario es “admin” y el password es “admin” a sí que una de las primeras tareas una vez logueados en la aplicación será cambiar el password a uno más apropiado…

A continuación, sólo a modo de ejemplo, muestro una captura de pantalla obtenida del manual de usuario en la que se puede ver la pinta que tiene este panel de control:

Modular server control panel

Modular server control panel

Las secciones más importantes son las tres incluidas dentro de la sección “system”:

  • Servers: Desde esta sección se puede controlar el estado de cada uno de los blades insertados en el chasis. Se pueden apagar, encender, verificar su temperatura, estado de los ventiladores, etc.
  • Storage: Esta sección controla los discos duros del chasis. Desde aquí se puede configurar unidades de disco duro virtuales que serán utilizadas por cada uno de los blades. A cada unidad virtual se le asignan los discos duros reales y se establece la configuración RAID deseada. Se pueden redimensionar o modificar estas unidades de disco virtuales de forma transparente para el servidor. Personalmente esta es la parte que más me ha gustado de toda la herramienta de configuración por las numerosas posibilidades que brinda.
  • Switches: Uno de los paneles que se ve en la vista trasera es un switch GigaEthernet. Desde esta sección se configura su funcionamiento. Se puede habilitar o deshabilitar cada uno de los 10 puertos Gigaethernet o establecer el blade al que se le asignan.

A continuación se puede ver un ejemplo de las posibilidades de configuración de almacenamiento:

Ejemplo de configuración de almacenamiento

Ejemplo de configuración de almacenamiento

Una vez que configurado el almacenamiento y la red para el blade que queramos, es el momento de escoger nuestra distro de GNU/Linux preferida y comenzar la instalación. Para ello habrá que utilizar un hub USB para enchufar un lector de CDs, un teclado y un ratón (recordad que cada blade tiene sólo dos entradas USB frontales) y un monitor. A partir de aquí la instalación es igual que en cualquier otro equipo.

Espero que os haya resultado interesante. Un saludo

No soy una persona que tenga un especial interés en tener siempre la última versión de todos los programas que utilizo. Sin embargo, sí que intento tener actualizadas las Ubuntu server para disponer de los últimos kernels o parches de seguridad. Con la última actualización de Ubuntu cambió la versión de PHP instalada, lo que hizo que una de nuestras aplicaciones web empezase a dar algún que otro problema.

La solución más correcta habría sido actualizar la aplicación web para que funcionase con la nueva versión de PHP pero el trabajo habría sido faraónico y el tiempo siempre es finito a sí que optamos por utilizar la versión de PHP que sabíamos que funcionaba. Para ello reinstalé el servidor apache utilizando el código fuente de Apache + PHP. Estos son los pasos que seguí:

  1. Descargar la versión deseada de Apache (eligiendo “Unix Source”) y PHP (eligiendo “complete source code”). Posteriormente, hay que descomprimir los archivos (siendo X, Y, Z los números de versión adecuados):
    abian@server:~$ tar xvz httpd-2.2.X.tar.gz
    abian@server:~$ tar xvj php-5.Y.Z.tar.bz2 

  2. Crear la carpeta que contendrá la instalación de Apache + PHP:
    mkdir /apache_PHP/
    Con ese nombre se puede actualizar posteriormente la instalación sin cambiar los scripts de arranque del servidor.
  3. Compilar Apache utilizando –prefix para indicar dónde se va a instalar y –enable-modules para instalar directamente algunos módulos:
    ./configure –prefix=/apache_PHP/ –enable-modules=”core_module log_config_module logio_module mpm_prefork_module http_module so_module alias_module auth_basic_module authn_file_module authz_default_module authz_groupfile_module authz_host_module authz_user_module autoindex_module cgi_module deflate_module dir_module env_module mime_module negotiation_module php5_module python_module reqtimeout_module setenvif_module status_module”  

    make

    make install

  4. Compilar PHP con las opciones –prefix para indicar la ruta donde se instalará y –with-mysql para indicar dónde se encuentran las librerías de MySQL:
    ./configure –prefix=/apache_PHP/php –with-apxs2=/apache_PHP/bin/apxs –with-config-file-path=/apache_PHP/php –with-mysql=/usr/include/mysql/

    make

    make test  

    make install

  5. Si en el configure del PHP hay un error porque no se encuentran las librerías MySQL hay que instalar el paquetelibmysqlclient-dev, por ejemplo con apt-get:
    root@server:~# apt-get install libmysqlclient-dev
  6. Ahora hay que retocar el archivo de configuración para que contenga los parámetros correctos:

    root@server:~# vim /apache_PHP/conf/httpd.conf
     

    Por ejemplo, seguramente haya que cambiar los virtual host, las rutas de los logs, el usuario y grupo que ejecutará el servidor… Lo que sí es importante es comprobar que están estas tres líneas:

    LoadModule php5_module        modules/libphp5.so  #indica que se carga el módulo recién compilado
    AddType application/x-httpd-php .php                         #Hace que el servidor procese las páginas PHP en lugar de mostrar el código fuente que conteienen
    DirectoryIndex index.html index.php index.htm          #Esta línea no es obligatoria pero hará que se abra por defecto la página index.php si existe.

Con esto queda todo instalado y configurado. La aplicación que controla la ejecución del servidor Apache se encuentra en /apache_PHP/bin/apachectl. Algunas funcionalidades útiles son:

  • Chequeo de sintásis: root@server:~# /apache_PHP/bin/apachectl -t
  • Lista de módulos cargados: root@server:~# /apache_PHP/bin/apachectl -M
  • Lista de hosts virtuales instalados: root@server:~# /apache_PHP/bin/apachectl -S
  • Arrancar y parar el servidor: root@server:~# /apache_PHP/bin/apachectl [start, stop, restart]

La última recomendación que tengo es la creación de un archivo en /etc/init.d/apache2 que contenga los parámetros de arranque y parada del servidor para hacer la vida algo más fácil. Un ejemplo de ese archivo puede ser el siguiente:

root@server:~# cat /etc/init.d/apache2
#!/bin/bash
case $1 in
start)
/apache_PHP/bin/apachectl start
;;
stop)
/apache_PHP/bin/apachectl stop
;;
restart)
/apache_PHP/bin/apachectl restart
;;
*)
#Por defecto, reiniciar el servidor
/apache_PHP/bin/apachectl restart
;;
esac

Un saludo