mysql en la vida real

59
MySQL en la vida real MySQL en la vida real Muchos consejos obvios, pero útiles... Muchos consejos obvios, pero útiles... Davide Ferrari System Administrator

Upload: vide80

Post on 28-Jun-2015

3.015 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Mysql En La Vida Real

MySQL en la vida realMySQL en la vida real

Muchos consejos obvios, pero útiles...Muchos consejos obvios, pero útiles...

Davide FerrariSystem Administrator

Page 2: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 2

MySQL hoy en día

Desarrollado por Sun MicrosystemVersión estable 5.1.x

Ya está en beta la 5.4 y en alfa la 6.0

Es la M de LAMPYa es un proyecto maduro y algunos de los mitos de las versiones 3.23/4.0 hay que dejarlos atrásVasto ecosistema opensourceHay un fork: Drizzle

Page 3: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 3

Resumen de las “nuevas” versiones

MySQL 5.1Stable después de una laaaaaarga gestaciónAñade arquitectura a plugins, particiones, nueva replicación y mucho másVivió el cambio MySQL AB/Sun Microsystem

MySQL 5.4Originalmente no planeadaOrientada a las mejoras en escalabilidad vertical y rendimiento100% made in Sun y la ultima así

Page 4: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 4

Resumen de lo que vamos a ver hoy

ReplicaciónMaster-slave(s)Master-masterOtras formas

DRBD (Distributed Replicated Block Device) y HeartbeatConsejos e ideas

Page 5: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 5

La replicación en MySQL

Qué és la replicación?

Page 6: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 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.

Page 7: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 7

La replicación en MySQL: más en detalle

Ayuda a escalar en lectura

Page 8: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 8

La replicación en MySQL: más en detalle

Ayuda a escalar en lecturaNo ayuda a escalar en escritura. Olvidadlo.

Page 9: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 9

La replicación en MySQL: más en detalle

Ayuda a escalar en lecturaNo ayuda a escalar en escritura. Olvidadlo.Puede ayudar a mejorar la disponibilidad

Page 10: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 10

La replicación en MySQL: más en detalle

Ayuda a escalar en lecturaNo ayuda a escalar en escritura. Olvidadlo.Puede ayudar a mejorar la disponibilidadPuede dar dolores de cabeza

Page 11: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 11

La replicación en MySQL: más en detalle

Ayuda a escalar en lecturaNo ayuda a escalar en escritura. Olvidadlo.Puede ayudar a mejorar la disponibilidadPuede dar dolores de cabeza

Cuando se rompe (y lo notas)

Page 12: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 12

La replicación en MySQL: más en detalle

Ayuda a escalar en lecturaNo ayuda a escalar en escritura. Olvidadlo.Puede ayudar a mejorar la disponibilidadPuede dar dolores de cabeza

Cuando se rompe (y lo notas)Cuando se corrompe (y no lo notas)

Page 13: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 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 grandeProtege de los fallos de la SBR

También hay una modalidad mixta, que se basa en SBR pero utiliza RBR en casos concretos

Page 14: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 14

La replicación en MySQL: más en detalle

La replicación es un proceso asincrono

Page 15: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 15

La replicación en MySQL: más en detalle

La replicación es un proceso asincronoLa 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

Page 16: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 16

La replicación en MySQL: más en detalle

La replicación un proceso asincronoLa 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 masterBueno 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

Page 17: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 17

Master - Slave(s)

Sin dudas és la topología de replicación más común

Page 18: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 18

Master - Slave(s)

Sin dudas és la topología de replicación más comúnHay un master donde van las escrituras...

Page 19: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 19

Master - Slave(s)

Sin dudas és la topología de replicación más comúnHay un master donde van las escrituras...

… y algunas lecturas

Page 20: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 20

Master - Slave(s)

Sin dudas és la topología de replicación más comúnHay un master donde van las escrituras...

… y algunas lecturasCuidado con las SELECTs en transacciones (es ACID)

Page 21: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 21

Master - Slave(s)

Sin dudas és la topología de replicación más comúnHay un master donde van las escrituras...

… y algunas lecturasCuidado con las SELECTs en transacciones (es ACID)

Hay N slaves donde van las lecturas...

Page 22: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 22

Master - Slave(s)

Sin dudas és la topología de replicación más comúnHay un master donde van las escrituras...

… y algunas lecturasCuidado con las SELECTs en transacciones (es ACID)

Hay N slaves donde van las lecturas...… y escrituras. Si no, como se replican los datos? :)

Page 23: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 23

Master - Slave(s)

Como distribuir el hardware entre master/slaves?

Page 24: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 24

Master - slave(s)

Aparantemente, el master debe tener más hardware

Page 25: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 25

Master - slave(s)

Aparantemente, el master debe tener más hardwareRecibe todas las escrituras...

Page 26: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 26

Master - slave(s)

pero...

Page 27: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 27

Master - slave(s)

En un contexto web, es mucho más probable que haya muchísimas más lecturas

Page 28: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 28

Master - slave(s)

En un contexto web, es mucho más probable que haya muchísimas más lecturasAdemás, los esclavos hacen las mismas escrituras que el master

Page 29: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 29

Master - slave(s)

Más recursos a los esclavos!

Page 30: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 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 masterSi 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!!!

Page 31: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 31

Master-Master

Qué es el master-master?

Page 32: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 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.

