Mysql En La Vida Real

3,216 views
3,127 views

Published on

Published in: Technology
1 Comment
4 Likes
Statistics
Notes
No Downloads
Views
Total views
3,216
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
116
Comments
1
Likes
4
Embeds 0
No embeds

No notes for slide

Mysql En La Vida Real

  1. 1. MySQL en la vida real Muchos consejos obvios, pero útiles... Davide Ferrari System Administrator
  2. 2. MySQL hoy en día Desarrollado por Sun Microsystem Versión estable 5.1.x Ya está en beta la 5.4 y en alfa la 6.0 Es la M de LAMP Ya es un proyecto maduro y algunos de los mitos de las versiones 3.23/4.0 hay que dejarlos atrás Vasto ecosistema opensource Hay un fork: Drizzle 30 Octubre 2009 PHP Conference Barcelona 2
  3. 3. Resumen de las “nuevas” versiones MySQL 5.1 MySQL 5.4 Stable después de una Originalmente no laaaaaarga gestación planeada Añade arquitectura a Orientada a las plugins, particiones, mejoras en nueva replicación y escalabilidad vertical y mucho más rendimiento Vivió el cambio MySQL 100% made in Sun y la AB/Sun Microsystem ultima así 30 Octubre 2009 PHP Conference Barcelona 3
  4. 4. Resumen de lo que vamos a ver hoy Replicación Master-slave(s) Master-master Otras formas DRBD (Distributed Replicated Block Device) y Heartbeat Consejos e ideas 30 Octubre 2009 PHP Conference Barcelona 4
  5. 5. La replicación en MySQL Qué és la replicación? 30 Octubre 2009 PHP Conference Barcelona 5
  6. 6. La replicación en MySQL Es hacer que todos los datos importantes en un servidor MySQL estén también en otro (o más) y se vayan actualizando de forma automática. 30 Octubre 2009 PHP Conference Barcelona 6
  7. 7. La replicación en MySQL: más en detalle Ayuda a escalar en lectura 30 Octubre 2009 PHP Conference Barcelona 7
  8. 8. La replicación en MySQL: más en detalle Ayuda a escalar en lectura No ayuda a escalar en escritura. Olvidadlo. 30 Octubre 2009 PHP Conference Barcelona 8
  9. 9. La replicación en MySQL: más en detalle Ayuda a escalar en lectura No ayuda a escalar en escritura. Olvidadlo. Puede ayudar a mejorar la disponibilidad 30 Octubre 2009 PHP Conference Barcelona 9
  10. 10. La replicación en MySQL: más en detalle Ayuda a escalar en lectura No ayuda a escalar en escritura. Olvidadlo. Puede ayudar a mejorar la disponibilidad Puede dar dolores de cabeza 30 Octubre 2009 PHP Conference Barcelona 10
  11. 11. La replicación en MySQL: más en detalle Ayuda a escalar en lectura No ayuda a escalar en escritura. Olvidadlo. Puede ayudar a mejorar la disponibilidad Puede dar dolores de cabeza Cuando se rompe (y lo notas) 30 Octubre 2009 PHP Conference Barcelona 11
  12. 12. La replicación en MySQL: más en detalle Ayuda a escalar en lectura No ayuda a escalar en escritura. Olvidadlo. Puede ayudar a mejorar la disponibilidad Puede dar dolores de cabeza Cuando se rompe (y lo notas) Cuando se corrompe (y no lo notas) 30 Octubre 2009 PHP Conference Barcelona 12
  13. 13. La replicación en MySQL: más en detalle Hasta la 5.0, estaba basada en sentencias planas (SBL – Statements Based Replic.). Falla en algunos casos como por ejemplo UUID(), UPDATE|DELETE … LIMIT sin ORDER BY etc >= 5.1, soporta una replicación basada en rows (RBR – Row Based Replic.) o sea transmitiendo el valor y no la sentencia SQL Genera un binlog mucho más grande Protege de los fallos de la SBR También hay una modalidad mixta, que se basa en SBR pero utiliza RBR en casos concretos 30 Octubre 2009 PHP Conference Barcelona 13
  14. 14. La replicación en MySQL: más en detalle La replicación es un proceso asincrono 30 Octubre 2009 PHP Conference Barcelona 14
  15. 15. La replicación en MySQL: más en detalle La replicación es un proceso asincrono La replicación es un proceso mono-thread, se pierde el paralelismo de las peticiones y, por lo tanto, es generalmente más lento que los updates directos en el master 30 Octubre 2009 PHP Conference Barcelona 15
  16. 16. La replicación en MySQL: más en detalle La replicación un proceso asincrono La replicación es un proceso mono-thread, por lo tanto se pierde el paralelismo de las peticiones y, por lo tanto, es generalmente más lento que los updates directos en el master Bueno no, en realidad hay dos threads en el slave. I/O thread y SQL thread. Uno lee el binlog remoto y lo copia en el relay log locale y el otro ejecuta el relay log 30 Octubre 2009 PHP Conference Barcelona 16
  17. 17. Master - Slave(s) Sin dudas és la topología de replicación más común 30 Octubre 2009 PHP Conference Barcelona 17
  18. 18. Master - Slave(s) Sin dudas és la topología de replicación más común Hay un master donde van las escrituras... 30 Octubre 2009 PHP Conference Barcelona 18
  19. 19. Master - Slave(s) Sin dudas és la topología de replicación más común Hay un master donde van las escrituras... … y algunas lecturas 30 Octubre 2009 PHP Conference Barcelona 19
  20. 20. Master - Slave(s) Sin dudas és la topología de replicación más común Hay un master donde van las escrituras... … y algunas lecturas Cuidado con las SELECTs en transacciones (es ACID) 30 Octubre 2009 PHP Conference Barcelona 20
  21. 21. Master - Slave(s) Sin dudas és la topología de replicación más común Hay un master donde van las escrituras... … y algunas lecturas Cuidado con las SELECTs en transacciones (es ACID) Hay N slaves donde van las lecturas... 30 Octubre 2009 PHP Conference Barcelona 21
  22. 22. Master - Slave(s) Sin dudas és la topología de replicación más común Hay un master donde van las escrituras... … y algunas lecturas Cuidado con las SELECTs en transacciones (es ACID) Hay N slaves donde van las lecturas... … y escrituras. Si no, como se replican los datos? :) 30 Octubre 2009 PHP Conference Barcelona 22
  23. 23. Master - Slave(s) Como distribuir el hardware entre master/slaves? 30 Octubre 2009 PHP Conference Barcelona 23
  24. 24. Master - slave(s) Aparantemente, el master debe tener más hardware 30 Octubre 2009 PHP Conference Barcelona 24
  25. 25. Master - slave(s) Aparantemente, el master debe tener más hardware Recibe todas las escrituras... 30 Octubre 2009 PHP Conference Barcelona 25
  26. 26. Master - slave(s) pero... 30 Octubre 2009 PHP Conference Barcelona 26
  27. 27. Master - slave(s) En un contexto web, es mucho más probable que haya muchísimas más lecturas 30 Octubre 2009 PHP Conference Barcelona 27
  28. 28. Master - slave(s) En un contexto web, es mucho más probable que haya muchísimas más lecturas Además, los esclavos hacen las mismas escrituras que el master 30 Octubre 2009 PHP Conference Barcelona 28
  29. 29. Master - slave(s) Más recursos a los esclavos! 30 Octubre 2009 PHP Conference Barcelona 29
  30. 30. Master-Slave(s): consejos varios En los slaves poner siempre el parametro read- only en my.cnf. Ahorra muchos problemas. Evitar de mezclar versiones distintas entre master y slaves. Si hay que mezclar, el slave que sea más reciente que el master Si puedes tener 2 o más slaves, que 2 sean gemelos a nivel HW para poder hacer pruebas de tuning. Cada server obligatoriamente con su propio server ID. Falla todo si falta!!! 30 Octubre 2009 PHP Conference Barcelona 30
  31. 31. Master-Master Qué es el master-master? 30 Octubre 2009 PHP Conference Barcelona 31
  32. 32. Master-Master És un tipo de replicación entre 2 server donde ambos son master y slave. Puede ser activo-pasivo (recomendado) o bien activo-activo. 30 Octubre 2009 PHP Conference Barcelona 32
  33. 33. Master-Master: activo/activo No sirve para escalar en escritura Como mucho, se gana un poco más de paralelismo Si pasa algo con la replicación, es aún peor que un master-slave normal Puede ayudar a montar un site geograficamente distribuido 30 Octubre 2009 PHP Conference Barcelona 33
  34. 34. Master-Master: activo/pasivo No ayuda a escalar en escritura (ooooooh) Es una muy buena solución para la alta disponibilidad No sólo en caso de crash físico si no también de operaciones lógicas como una ALTER gorda MMM (Multi Master replication Manager) puede ayudar en la automatización del proceso. 30 Octubre 2009 PHP Conference Barcelona 34
  35. 35. Master-Master: parametros En configuración A/A es fundamental setear los auto_increment_increment = 2 auto_increment_offset = N Tanto en A/A como en A/P log-slave-updates Aquí también no olvidarse de los server ID. 30 Octubre 2009 PHP Conference Barcelona 35
  36. 36. DRBD DRBD® es una solución 100% opensource de LinBit para la alta disponibilidad de un block device 30 Octubre 2009 PHP Conference Barcelona 36
  37. 37. DRBD más en detalle Disponible para todas las distro Linux Permite replicar bit a bit un disco en 2 servidores Transmite solo lo que escribes Está pensado para soluciones activo/pasivo Puede utilizar hardware totalmente estandar (se aconseja por lo menos una Ethernet Gbit dedicada) 30 Octubre 2009 PHP Conference Barcelona 37
  38. 38. DRBD y MySQL MySQL en activo-pasivo con shared disk NO es un master-master. No hay replicación de Mysql, sólo la de DRBD a nivel de bloque 2 servidores identicos a nivel de HW Mismo my.cnf en ambos 30 Octubre 2009 PHP Conference Barcelona 38
  39. 39. DRBD y MySQL Ok, ya tengo los datos en dos servidores, así que si uno muere tengo otro. Pero... ¿como me entero? 30 Octubre 2009 PHP Conference Barcelona 39
  40. 40. DRBD y MySQL Ok, ya tengo los datos en dos servidores, así que si uno muere tengo otro. Pero... ¿como me entero? Usando Heartbeat 30 Octubre 2009 PHP Conference Barcelona 40
  41. 41. Cliente Cliente Red interna Cliente Cliente IP real IP virtual IP real MySQL Heart Beat MySQL sda1 Replicación DRBD sda1 Activo Pasivo Servidor A Servidor B
  42. 42. MySQL, Heartbeat y DRBD Y que pasa si Servidor A cae? 30 Octubre 2009 PHP Conference Barcelona 42
  43. 43. Cliente Cliente Red interna Cliente Cliente IP real IP real IP virtual DOWN MySQL MySQL sda1 sda1 Muerto Activo Servidor A Servidor B
  44. 44. MySQL, Heartbeat y DRBD Cuando Servidor B se levanta, la base de datos en disco está en estado crashed 30 Octubre 2009 PHP Conference Barcelona 44
  45. 45. MySQL, Heartbeat y DRBD Cuando Servidor B se levanta, la base de datos en disco está en estado crashed Para InnoDB (u otros engines ACID) no es un problema crítico 30 Octubre 2009 PHP Conference Barcelona 45
  46. 46. MySQL, Heartbeat y DRBD Cuando Servidor B se levanta, la base de datos en disco está en estado crashed Para InnoDB (u otros engines ACID) no es un problema crítico Aunque si la BD es grande, puede tardar tiempo en recuperarse 30 Octubre 2009 PHP Conference Barcelona 46
  47. 47. MySQL, Heartbeat y DRBD Cuando Servidor B se levanta, la base de datos en disco está en estado crashed Para InnoDB (u otros engines ACID) no es un problema crítico Aunque si la BD es grande, puede tardar tiempo en recuperarse Las tablas MyISAM pueden corromperse de forma más o menos grave (sí, podrías perderlo todo) 30 Octubre 2009 PHP Conference Barcelona 47
  48. 48. Recordad! ¡¡ BACKUP !! (sólo hay dos clases de administradores de sistemas: los que han perdido datos y los que aún no lo han hecho) 30 Octubre 2009 PHP Conference Barcelona 48
  49. 49. Backup – Algunas opciones mysqldump (el de toda la vida) mk-parallel-dump InnoDB Hot Backup De pago, de innodb.com (autores de InnoDB) Hace backup de InnoDB sin necesidad de parar MySQL xtrabackup Opensource, de Percona También hace hot backup, pero está más verde LVM + cold backup (mylvmbackup) Cold backup de un slave + copia de binlog 30 Octubre 2009 PHP Conference Barcelona 49
  50. 50. innodb_file_per_table innodb_file_per_table Sirve para separar cada tabla InnoDB en un archivo dedicado Permite recuperar espacio a nivel de SO si se borran tuplas Un simple ls y ya sabes cual es la tabla gorda Ocupa más file descriptors Hay que controlar el espacio que queda libre en disco 30 Octubre 2009 PHP Conference Barcelona 50
  51. 51. innodb_flush_method innodb_flush_method Determina como MySQL abre en lectura y escritura los archivos de datos (tablespace) y los transaction logs a nivel de SO. En *nix puede tener como valor: fdatasync (default) utiliza fsync() para los logs y los datafiles O_DSYNC utiliza O_SYNC para abrir y hacer flush de los logs y fsync() para hacer flush de los datafiles O_DIRECT utiliza O_DIRECT para abrir los datafiles y fsync() para el flush de logs y datos 30 Octubre 2009 PHP Conference Barcelona 51
  52. 52. innodb_flush_method fdatasync O_DIRECT O_DSYNC open() con fsync() O_DIRECT, fsync() Tablespace fsync() open() con Transaction fsync() fsync() O_SYNC log 30 Octubre 2009 PHP Conference Barcelona 52
  53. 53. innodb_flush_method WTF? O_SYNC y O_DIRECT son parametros opcionales de open() O_SYNC obliga a sincronizar los datos a disco cada vez que se quiere escribir algo en un archivo así abierto, bloqueando el retorno de la syscall. Las escrituras pero sì pasan por la cache del SO. O_DIRECT el kernel pone directamente en DMA la aplicación en userspace, deshabilitando al 100% el I/O buffer del SO. Se evita así el doble buffer (de SO e InnoDB en lectura, de SO y hardware en escritura) fsync(): si no hay O_SYNC se utiliza siempre, aunque exista fdatasync() 30 Octubre 2009 PHP Conference Barcelona 53
  54. 54. innodb_flush_method Buffer OS Buffer HW Media (disco) Si Si Si fsync() fsync() con No Si Si O_DIRECT Puede ser que Si, locking Si O_SYNC no 30 Octubre 2009 PHP Conference Barcelona 54
  55. 55. Transaction log innodb_flush_log_at_trx_commit 0 write y flush cada segundo, no cada transacción 1 (default) write y flush del log de la memoria al disco cada transacción. Más seguro. 2 write cada trx, flush cada segundo 30 Octubre 2009 PHP Conference Barcelona 55
  56. 56. maatkit Es un set de herramientas que facilitan la vida del administrador de MySQL mk-table-checksum permite comprobar que dos tablas replicadas sean realmente identicas mk-slave-delay permite mantener artificialmente un slave atrás en el tiempo. Util para recuperar datos despues de errores humanos mk-parallel-(dump|restore) mk-visual-explain etc 30 Octubre 2009 PHP Conference Barcelona 56
  57. 57. innotop Innotop es una herramienta parecida a top de Unix que permite visualizar datos de InnoDB en tiempo real Queries que se están ejecutando y sus detalles Explain directo de una kk-query que está tardando Estadisticas de buffer, flushs, writes, prune, consumo de memoria en tiempo real Fundamentalmente es un front-end a mysqladmin proc, mysqladmin ext, y suerte que existe 30 Octubre 2009 PHP Conference Barcelona 57
  58. 58. Links <--- Google's that way High Performance MySQL 2nd Edition (la biblia de MySQL) http://planet.mysql.com 30 Octubre 2009 PHP Conference Barcelona 58
  59. 59. Contactos Davide Ferrari Mail: vide80@gmail.com LinkedIn: http://www.linkedin.com/in/davideferrari Blog: http://anothersysadmin.wordpress.com ¿Preguntas? 30 Octubre 2009 PHP Conference Barcelona 59

×