Upload
guestae6a05
View
1.158
Download
0
Embed Size (px)
DESCRIPTION
Transparencias de la charla Rails Against The Machine dada en la Conferencia Rails Hispana '08
Citation preview
Rails Against the Machine
Jacobo Garcia y Christos ZisopoulosThe Cocktail
Quienes Somos
Un poco de historia
• FastCGI + Lighttpd, Apache + Mongrel
• Múltiples sites compatiendo CPU, RAM y Disco.
• Problema en una maquina = Problema en varios sites.
• Recuperación = Reinstalación de todo.
Tomando decisiones
• ¿Como solucionar estos problemas con recursos (económicos, humanos) limitados?
La Solución es la Virtualización
• Aislamos parcialmente los problemas en cada site.
• La recuperación de un site es más rápida.
• Escalamos recursos “on demand”.
• Nos adaptamos facilmente a distintos tamaños de site.
Estandarizar
• Hardware.
• Systema operativo.
• Plataforma de virtualización.
• Pila de Rails.
Opciones de Virtualización
• Zones en Solaris: OpenSolaris aún esta bastante verde.
• VMWare: Es caro y no es libre.
• XEN: Nuestra elección.
¿ Porque XEN ?
• Muy bien integrado en Debian.
• Conocemos bastante bien Debian.
• Tenemos soporte de la comunidad XEN.
• Libre y gratuito.
La Arquitectura
El Front
• Primera capa de la arquitectura.
• Distribuye peticiones y realiza balanceo de carga.
• Proxy inverso: Nginx.
Tipos de Aplicación
• Sites pequeños / medianos donde no es imprescindible tener un 100% de uptime.
• Grandes sites con necesidades de redundancia, balanceo de carga y tiempos de recuperación mínimos en caso de caída.
All-in-One
• Web/App/Db en una instancia virtual.
• Para sites pequeños / medianos con poca carga.
• Backups de la instancia virtual con dd.
App / Web
• La base de datos es un servicio.
• Los ficheros también lo son.
• Contenido dinámico (app) y estático (web) servido desde la misma máquina.
La Pila de RailsNginx
Memcached
Monit
Munin / SNMP / NTP / Postfix / Logrotate / NFS Client / Subversion
Ruby / Rubyems (a mano)
Rails 1.2.5 / Mongrel / Mongrel Cluster
The Mighty Shaker 1.2
ImageMagick / Rmagick
MySQL bindings (!!!)
otras gemas...
Los Servicios
• Bases de Datos.
• Almacenamiento Compartido.
• Memcached.
• Monitorización.
Bases de Datos
• Servicio utilizado en los sites grandes.
• Clusters Maestro / Esclavo.
• La selección de servidor la realiza la aplicación.
Almacenamiento
• Mounts por NFS.
• Utilizamos Duplicity para los backups.
Memcached
• Sesiones.
• Fragmentos.
Monitorización
• Munin
• Nagios / SNMP
• Syslog
Números
• Cada instancia de XEN tiene asignado 2 GB de RAM y 1 Core de vCPU.
• Tenemos 8 Mongrels como máximo en cada app server.
• Nginx en La Coctelera consume 10 Mb de RAM y 0.1% de CPU.
Instalación de XEN
• Instalar Host OS (a.k.a dom0)
• Instalar XEN y XEN kernels
• Crear particiones para los hosted domains (domU)
• Crear cada hosted domain
Debian 4 (Etch)
Dom0 particioning
partición tamaño (de 160GB) mount fstype LVM
#1 (primary) 3GB / ext3 no
#2(logical) 1GB swap swap no
#3(logical) 156GB si
Xen 3 y amigos
apt-get install ssh debootstrap
apt-get install iproute bridge-utils libcurl3-dev libssl0.9.7
apt-get install lvm2
apt-get install xen-linux-system-2.6.18-5-xen-686 libc6-xen
apt-get install xen-tools python python-twisted
Crear grupo virtual para LVM
vgcreate xen-vg /dev/sda3
Configurar XENEditar /etc/xen/xend-config.sxp
(dom0-min-mem 0)
(network-script network-bridge-two-interfaces)
Interfaces de Red Editamos /etc/xen/xend-config.sxp
• Reemplazamos: (network-script network-dummy) con: (network-script network-bridge-two-interfaces)
• Creamos un script en /etc/xen/scripts/ con:
#! /bin/sh
#exec 2>/tmp/network-bridge-both.out
#set -x
dir=$(dirname "$0")
"$dir/network-bridge" "$@" vifnum=0 netdev=eth0 bridge=xenbr0
"$dir/network-bridge" "$@" vifnum=1 netdev=eth1 bridge=xenbr1
Configurar XenToolsEditar /etc/xen-tools/
gateway = 89.17.205.1netmask = 255.255.255.0
kernel = /boot/vmlinuz-2.6.16-2-xen-686initrd = /boot/initrd.img-2.6.16-2-xen-686
size = 3Gbmemory = 2048Mbswap = 1024Mb fs = ext3 dist = etch
Creación de una nueva máquina virtual
DomU particiones
mount tamaño fstype LVM
/ 3GB ext3 si
swap 1GB swap si
/var 30GB reiserfs si
Creacion de /var
lvcreate -L30G -n site1.com-var xen-vg
Crear la instancia
xen-create-image
--hostname=site1.com
--ip=89.17.205.185
--ide --force
Añadir el nuevo disco
disk = [ 'phy:xen-vg/site1.com-disk,sda1,w',
'xen-vg/site1.com-swap,sda2,w',
'xen-vg/site1.com-var,sda3,w' ]
vif = [ 'ip=89.17.205.185, bridge=xenbr0', 'ip=192.168.10.185, bridge=xenbr1' ]
Editar /etc/xen/site1.com.cfg
Capistrano
• Herramienta para automatización de tareas en múltiples máquinas.
• Funciona con “recetas” escritas en Ruby.
• Simple y potente.
Usos de Capistrano
• Despliegues de código.
• Migraciones en las bases de datos.
• Administración de demonios.
• Ejecución de comandos UNIX.
En múltiples máquinas simultáneamente.
Capistrano Fu: Subversion
• Usamos export en vez de subversion
set :checkout, "export"
• Para evitar autenticarse manualmente con subversion
set :svn_username, "deploy"
set :svn_password, "password"
Capistrano Fu: Hooks
• Extendiendo tareas con los hooks after y before
task :after_setup do
nfs_setup
end
task :before_update_code do
update_mirror
end
Capistrano Fu: Tareas para Servicios• Extendiendo tareas de capistrano para administrar servicios
task :after_deploy, :roles => [ :web ] do
sudo “/etc/init.d/apache2 restart”
run “sleep 5”
sudo “/etc/init.d/mongrel_cluster restart”
end
Capistrano Fu: Roles Específicos
• Asignando roles especiales a algunas máquinas
set :caucasiano, '192.168.10.140'
role :web, caucasiano, :nfs_server => true
task :nfs_setup, :roles => [:web], :only => { :nfs_server => true } do
sudo "mkdir -p /var/nfs_files"
sudo "mkdir -p /var/tmp_files"
sudo "mkdir -p /var/cache_files"
sudo "ln -nfs /var/nfs_files /var/myfiles"
end
El Fantástico cap shell
> cap shell
with app uptime
[192.168.10.184] 20:06:33 up 52 days, 3:08, 3 users, load average: 1.30, 0.86, 0.48
on caucasiano uname -a
[caucasiano] Linux caucasiano 2.6.18-5-xen-686 #1 SMP Thu Aug 30 06:00:04 UTC 2007 i686 GNU/Linux
En el radar
• GFS / KronosFS / iSCSI / AoE
• Event Driven Mongrel
• Master / Master replication
• MYSQLproxy
• Enomalism
• LDAP
• PXE boot