Ikasten.IO
Learning, Aprendiendo

Receta rápida para optimizar MySQL 4 junio, 2014

highperformancemysqlSiguiendo con el post anterior (recordemos, tengo un servidor muy humilde en recursos que quiero aprovechar al máximo), le toca el turno al servidor MySQL.

Tengo un libro (High Performance MySQL, de la editorial O’Reilly) que -entre otras cosas- se dedica a explicar cómo obtener el mejor rendimiento de un servidor MySQL, así que en este post no voy a hacer más que abrir el melón 🙂

La cuestión es que, antes de entrar a configurar los cientos de parámetros del fichero de configuración my.cnf, quería ir a tocar los interruptores “evidentes”. ¿Hay alguna forma de encontrar fallos de configuración obvios en MySQL para hacer que este sistema gestor rinda mejor? (“rendir mejor” puede entenderse de varias formas… yo me refiero al sentido de que siga ofreciendo servicio pero que consuma menos RAM).

Pues sí… hay una pequeña aplicación, llamada mysqltuner.pl, que permite “tunear” el fichero my.cnf de forma muy sencilla. Realmente lo que hace es darte pistas y consejos sobre qué “interruptores” tocar para que el servidor rinda mejor.

Aprovechando un domain hack, el autor de la aplicación ha generado un dominio propio con el mismo nombre que la aplicación en Perl: http://mysqltuner.pl. Así que, para descargar y hacer ejecutable esta joyita, basta con hacer:

Si ejecutamos con permisos de sudoer, ni siquiera tenemos que configurar las credenciales de mysql, porque como la aplicación indica en el log:

Qué cosas… no sabía que hubiera una cuenta de mantenimiento debian con la que hacer… eso, mantenimiento de mysql 🙂 Entre otras cosas, lo primero que me dice mysqltuner es:

Vamos, que el módulo InnoDB lo tengo activado (consumiendo memoria) y no lo uso. Sabiendo que mi server si algo tiene que cuidar es la RAM… vamos a hacerle caso… También me dice que tengo tablas fragmentadas que convendría arreglar. Apuntado. Lo primero, antes de pifiarla (desactivando InnoDB cuando por defecto MySQL crea bases de datos InnoDB, por ejemplo), vamos a comprobar…

Je… Murphy nunca falla. Vamos a arreglar eso (quiero dejar MyISAM por defecto antes de desactivar el soporte InnoDB en MySQL). En el fichero /etc/mysql/my.cnf añado lo siguiente:

Y listo. Vamos ahora a optimizar tablas…

Pasamos de nuevo mysqltuner.pl:

y ¡premio!

Dejo un ejercicio para el lector 🙂

Eso de que el máximo de RAM que puede consumir MySQL es del 121% de la RAM instalada no me ha gustado (y a mysqltuner.pl tampoco). ¿Qué hacer para corregirlo? Lo veremos en otro post…

1 comentario en Receta rápida para optimizar MySQL

Introducción a Open edX (III). Devstack 29 mayo, 2014

Como dijimos en el anterior post, Devstack es una instancia Vagrant diseñada para facilitar la vida a los desarrolladores de Open edX. Diferenciaremos Devstack de Fullstack en que ésta última es una instancia Vagrant diseñada para tener todos los servicios de edX en un único servidor de producción.

Además, Devstack simplifica algunas características de Fullstack para hacerlo más ligero (y simplificar así el desarrollo en local). Por ejemplo, en lugar de usar el servidor HTTP nginx y gunicorn como hace Fullstack, Devstack usa el runserver de Django, mucho más ligerito.

Devstack incluye los componentes LMS, CMS (Studio), los foros y ORA (Open ResponseAssessor). Este último componente, no obstante, no está configurado en Devstack (y requiere mucha máquina para su ejecución, por lo que no lo recomiendo en modo desarrollo).

