Continuando con la segunda parte de lo expresado con anterioridad aquí escribiré un poco acerca del proceso de instalación del sistema operativo base y del setup utilizado para Xen.

Hardware

El equipo que utilizamos no es nada fuera de lo común. El factor más importante que contemplamos fue que fuera soportado al 100% por Linux y que tuviera una buena cantidad de memoria. El presupuesto no era muy amplio, asi que optamos por un equipo bastante común provisto con 2 Gbytes de memoria Ram, un procesador 3.x ghz con soporte para Hyperthreading, y dos discos SATA de 80 Gbytes (más alguna cosita más) (ah, una sola NIC).

Software: el Debian de la gente

Como distribución elegimos Debian. Más que nada por su estabilidad y simpleza a la hora de su administración. No voy a describir como instalarlo en detalle, sino sólo algunos pasos importantes (al menos a mi criterio ;) ):

  • Sistema de archivos: Como primera experiencia optamos por ext3, aunque les voy a ser sincero, me quedé con las ganas de poner reiserfs, que tengo entendido que se desempeña muy rápido con archivos pequeños, tal cual es el caso de los .rb/rhtml. Si alguno tiene experiencia en producción con reiserfs, por favor, me encantaría escuchar comentarios.
  • Los filesystems base los armamos de la siguiente manera:
    • Una primera capa para el espejado de los volúmenes. La configuración fue muy simple a través de la interfase gráfica que proveyó Debian. Básicamente creamos dos grupos de dos particiones cada uno, y los agrupamos con las herramientas nativas que provee Linux para la creación de volúmenes RAID-0/1/5. Quedó algo así:
tyler:/etc# mdadm  /dev/md0
/dev/md0: 3.72GiB raid1 2 devices, 0 spares.
tyler:/etc# mdadm  /dev/md1
/dev/md1: 69.85GiB raid1 2 devices, 0 spares.
  • Fuera de toda esta distribución, al mismo nivel, crear una partición para el swap en cada disco.
  • La segunda etapa contemplo en principio la creación (sobre el primer RAID1, md0) de las particiones para Tyler (el OS base) y luego la creación un gran de un gran physical volumen (LVM) sobre el segundo (md1) para ir alocando el espacio necesario para cada Virtual Machine que menejemos con Xen.
tyler:/etc# pvdisplay
  --- Physical volume ---
  PV Name               /dev/md1
  VG Name               VG01
  PV Size               69.84 GB / not usable 0   
  Allocatable           yes 
  PE Size (KByte)       4096
  Total PE              17880
  Free PE               4440
  Allocated PE          13440
  PV UUID               0hK2g6-XhoS-F73q-ySkT-2kKd-kt5K-NgMYRh
  • Es importante destacar que no voy a hacer recomendaciones con respecto al tamaño de cada partición/volumen. En la web hay un montón para leer. Les recomiendo la guía de instalación de Gentoo

En fin, continuamos la instalación, elegimos un montón de paquetes (los mínimos necesarios) y reiniciamos. Hasta ahí todo bien, un simple linux sin ningún servicio (aún). Solamente podriamos decir que tiene un partition layout un poco más complejo de lo habitual, pero nada realmente sofisticado.

Mañana lo completo con la parte de XEN. Buenas noches.

Recursos

  • XEN
    • http://www.xensource.com/
  • LVM
    • http://tldp.org/HOWTO/LVM-HOWTO/
    • http://www.gagme.com/greg/linux/raid-lvm.php

Hace algo más de dos meses decidimos comprar un buen equipo para dejar de usar hosting compartido (que le daba servicio a blog.onrails.com.ar y a varios sitios más), ya que nos estaba trayendo muchos problemas de estabilidad y performance, y ni hablar de algunos temas de compatibilidad. Por esta razón comenzamos a pensar cual era la mejor alternativa a la plataforma existente.

El stack

Opciones para correr aplicaciones Rails hay miles (bueh, no se si tanto). Nuestra idea no era proveer hosting, sino hacernos las cosas simples y no tener un techo de crecimiento demasiado establecido. Con esas premisas en mente optamos por la siguiente configuración:

  • Sistema Operativo: Debian Linux (etch)
  • FrontEnd: Nginx (el ruso que lo hizo la tiene atada)
  • AppServer: Mongrel (con su amigo mongrel_cluster)
  • DbServer: MySQL (confiable, performante, simple y amigable)

