Skip to content
nov 24 11

Instalar un ndb cluster de mysql en Ubuntu

by Gonzalo

A medida que nuestros servicios crecen (buena señal ;) ) veremos que uno de los primeros servicios con el que tenemos problemas de redimensionamiento es con las BBDD MySQL.
A mucha gente no se le ocurre otra solución que poner más y más RAM y CPU’s. Aunque llega un momento que obviamente ya no podemos poner más.
En estos casos la solución pasa por montar un cluster de MySQL, que nos permite redimensionar introduciendo nuevos nodos a medida que necesitamos más recursos.
Este cluster obviamente también tiene sus limitaciones y llegados a un punto en el que también se nos quede corto y necesitemos una BBDD para mover un mounstruo tipo Facebook o algo muy grande, creo que ya os prodiais permitir pagar a un experto en el tema o simplemente no necesitaríais estar leyendo esto.

Para hacernos una idea de que va la cosa podemos empezar por leer:
http://dev.mysql.com/doc/refman/5.0/es/ndbcluster.html
y
http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-replication.html

Como véis hay un MGM o Management node (que ejecuta el demonio “ndb_mgmd”) y los Nodos (ejecutando el servicio ndbd).
Después de un tiempo leyendo y habiendo aprendido los conceptos generales, empezamos:
read more…

nov 23 11

Proteger Asterisk de ataques con fail2ban

by Gonzalo

Si tienes un Asterisk abierto hacia afuera por tener un troncal o extensiones SIP que se logueen desde fuera, estarás acostumbrado a recibir ataques de intentos de logueo por fuerza bruta de este tipo (como siempre desde China):

...
'"9994"' failed for 'XXX.XXX.XXX.XXX' - No matching peer found
[Nov 10 15:51:37] NOTICE[2979]: chan_sip.c:XXXXX handle_request_register: Registration from '"9995"' failed for 'XXX.XXX.XXX.XXX' - No matching peer found
[Nov 10 15:51:37] NOTICE[2979]: chan_sip.c:XXXXX handle_request_register: Registration from '"9996"' failed for 'XXX.XXX.XXX.XXX' - No matching peer found
[Nov 10 15:51:37] NOTICE[2979]: chan_sip.c:XXXXX handle_request_register: Registration from '"9997"' failed for 'XXX.XXX.XXX.XXX' - No matching peer found
[Nov 10 15:51:37] NOTICE[2979]: chan_sip.c:XXXXX handle_request_register: Registration from '"9998"' failed for 'XXX.XXX.XXX.XXX' - No matching peer found
[Nov 10 15:51:37] NOTICE[2979]: chan_sip.c:XXXXX handle_request_register: Registration from '"9999"' failed for 'XXX.XXX.XXX.XXX' - No matching peer found
[Nov 10 15:51:37] NOTICE[2979]: chan_sip.c:XXXXX handle_request_register: Registration from '"10000"' failed for 'XXX.XXX.XXX.XXX' - No matching peer found

Es por eso que hay que tener cuidado de tener bien configurado el dialplan y las extensiones para no llevarte una sorpresita algún día de una factura de miles de euros.

Para prevenir estos ataques podemos usar fail2ban para que cuando detecte un cierto nº de registros erróneos banee esa ip.
read more…

nov 22 11

Monitorizar servidores con Munin

by Gonzalo

En el siguiente post voy a hablar de como monitorizar nuestros servidores con Munin.
Munin nos muestra gráficos con estadísticas de nuestro servidor (CPU, load average, RAM usada, tráfico de red, etc).
Monit nos muestra la disponibilidad y el uso de diferentes servicios (Apache, MySQL, Postfix, etc) y acciones a tomar bajo determinadas circustancias.
La conbinación de los dos nos permite detectar en nuestros servidores cuando necesitamos dimensionar o que acciones debemos tomar cuando ciertos servicios no funcionan o rinden como se esperaba.
Aunque en este post solo voy a explicar munin y monit quizás lo deje para otro post.
read more…

nov 22 11

Como cortar una variable en el dialplan de Asterisk

by Gonzalo

Me preguntan como cortar una variable en el dialplan de Asterisk para hacer algo tan sencillo como que si el número es un fijo nacional (de España) y empieza por 9 lo mande por un troncal y si es un móvil que empieza por 6 lo mande por otro troncal (enlaces gsm).
Esto en Asterisk es muy fácil.
Supongamos que previamente en el dialplan hemos definido la variable de número a llamar en la variable TELF, like así:

exten => [69]XXXXXXXX,n,Set(TELF=${EXTEN})