Antes de empezar con la instalación, es necesario asegurarse de que tenemos una versión modernita de VirtualBox (4.3.10 o superior) y Vagrant (1.5.3) o superior. En Ubuntu 13.10 (donde he probado este proceso de instalación) tuve que descargar desde la web de cada herramienta la última versión (las versiones que ofrecían los repos APT no eran lo suficientemente modernas). En concreto, he hecho las pruebas con VirtualBox 4.3.12 y Vagrant 1.6.2.

Instalando Devstack

Lo primero, necesitaremos instalar soporte NFS. ¿Para qué? para que nuestra máquina local exporte las carpetas de desarrollo -donde tendremos parte del código fuente de edX- a la instancia vagrant (esto se hace con la ayuda de las VirtualBox Guest Additions, pero por ahora, olvídate de este detalle, simplemente instala el soporte NFS tal y como indico):

Vamos a crear ahora un directorio donde trabajar con Devstack:

Descargamos ahora el fichero Vagrant necesario para comenzar la instalación:

Nota: resumiendo muy mucho, podemos ver el fichero Vagrantfile como una receta sobre cómo montar una máquina virtual desde cero: cuál es la imagen base, qué puertos abrir en dicha máquina virtual, cuánta memoria asociarle, qué carpetas compartir, etc.