Page 33: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 33

Master-Master: activo/activo

No sirve para escalar en escrituraComo mucho, se gana un poco más de paralelismo

Si pasa algo con la replicación, es aún peor que un master-slave normalPuede ayudar a montar un site geograficamente distribuido

Page 34: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 34

Master-Master: activo/pasivo

No ayuda a escalar en escritura (ooooooh)

Es una muy buena solución para la alta disponibilidadNo sólo en caso de crash físico si no también de operaciones lógicas como una ALTER gordaMMM (Multi Master replication Manager) puede ayudar en la automatización del proceso.

Page 35: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 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.

Page 36: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 36

DRBD

DRBD® es una solución 100% opensource de LinBit para la alta disponibilidad de un block device

Page 37: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 37

DRBD más en detalle

Disponible para todas las distro LinuxPermite replicar bit a bit un disco en 2 servidoresTransmite solo lo que escribesEstá pensado para soluciones activo/pasivoPuede utilizar hardware totalmente estandar (se aconseja por lo menos una Ethernet Gbit dedicada)

Page 38: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 38

DRBD y MySQL

MySQL en activo-pasivo con shared diskNO es un master-master. No hay replicación de Mysql, sólo la de DRBD a nivel de bloque2 servidores identicos a nivel de HWMismo my.cnf en ambos

Page 39: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 39

DRBD y MySQL

Ok, ya tengo los datos en dos servidores, así que si uno muere tengo otro.

Pero... ¿como me entero?

Page 40: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 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

Page 41: Mysql En La Vida Real

Replicación DRBD

MySQL

sda1

IP real IP virtual

Heart Beat MySQL

sda1

IP real

Red internaCliente

Cliente

Cliente

Cliente

Activo Pasivo

Servidor A Servidor B

Page 42: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 42

MySQL, Heartbeat y DRBD

Y que pasa si Servidor A cae?

Page 43: Mysql En La Vida Real

MySQL

sda1

IP real

MySQL

sda1

IP real

Red internaCliente

Cliente

Cliente

Cliente

Muerto Activo

Servidor A Servidor B

IP virtual

DOWN

Page 44: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 44

MySQL, Heartbeat y DRBD

Cuando Servidor B se levanta, la base de datos en disco está en estado crashed

Page 45: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 45

MySQL, Heartbeat y DRBD

Cuando Servidor B se levanta, la base de datos en disco está en estado crashedPara InnoDB (u otros engines ACID) no es un problema crítico

Page 46: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 46

MySQL, Heartbeat y DRBD

Cuando Servidor B se levanta, la base de datos en disco está en estado crashedPara InnoDB (u otros engines ACID) no es un problema crítico

Aunque si la BD es grande, puede tardar tiempo en recuperarse

Page 47: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 47

MySQL, Heartbeat y DRBD

Cuando Servidor B se levanta, la base de datos en disco está en estado crashedPara 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)

Page 48: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 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)

Page 49: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 49

Backup – Algunas opciones

mysqldump (el de toda la vida)mk-parallel-dumpInnoDB Hot Backup

De pago, de innodb.com (autores de InnoDB)Hace backup de InnoDB sin necesidad de parar MySQL

xtrabackupOpensource, de PerconaTambién hace hot backup, pero está más verde

LVM + cold backup (mylvmbackup)Cold backup de un slave + copia de binlog

Page 50: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 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 tuplasUn simple ls y ya sabes cual es la tabla gordaOcupa más file descriptorsHay que controlar el espacio que queda libre en disco

Page 51: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 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 datafilesO_DSYNC utiliza O_SYNC para abrir y hacer flush de los logs y fsync() para hacer flush de los datafilesO_DIRECT utiliza O_DIRECT para abrir los datafiles y fsync() para el flush de logs y datos

Page 52: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 52

fdatasync O_DIRECT O_DSYNC

Tablespacefsync()

open() con O_DIRECT,

fsync()fsync()

Transaction log

fsync() fsync()open() con O_SYNC

innodb_flush_method

Page 53: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 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()

Page 54: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 54

Buffer OS Buffer HW Media (disco)

fsync()Si Si Si

fsync() con O_DIRECT

No Si Si

O_SYNCSi, locking

Puede ser que no

Si

innodb_flush_method

Page 55: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 55

Transaction log

innodb_flush_log_at_trx_commit0 write y flush cada segundo, no cada transacción1 (default) write y flush del log de la memoria al disco cada transacción. Más seguro.2 write cada trx, flush cada segundo

Page 56: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 56

maatkit

Es un set de herramientas que facilitan la vida del administrador de MySQLmk-table-checksum permite comprobar que dos tablas replicadas sean realmente identicasmk-slave-delay permite mantener artificialmente un slave atrás en el tiempo. Util para recuperar datos despues de errores humanosmk-parallel-(dump|restore)mk-visual-explainetc

Page 57: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 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 detallesExplain directo de una kk-query que está tardandoEstadisticas 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

Page 58: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 58

Links

<--- Google's that wayHigh Performance MySQL 2nd Edition (la biblia de MySQL)http://planet.mysql.com

Page 59: Mysql En La Vida Real

30 Octubre 2009 PHP Conference Barcelona 59

Contactos

Davide FerrariMail: [email protected]: http://www.linkedin.com/in/davideferrariBlog: http://anothersysadmin.wordpress.com

¿Preguntas?