Rails Against The Machine

1,369 views

Published on

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,369
On SlideShare
0
From Embeds
0
Number of Embeds
44
Actions
Shares
0
Downloads
37
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Rails Against The Machine

  1. 1. Rails Against the Machine Jacobo Garcia y Christos Zisopoulos The Cocktail
  2. 2. Quienes Somos
  3. 3. 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.
  4. 4. Tomando decisiones • ¿Como solucionar estos problemas con recursos (económicos, humanos) limitados?
  5. 5. 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.
  6. 6. Estandarizar • Hardware. • Systema operativo. • Plataforma de virtualización. • Pila de Rails.
  7. 7. Opciones de Virtualización • Zones en Solaris: OpenSolaris aún esta bastante verde. • VMWare: Es caro y no es libre. • XEN: Nuestra elección.
  8. 8. ¿ Porque XEN ? • Muy bien integrado en Debian. • Conocemos bastante bien Debian. • Tenemos soporte de la comunidad XEN. • Libre y gratuito.
  9. 9. La Arquitectura
  10. 10. El Front • Primera capa de la arquitectura. • Distribuye peticiones y realiza balanceo de carga. • Proxy inverso: Nginx.
  11. 11. 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.
  12. 12. 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.
  13. 13. 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.
  14. 14. La Pila de Rails Ruby / Rubyems (a mano) Nginx Rails 1.2.5 / Mongrel / Memcached Mongrel Cluster Monit The Mighty Shaker 1.2 Munin / SNMP / NTP / ImageMagick / Rmagick Postfix / Logrotate / NFS Client / Subversion MySQL bindings (!!!) otras gemas...
  15. 15. Los Servicios • Bases de Datos. • Almacenamiento Compartido. • Memcached. • Monitorización.
  16. 16. Bases de Datos • Servicio utilizado en los sites grandes. • Clusters Maestro / Esclavo. • La selección de servidor la realiza la aplicación.
  17. 17. Almacenamiento • Mounts por NFS. • Utilizamos Duplicity para los backups.
  18. 18. Memcached • Sesiones. • Fragmentos.
  19. 19. Monitorización • Munin • Nagios / SNMP • Syslog
  20. 20. 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.
  21. 21. 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
  22. 22. Debian 4 (Etch)
  23. 23. Dom0 particioning tamaño partición mount fstype LVM (de 160GB) #1 3GB / ext3 no (primary) #2 1GB swap swap no (logical) #3 156GB si (logical)
  24. 24. 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
  25. 25. Crear grupo virtual para LVM vgcreate xen-vg /dev/sda3
  26. 26. Configurar XEN Editar /etc/xen/xend-config.sxp (dom0-min-mem 0) (network-script network-bridge-two-interfaces)
  27. 27. 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 quot;$0quot;) quot;$dir/network-bridgequot; quot;$@quot; vifnum=0 netdev=eth0 bridge=xenbr0 quot;$dir/network-bridgequot; quot;$@quot; vifnum=1 netdev=eth1 bridge=xenbr1
  28. 28. Configurar XenTools Editar /etc/xen-tools/ gateway = 89.17.205.1 netmask = 255.255.255.0 kernel = /boot/vmlinuz-2.6.16-2-xen-686 initrd = /boot/initrd.img-2.6.16-2-xen-686 size = 3Gb memory = 2048Mb swap = 1024Mb fs = ext3 dist = etch
  29. 29. Creación de una nueva máquina virtual
  30. 30. DomU particiones mount tamaño fstype LVM / 3GB ext3 si swap 1GB swap si /var 30GB reiserfs si
  31. 31. Creacion de /var lvcreate -L30G -n site1.com-var xen-vg
  32. 32. Crear la instancia xen-create-image --hostname=site1.com --ip=89.17.205.185 --ide --force
  33. 33. Añadir el nuevo disco Editar /etc/xen/site1.com.cfg 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' ]
  34. 34. Capistrano • Herramienta para automatización de tareas en múltiples máquinas. • Funciona con “recetas” escritas en Ruby. • Simple y potente.
  35. 35. 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.
  36. 36. Capistrano Fu: Subversion • Usamos export en vez de subversion set :checkout, quot;exportquot; • Para evitar autenticarse manualmente con subversion set :svn_username, quot;deployquot; set :svn_password, quot;passwordquot;
  37. 37. 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
  38. 38. 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
  39. 39. 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 quot;mkdir -p /var/nfs_filesquot; sudo quot;mkdir -p /var/tmp_filesquot; sudo quot;mkdir -p /var/cache_filesquot; sudo quot;ln -nfs /var/nfs_files /var/myfilesquot; end
  40. 40. 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
  41. 41. En el radar • GFS / KronosFS / iSCSI / AoE • Event Driven Mongrel • Master / Master replication • MYSQLproxy • Enomalism • LDAP • PXE boot

×