Antes de lanzar vagrant, instalaremos un plugin que no va a permitir tener siempre actualizadas las VirtualBox Guest Additions (recordemos, un conjunto de herramientas de VirtualBox que entre otras cosas nos permitirán compartir carpetas entre la máquina física (host) y la máquina virtual (guest).

Procedemos a lanzar vagrant:

Ojo, la primera vez que lancemos este comando Vagrant procederá a descargar la máquina base sobre la que instalar edX. Esta máquina base ocupa 4GB… así que no lo hagas desde tu conexión móvil 😉 A partir de aquí, aunque destruyas la máquina virtual, Vagrant no tendrá que descargarse de nuevo la imagen base.
Durante la instalación, cuando vaya a compartir las carpetas vía NFS, vagrant te pedirá el password de tu usuario con permisos sudo.

vagrant@precise64: ~_098

Si te quieres ahorrar todo este proceso, puedes descargar directamente una máquina virtual edX preconfigurada con Vagrant vía Torrent.

Tras ello, podrás lanzar la máquina usando el siguiente comando:

Conectar con Devstack vía SSH

Ok, ya está instalado Devstack. ¿Ahora qué? Lo primero será lanzar el LMS y el CMS. Para ello, nos conectaremos vía ssh con la máquina virtual que acabamos de lanzar. ¿Cómo? Usando vagrant:

¿Fácil, no? Pues sí… vagrant es una maravilla 🙂

Ahora tendremos que cargar algunas variables de entorno. El usuario edxapp las tiene configuradas en sus
ficheros de inicio de sesión, así que vamos a decirle a Devstack que queremos trabajar como si fuéramos edxapp:

Además, este usuario tiene su HOME en /edx/app/edxapp/edx-platform (la carpeta raíz de la plataforma edX)
por lo que estaremos ahí situados al lanzar el comando anterior.

Bien, sin más dilación, hagamos una prueba rápida. Vamos a lanzar el LMS con el comando paver:

(la primera vez, le va a costar, porque estará actualizando/descargando los requerimientos para lanzar el LMS y compilando los recursos estáticos (css, js y demás). Si ya lanzaste alguna vez el LMS y no quieres actualizar recursos/requerimientos, puedes hacer uso de la opción –fast  (paver devstack –fast lms).

¡Listo! Abrimos un navegador (en la máquina física) y tecleamos: http://localhost:8000/. Deberíamos ver el LMS tal y como indico en la imagen adjunta.

| edX - Google Chrome_099

 

 

Para lanzar el CMS (Studio), procederemos igual:

El CMS se abre en el puerto 8001, así que, abrimos un navegador (en la máquina física) y tecleamos: http://localhost:8001/. Si todo va bien, veremos algo como lo de la figura 2.

Welcome | edX Studio - Google Chrome_100

Devstack tiene varias cuentas de usuario creadas por defecto. Para nuestras pruebas, puedes conectarte como profesor usando el login staff@example.com (pass: edx) y como alumno usando el login verified@example.com (pass:edx).

En el siguiente post veremos cómo lanzar los foros y cómo configurar edX para poder crear nuevas cuentas de usuario.

6 comentarios en Introducción a Open edX (III). Devstack

Resize de volúmenes en LVM 1 abril, 2014

Tenemos un sistema de discos LVM con las siguientes “particiones”:

Si nos fijamos, el volumen lógico (lv) asignado a / está al 82% y sólo tiene 8.6GB libres. Por otro lado, el LV /home tiene GB de sobra (288GB libres, con sólo un 24% de utilización).

Vamos a recortar un poco (100GB) de /home para “estirar”  / .

Siempre como root, desmontar el volumen,  revisar posibles errores, y reducir tanto el sistema de archivos (ext4) como el propio volumen. Estas dos últimas operaciones se pueden hacer de un plumazo con la opción -r de lvreduce.

Ahora que tenemos 100GB disponibles, los usaremos para aumentar la “partición” /.
Asegurarse de que está montado el volumen (sí, ¡montado!) y le damos caña:

 

 

 

1 comentario en Resize de volúmenes en LVM

¿Quién lanzó esta ventana? 24 octubre, 2013

Hautapena_081Problema: una aplicación ha lanzado una ventana en tu escritorio, pero no sabes exactamente qué aplicación es “la culpable”.

Solución: desde una terminal, lanzamos el comando

Nos dará un ID de ventana. Por ejemplo, en mi caso, el 0x3e00004.

Pedimos ahora las propiedades de ese ID y, más en concreto, el identificador del proceso al que pertenece:

Bien, sólo nos queda pedir una lista de procesos y filtrar por el PID que acabamos de obtener:

Ajá! update-notifier es el culpable…

4 comentarios en ¿Quién lanzó esta ventana?
Categorias: diariolinux SysAdmin

Instalar Ubuntu 13.04 en iMac 27″ 6 septiembre, 2013

Un apunte rápido, porque ha sido coser y cantar, a diferencia del martirio por el que tuvimos que pasar en 2010 y que dejamos documentado. Captura de pantalla 2013-09-06 a la(s) 16.13.39Realmente lo único que he necesitado ha sido la versión AMD64 de Ubuntu 13.04 (la vez anterior tuve que descargar explícitamente la versión “alternate”, esta vez ha bastado con la versión desktop tradicional).

Sí ha sido necesario, al igual que la vez anterior, instalar el gestor de arranque rEFIt (no vale sólo con GRUB, o yo no he sido capaz). Parece que rEFIt está obsoleto y que ahora se recomienda rEFInd, aunque a mí no me ha dado ninguna guerra (al instalarlo, la primera vez no te saldrá el menú de rEFIt, tendrás que volver a arrancar para verlo).

El reparticionado del disco lo hice con el editor de disco de MacOSX. Sin problemas (reparticionando en caliente, sin desmontar la unidad… daba un poco de miedo, pero al no recibir ningún warning por intentarlo, supuse que era viable).

En la instalación, en modo gráfico, he seleccionado la opción de descarga de actualizaciones y la opción de activar drivers privativos. Nada más, Ubuntu 13.04 se ha instalado rápidamente en la partición que le corresponde y rEFIt me permite entrar sin problemas en MacOSX o Ubuntu (a través de GRUB).

Hay un fallo que queda por corregir: al apagar Ubuntu el iMac se queda colgado (no se llega a apagar). Para corregirlo:

y sustituimos la línea GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash” por GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash reboot=pci”

(tal y como explicamos en el anterior post relacionado)

Nota: que a mí me haya funcionado no quiere decir que en tu iMac también lo haga. Así que, ya sabes, antes de tocar particiones, recuerda que las copias de seguridad son tus amigas 😉

No hay comentarios en Instalar Ubuntu 13.04 en iMac 27″