Python 2.7 en CentOS 6 con mod_wsgi

python2En este post, veremos cómo instalar una nueva versión de Python (la 2.7.5) manteniendo la versión del sistema (2.6.6 en CentOS 6), forzando al mod_wsgi de Apache a usar la nueva versión en lugar de la de sistema. La idea es no tocar la versión de sistema, puesto que si cambiamos dicha versión, seguramente nos encontraremos más adelante con problema de dependencias en prácticamente cualquier actualización o instalación que queramos hacer con yum.

De esta manera, lo que haríamos sería hacer una segunda instalación de la nueva versión de Python, que no comprometiera la instalación original. En el ejemplo, estamos usando un servidor CentOS 6.4 que por defecto, viene con Python 2.6.6, con un servidor Apache con mod_wsgi 3.2. Lo que queremos, es instalar Python 2.7.5 sin comprometer el Python del sistema, instalar los módulos de Python necesarios para nuestra aplicación, pero únicamente para la nueva versión 2.7.5, y finalmente, reconfigurar mod_wsgi para usar la nueva versión.

Para ello, podríamos seguir los pasos descritos a continuación:

Entorno

Comprobamos los detalles del sistema operativo:

[root@MyServer]#cat /etc/redhat-release
CentOS release 6.4 (Final)

Verificamos la versión de python del sistema:

[root@MyServer]# python --version
Python 2.6.6

Continuar leyendo «Python 2.7 en CentOS 6 con mod_wsgi»

Balanceador de carga MySQL con HAProxy

balanceadorHace unas semanas, vimos cómo configurar un balanceador de carga con la aplicación de balanceo en entornos Red Hat por antonomasia: LVS, (y Piranha). LVS es la aplicación nativa de balanceo, muy bien documentada en la documentación oficial de Red Hat, e incluso vendida como balanceador en forma de addons.

Este tipo de configuraciones, funcionan muy bien, pero tienen una serie de requisitos, pues se ha de reconfigurar la red de los servidores implicados para compartir una IP Virtual, o para cambiar el default gateway (en el caso de LVS-NAT). Ésto no siempre nos es posible hacerlo, puesto que quizá estemos trabajando con un proveedor de servidores dedicados, como en mi caso Hetzner, que no permite hacer cambios en las interfaces de red que vienen configuradas en el equipo, y que además parece que no lleva bien lo de las IPs compartidas.

En cualquier caso, hay otras soluciones de balanceo, como HA Proxy, que en el siguiente ejemplo usaré para balancear las peticiones MySQL entre dos servidores con IPs públicas situados bajo el mismo switch, en Hetzner. Todos los servidores son CentOS 6.3 x64.

Continuar leyendo «Balanceador de carga MySQL con HAProxy»

Duplicar un slave MySQL con Rsync

Fotor0427201142Ya hemos hablado de cómo crear un entorno con varios slaves mediante XtraBackup, pero también existe la posibildad (mucho más drástica) de copiar los datos de un slave a otro, mediante rsync. Normalmente, siempre usaremos la opción de XtraBackup, pues con XtraBackup se puede hacer un backup en caliente (sin necesidad de parar MySQL) y por tanto no se necesita ninguna interrupción en el servicio.

Sin embargo, también existe la opción de usar rsync, que en mi caso, he testeado bajo en siguiente entorno:

  • Slave1 (origen): CentOS 6.3 con Percona 5.5 Release rel29.3, Revision 388
  • Slave2 (destino): CentOS 6.3 con Percona 5.5 Release rel29.4, Revision 401

NOTA: Sí, he hecho el test con dos versiones ligeramente diferentes de Percona, ya que estoy en un entorno de test.

En mi caso, he seguido el siguiente proceso para realizar la copia:

Continuar leyendo «Duplicar un slave MySQL con Rsync»

Guardar la hora en el history de Linux

history linux

Algo que nos puede venir muy bien, es modificar el history de linux para:

  1. Almacenar la fecha y la hora en la que se ejecutaron los comandos
  2. Aumentar el límite por defecto del history para almacenar más comandos

En entornos RedHat (he hecho la prueba en un CentOS 6.3), en lugar de modificar el .bashrc de cada usuario, se puede modifiar el script de bash global, para que afecte a todos los usuarios del sistema. Sin embargo, esta modificación no se debe hacer directamente en  /etc/bashrc, si no que es preferible crearse un fichero donde ir añadiendo las modificaciones globales, sin tocar los archivos de sistema.

Continuar leyendo «Guardar la hora en el history de Linux»

RAID1 vs RAID0 en replicación MySQL

MySQL RAIDHoy vamos a intentar mejorar la replicación de un slave MySQL, cuyo master recibe demasiadas modificaciones como para que el slave sea capaz de seguirle el ritmo. El problema que tienen los slaves, es que con versiones anteriores a MySQL 5.6, la replicación usa un único thread, y por tanto, las sentencias a replicar se ejecutan de forma secuencial. En realidad, si usamos una única base de datos, con MySQL 5.6 y su replicación con múltiples threads, no ganamos nada, puesto que MySQL 5.6 aporta un thread por base de datos.

El testeo se ha realizado con servidores CentOS 6.3 a 64 bits, con dos discos SATA 7200rpm.

Identificando el problema

En cualquier caso, el primer paso es identificar el problema, lo cual de forma natural haríamos con un «top». A continuación veremos como el único proceso del server consumiendo algo de recursos es el proceso mysqld, que a pesar de eso, no llega ni mucho menos a provocar un problema de CPU ni de RAM. Sin embargo, si que vemos un 9.6% de %iowait lo cual indica que podríamos tener ahí el cuello de botella.