Luego podríamos quedarnos con el primer número de la variable $TELF y decidir si sale por un lado o por otro:

exten => s,1,NoOp(Definimos si es una llamada a la exten SIP/moviles o SIP/fijos)
   same => n,ExecIf($[${TELF:0:1} = 9]?Set(SIPTRUNK=SIP/fijos):Set(SIPTRUNK=SIP/moviles))
   same => n,Dial(${SIPTRUNK}/${TELF},20)

Explico:

  • same => – es la nueva forma (mucho más cómoda) de especificar extensiones en el dialplan desde la 1.6
  • ${TELF:0:1} – tómalo como un array. Empezando por el primer elemento de la variable (0) cogen el siguiente número de elementos (solo 1 en este caso). Osea el primer número. Si pusiésemos ${TELF:0:3}, serían los tres primeros (por ej el prefijo 981) y si pusiésemos ${TELF:-9:1} sería el primer número también, ya que empezaría por el final hasta el 9º elemento y cogería a partir de ahí el primero.
  • ExecIf($[${TELF:0:1} = 9] – Si el primer número de la variable $TELF es 0 =9 ejecuta…
  • Set(SIPTRUNK=SIP/fijos):Set(SIPTRUNK=SIP/moviles) – …ejecuta que definas la variable SIPTRUNK=SIP/fijos o si no es = 9 que la variable SIPTRUNK=SIP/móviles
  • Dial(${SIPTRUNK}/${TELF},20) – Haz la llamada por el troncal adecuado
  • Fácil, no?

    oct 19 11

    Instalar un guest windows en KVM con virtio drivers

    by Gonzalo

    Los controladores para-virtualizados aumentan el rendimiento de los huéspedes totalmente para-
    virtualizados. Con los controladores para-virtualizados la latencia de E/S disminuye y el rendimiento
    aumenta los niveles a casi bare-metal. Es recomendable utilizar controladores para-virtualizados para
    huéspedes completamente virtualizados ejecutando tareas pesadas de E/S y aplicaciones como las BBDD.
    Estos son cargados automáticamente en distros nuevas de Ubuntu, RHEL y CentOS, así como en teoría cualquier distro con un kernel superior a 2.6.27. Así que no habría que hacer nada para poder usar aplicaciones con mucha I/O como las BBDD sobre Ubuntu, tan solo indicar con el parametro ‘os-variant’ la distro que usamos o en su defecto (si no la encontramos), ‘virtio26′
    Para usar BBDD en windows hay que instalar estos drivers que mejoran en mucho la velocidad la la red y escritura a disco.
    Las versiones de windows que soportan estos drivers son:
    • Windows XP (solo 32 bits)
    • Windows Server 2003 (versiones de 32 y de 64 bits)
    • Windows Server 2008 (versiones de 32 y de 64 bits)
    • Windows Vista/7 (versiones de 32 y de 64 bits)

    La última iso de estos drivers se puede encontrar aqui:

    http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/

    En concreto me bajo las versiones:
    - virtio-win-1.1.16.iso
    - virtio-win-1.1.16.vfd

    Para hacer una instalación de Windows con estos drivers por ej en un Windows XP haremos así:

    virt-install -c qemu:///system --virt-type kvm --name winxp --vcpus 1 --ram 1024 --os-variant winxp \
    --disk /var/lib/libvirt/images/guests/winxp.img,size=30,sparse=false,bus=virtio \
    --disk /var/lib/libvirt/images/isos/windows/virtio-win-1.1.16.vfd,device=floppy \
    --cdrom /var/lib/libvirt/images/isos/windows/virtio-win-1.1.16.iso \
    --cdrom /var/lib//libvirt/images/isos/windows/winxp.iso \
    --network bridge:br0,model=virtio \
    --vnc
    

    Y en la instalación nos instalará estos drivers.

    Mas fuentes sobre el tema:
    http://cloud.ubuntu.com/2011/03/fast-win7-kvm-virtiodisk-net-install/
    http://www.todosconsoftwarelibre.es/instalacion-de-windows-7-sobre-kvm-en-ubuntu-server-10-04-1/
    http://bderzhavets.wordpress.com/2011/01/20/virtio-install-windows-7-kvm-x64x86-on-ubuntu-10-04-1-server-via-dnjl-ppa/
    http://blog.allanglesit.com/2011/03/kvm-guests-install-virtio-drivers-for-windows-guests/
    http://kahdev.wordpress.com/2011/05/30/using-virtio-drivers-in-a-kvm-windows-guest-vm/