¿Por qué virtualizar?

El hardware que compramos no fue increiblemente de ultima generación (Pentium IV-HT), y había dos opciones (a la vista por lo menos): instalar todos los servicios en el mismo equipo o invertir en más servidores para poder separarlos y no tener problemas de escalabilidad/isolación/seguridad. Algo había leido sobre Xen, pero nunca me había metido lo suficiente (al menos sobre linux), entonces hablamos con Pedro y decidimos que la movida más interesante era usar xen para generar máquinas virtuales en un sólo servidor y así poder atacar los problemas enumerados anteriormente. Xen básicamente te permite ejecutar varios sistemas operativos en un mismo equipo, permitiendole al host (Dom0) administrar los recursos de cada uno de los guests (DomU). No requiere nada sofisticado y no consume demasiados recursos. No voy a decir que sea simple, pero no es rocket science. No voy a ahondar en detalles porque no soy un especialista en Paravirtualización y no quiero hablar sin saber, pero de todas las tecnologías de virtualización que analicé esta fue la que mejor se adaptó a nuestras necesidades actuales y la que menor impacto tenía a nivel performance. Solo se lleva un 3% de la CPU.

¿Cómo seguimos?

En los siguientes artículos de la serie iré relatando cada uno de los procesos de configuración de los jugadores de este partido. Todos tuvieron sus cositas y vale la pena comentarlo (creo yo). ;) Ojo, no va a ser una guía exhaustiva, sino una lista de tips a tener en cuenta al embarcarse en esta tarea.

Capítulos de la serie

  • Xen (parte 2/4)
  • Nginx & Mongrel (parte 3/4)
  • MySQL (parte 4/4)

Recursos:

  • Xen en la wiki
  • Nginx (de rusia, increiblemente rápido)
  • Mongrel (desarrollado por Zed Shaw)
  • Mysql (no pongo el link, si no lo saben es para que se dediquen a otra cosa)

Nos mudamos

March 29th, 2007

Finalmente comenzamos el proceso de migración de todas las aplicaciones que estaban en nuestro ex provider a los nuevos servidores virtualizados.

A la brevedad postearé (si, es un nuevo verbo) un doc acerca del proceso completo de instalación, configuración y migración de las aplicaciones, pero mientras:

Rails Stack

  • Antes – Linux/apache/mongrel/mysql
  • Ahora – Xen/nginx/mongrel/mysql (en otro virtual server diferente)

Por lo pronto Blogs on Typo es lo primero (visible) que se ha migrado y luce bien. Si llegan a encontrar algún problema, por favor, no duden en reportarlos.

Saludos, y good rails para todos…

Move on up - Self hosting!

February 25th, 2007

Despues de muchos problemas con nuestro actual hosting, hemos decidido poner nuestro propio server on-line. Contratamos un housing y a la brevedad estaremos en un server mas estable con una arquitectura virtualizada con xen por nosotros mismos. Detallaremos mas adelante.

Cuando comencé a buscar un mi propio Servidor Privado Virtual (VPS) para instalar mis primeros sitios Ruby on Rails me topé inevitablemente con los neozelandeses de RimuHosting. Sin embargo, desgraciadamente no aceptaron como opción mi oferta de pagarles con una transferencia electrónica de Wester Union (pues no tengo tarjeta de crédito).

A pesar de eso, nunca dejé de olvidarlos por su excelente material de soporte y referencia. Hoy, aunque encontré mi VPS en otro lugar mucho más cercano, recibo como un verdadero signo de su creciente demanda el anuncio de que RimuHosting ofrece un stack completo Ruby on Rails como opción en sus planes.

Pero hay más, ofrecen todo el how-to necesario para hacerlo funcionar, incluyendo un utilísimo script bash para instalar automáticamente todo el stack (Ruby, Rails, FastCGI, Lighttpd, y más) en Debian y Red Hat. Obviamente, deben usarlo bajo su propio riesgo y responsabilidad, pero es un muy buen primer intento por automatizar todo este largo proceso. ¡Esperemos ver cosas como éstas más seguido!