[root@slave]$ top
top – 12:28:38 up 23:10,  1 user,  load average: 2.76, 2.72, 2.69
Tasks: 211 total,   3 running, 208 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.7%us,  1.6%sy,  0.0%ni, 85.8%id,  9.6%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:  32776052k total, 32519856k used,   256196k free,   156192k buffers
Swap: 16777136k total,   122344k used, 16654792k free,  9163420k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
4450 mysql     20   0 29.0g  21g 4628 S 37.7 68.0 394:26.55 mysqld 
584 root      20   0     0    0    0 S  6.0  0.0  70:17.46 md4_raid1

Continuar leyendo «RAID1 vs RAID0 en replicación MySQL»

nf_conntrack: table full, dropping packet

NetworkingEsta semana me he encontrado con un servidor CentOS con varios mensajes de error como el que sigue, en su fichero de logs messages:

Mar 14 18:55:48 localhost kernel: nf_conntrack: table full, dropping packet.

Ya había visto antes este error, que se solucionaría de forma radical, reiniciando el server, pero por suerte un compañero ya había hecho algo de investigación sobre este mismo problema.

Para empezar, ¿a qué se refiere este problema? Aquí lo explican bastante bien. El Connection Tracking le permite al kernel mantener un seguimiento de todas las conexiones (o sesiones) abiertas con el servidor, y poder así relacionar los paquetes con su correspondiente conexión. Así, Connection Tracking puede entender que dos o más conexiones distintas están «relacionadas». Por ejemplo, cuando se abre una sesión FTP, primero se abre una conexión contra el puerto 21 para iniciar la sesión FTP, y después se abre otra conexión contra el 20 o contra un puerto aleatorio en función de como tengamos configurado el servidor FTP. En cualquier caso, el Connection Tracking se encargaría de marcar ambas conexiones como relacionadas (RELATED).

Continuar leyendo «nf_conntrack: table full, dropping packet»

Downgrade o cambio de versión de PHP

PHP choiceInteresante post, éste, que explica cómo cambiar la versión de PHP con un ejemplo real, ya sea, haciendo un downgrade de la versión de PHP o instalando a una versión concreta. Este ejemplo está ejecutando en una máquina con CentOS 6.3 64 bits, con el repositorio de remi instalado.

Primero, podemos ver qué versión tenemos.

# php -v
PHP 5.4.11 (cli) (built: Jan 16 2013 16:51:38)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

Con yum, podemos, a continuación, ver qué versiones tenemos disponibles en los diferentes repositorios.

# yum –showduplicates list php
Available Packages
php.x86_64               5.3.3-3.el6_2.8                                                   base
php.x86_64               5.3.3-14.el6_3                                                    updates
php.x86_64               5.4.10-1.el6.remi                                                remi
php.x86_64               5.4.11-1.el6.remi                                                remi

Continuar leyendo «Downgrade o cambio de versión de PHP»

Instalación y configuración de Percona

Percona MySQL ServerPercona es un conocido fork de MySQL que promete aumentar rendimiento y fiabilidad, además de añadir funcionalidades adicionales interesantísimas.

Tenemos varias opciones de instalación de Percona, según nuestras necesidades, pero yo he probado a instalar Percona Server, para montar replicación tipo Master-Slave. Para ello he usado un Centos 6.3 i386, como PC de tests, donde le he instalado un Percona Server 5.5. Dejaré Percona XtraDB-Cluster para otra ocasión.

Requisitos de Percona Server

Desde ya, recomendaría deshabilitar selinux (o configurarlo convenientemente) antes de iniciar este proceso. También deberemos asegurarnos de que la máquina pueda resolver su hostname, revisando el fichero de hosts.

Continuar leyendo «Instalación y configuración de Percona»

Balanceador de carga con LVS y Piranha

cloud computingEn este artículo veremos cómo configurar un balanceador de carga con LVS y Piranha, en un servidor CentOS, con un único router LVS. Hay muchos artículos por Internet que explican cómo hacerlo con 2 routers, para conseguir así tener alta disponibilidad en el balanceador, pero no siempre se disponen de dos máquinas para conseguir la alta disponibilidad. Como añadido, el servicio a balancear será MySQL, no Apache como suele ser habitual.

Para el test, los sevidores tienen las siguientes características, además de selinux deshabilitado e iptables configurado:

Hostname: balancer
IP: (eth0) 192.168.2.228. Default gw: 192.168.2.1

Hostname: mysql1
IP: (eth0) 192.168.2.241. Default gw: 192.168.2.1

Hostname: mysql2
IP: (eth1) 192.168.2.242. Default gw: 192.168.2.1

Continuar leyendo «Balanceador de carga con LVS y Piranha»

Yum rollback, undo o deshacer

Yum rollbackEn muchas ocasiones, hemos de actualizar o instalar nuevos paquetes en servidores críticos, que difícilmente podemos asegurar que no afectarán a nuestros servicios. Es posible que la nueva versión de PHP tenga alguna incompatibilidad con el código que usa la versión añeja que tiene el servidor, o que una nueva versión de openssh venga con un 0day.

¿Cómo podemos deshacer lo que acabamos de estropear con yum?

Afortunadamente, las últimas versiones de yum, vienen con una nueva funcionalidad que permite ver el histórico de ejecuciones, y lo más importante, volver atrás. Aquí lo explican en la documentación oficial.

Continuar leyendo «Yum rollback, undo o deshacer»