rails against the machine

41
Rails Against the Machine Jacobo Garcia y Christos Zisopoulos The Cocktail

Upload: guestae6a05

Post on 20-Jun-2015

1.158 views

Category:

Technology


0 download

DESCRIPTION

Transparencias de la charla Rails Against The Machine dada en la Conferencia Rails Hispana '08

TRANSCRIPT

Page 1: Rails Against The Machine

Rails Against the Machine

Jacobo Garcia y Christos ZisopoulosThe Cocktail

Page 2: Rails Against The Machine

Quienes Somos

Page 3: Rails Against The Machine

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.

Page 4: Rails Against The Machine

Tomando decisiones

• ¿Como solucionar estos problemas con recursos (económicos, humanos) limitados?

Page 5: Rails Against The Machine

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.

Page 6: Rails Against The Machine

Estandarizar

• Hardware.

• Systema operativo.

• Plataforma de virtualización.

• Pila de Rails.

Page 7: Rails Against The Machine

Opciones de Virtualización

• Zones en Solaris: OpenSolaris aún esta bastante verde.

• VMWare: Es caro y no es libre.

• XEN: Nuestra elección.

Page 8: Rails Against The Machine

¿ Porque XEN ?

• Muy bien integrado en Debian.

• Conocemos bastante bien Debian.

• Tenemos soporte de la comunidad XEN.

• Libre y gratuito.

Page 9: Rails Against The Machine

La Arquitectura

Page 10: Rails Against The Machine

El Front

• Primera capa de la arquitectura.

• Distribuye peticiones y realiza balanceo de carga.

• Proxy inverso: Nginx.

Page 11: Rails Against The Machine

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.

Page 12: Rails Against The Machine

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.

Page 13: Rails Against The Machine

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.

Page 14: Rails Against The Machine

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...

Page 15: Rails Against The Machine

Los Servicios

• Bases de Datos.

• Almacenamiento Compartido.

• Memcached.

• Monitorización.

Page 16: Rails Against The Machine

Bases de Datos

• Servicio utilizado en los sites grandes.

• Clusters Maestro / Esclavo.

• La selección de servidor la realiza la aplicación.

Page 17: Rails Against The Machine

Almacenamiento

• Mounts por NFS.

• Utilizamos Duplicity para los backups.

Page 18: Rails Against The Machine

Memcached

• Sesiones.

• Fragmentos.

Page 19: Rails Against The Machine

Monitorización

• Munin

• Nagios / SNMP

• Syslog

Page 20: Rails Against The Machine

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.

Page 21: Rails Against The Machine

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

Page 22: Rails Against The Machine

Debian 4 (Etch)

Page 23: Rails Against The Machine

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

Page 24: Rails Against The Machine

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

Page 25: Rails Against The Machine

Crear grupo virtual para LVM

vgcreate xen-vg /dev/sda3

Page 26: Rails Against The Machine

Configurar XENEditar /etc/xen/xend-config.sxp

(dom0-min-mem 0)

(network-script network-bridge-two-interfaces)

Page 27: Rails Against The Machine

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

Page 28: Rails Against The Machine

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

Page 29: Rails Against The Machine

Creación de una nueva máquina virtual

Page 30: Rails Against The Machine

DomU particiones

mount tamaño fstype LVM

/ 3GB ext3 si

swap 1GB swap si

/var 30GB reiserfs si

Page 31: Rails Against The Machine

Creacion de /var

lvcreate -L30G -n site1.com-var xen-vg

Page 32: Rails Against The Machine

Crear la instancia

xen-create-image

--hostname=site1.com

--ip=89.17.205.185

--ide --force

Page 33: Rails Against The Machine

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

Page 34: Rails Against The Machine

Capistrano

• Herramienta para automatización de tareas en múltiples máquinas.

• Funciona con “recetas” escritas en Ruby.

• Simple y potente.

Page 35: Rails Against The Machine

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.

Page 36: Rails Against The Machine

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"

Page 37: Rails Against The Machine

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

Page 38: Rails Against The Machine

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

Page 39: Rails Against The Machine

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

Page 40: Rails Against The Machine

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

Page 41: Rails Against The Machine

En el radar

• GFS / KronosFS / iSCSI / AoE

• Event Driven Mongrel

• Master / Master replication

• MYSQLproxy

• Enomalism

• LDAP

• PXE boot