47
1 /47 MySQL Meetup Montevideo 8 de Marzo 2012 Alternativas de HA en MySQL Ing. Nelson Calero, OCP [email protected]

Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

Embed Size (px)

DESCRIPTION

Análisis en profunidad de replicación nativa y repaso de las alternativas existentes para HA.

Citation preview

Page 1: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

1 /47

MySQL Meetup Montevideo8 de Marzo 2012

Alternativas de HA en MySQL

Ing. Nelson Calero, [email protected]

Page 2: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

2/47

Conceptos

Disponibilidad

• Porcentaje de tiempo en que un sistema/recurso está disponible para ser usado A = uptime/(uptime + downtime)

• Medida con escala de nueves: 99% => 3 días, 15:36 horas /año 99,9% => 8:46 horas/año o 43.8 minutos/mes 99,99% => 53 minutos/año o 4.38 minutos/mes 99,999% => 5 minutos/año o 0.44 minutos/mes

Page 3: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

3/47

Conceptos - Disponibilidad

• Capacidad de continuar trabajando a pesar de fallas (hardware, software, externas).

Siendo más formales:• Mean Time Between Failures (MTBF)

Tiempo medio estimado entre fallas. • Mean Time to Repair/Recover (MTTR)

Tiempo medio para reparar las fallas

Equivalente: A = MTBF / (MTBF + MTTR)

En un sistema, podemos diseñar la arquitectura para que altos tiempos de MTTR en componentes no afecten la disponibilidad total del sistema.

Page 4: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

4/47

Soluciones de HA en MySQL

Hay varias posibilidades nativas:– Replicación – Storage compartido – Cluster

Y varias provistas por terceros:

– MMM: Multi Master replication Manager for MySQL.– DRBD: replicación sincrónica de bloques usando la red – Pacemaker: Cluster resource manager– Galera: replicación sincrónica – parche – Tungsten: replicación a nivel de aplicación

Page 5: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

5/47

MySQL - Replicación

Basada en transferencia y aplicación de Log Binario del master a slaves, en forma asincrónica o semisincrónica (5.5).

• es en un sólo sentido (one-way)• un slave puede tener un solo master • por sentencias, registros cambiados (5.1), o mixto• puede ser parcial, filtrando por base y tablas• controlada por parámetros en my.cnf y comandos para

configuración dinámica • cluster implementa replicación sincrónica

Dos thread en cada slave:• obtiene registros de binlog y genera relaylog (I/O thread)• lee relaylog y aplica registros (SQL thread)

Page 6: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

6/47

MySQL - Replicación

"MySQL replication by default is asynchronous. The master

writes events to its binary log but does not know whether or when a slave has retrieved and processed them. With asynchronous replication, if the master crashes, transactions that it has committed might not have been transmitted to any slave. Consequently, failover from master to slave in this case may result in failover to a server that is missing transactions relative to the master" http://dev.mysql.com/doc/refman/5.5/en/replication-semisync.html

Page 7: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

7/47

MySQL - Replicación - funcionalidades

hasta 5.1 (2008):1. log binario de sentencias, registros, o mixto2. filtro de bases, tablas y transacciones3.sentencias no determinísticas 4.disponible para Cluster

en 5.5 (2010):

1.semisincrónica2. fsync mejorado en slave3.recuperación de corrupción en relay log4.heartbeat5. filtro de eventos por servidor

en 5.6 (m3):1. replication_event_checksum

Page 8: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

8/47

Mysql - Replicación

Semisincrónica (5.5):

• parche original de google - 2007 • slaves confirman recepción de eventos al master • commit se responde al cliente luego que un slave haya

confirmado recepción de evento• implementado con plugins en master y slave

o rpl_semi_sync_master_enabled = 0/1;o rpl_semi_sync_master_timeout = N;

1000 = 1 segundoo rpl_semi_sync_slave_enabled = 0/1;

• monitoreoo SHOW STATUS LIKE 'Rpl_semi_sync%';

Page 9: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

9/47

MySQL - Replicación

• ¿Cómo habilitar log binario?log-bin # en my.cnf

• Si slaves van a tener habilitada réplica, habilitar que su binlog incluya cambios aplicados del master

log-slave-updates # en my.cnf

• ¿Cuándo se genera un archivo nuevo?– al reiniciar el servidor mysql– al llegar al tamaño máximo (max_binlog_size)– ejecutando FLUSH LOGS

• ¿Cuándo se borran los archivos de logbin?– cuando se llega a EXPIRE_LOGS_DAYS– ejecutando PURGUE MASTER LOGS

Page 10: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

10/47

MySQL - Replicación

SET BINLOG_FORMAT=[row|statement|mixed|default]; statement• almacena las sentencias SQL ejecutadas, DDL y DML.• tamaño independiente del volumen de datos • necesita que todas las tablas de la sentencia estén

replicadas.• sentencias no determinísticas no son replicadas row• almacena datos modificados• lockea solo datos necesarios • recomendado cuando hay poco volumen de cambios

Page 11: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

11/47

MySQL - Replicación

binlog filtrado en master:• SET SQL_LOG_BIN=0• binlog-do-db, binlog-ignore-db

filtrada aplicación en slave:• replicate-do/ignore-db/table, replicate-do-table• mysql proxy

NOTA: Binlog filtrado implica que no sirve para recuperación !

Configurar para consistencia sync_binlog=1 # escribe binlog a disco después

de cada escritura innodb_support_xa=1 # sincroniza binlog con InnoDB

datafiles (caídas innodb que genera rollback)

Page 12: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

12/47

MySQL - Replicación

¿Replicación bi-direccional?

• No soportado. o Esto quiere decir: slave no actualiza datos en master,

porque el flujo de datos es siempre en un sentido: del master al slave.

• Se puede configurar master y slave en un mismo servidor, y parece bi-direccional si ambos tienen configuración simétrica, pero son dos configuraciones distintas.

• Problemas a considerar:o autoincrementoso restricciones de unicidad (UKs)o cambios fuera de orden

Page 13: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

13/47

MySQL - Replicación

Sentencias inseguras (unsafe) no son replicadas en formato statement:• no determinísticas

• aquellas que pueden retornar valor distinto en slavesysdate(), user, UUID(), etc.

• otras sentencias no seguras:update ... limitinsert delayedload data infile # desde 5.1.50

• algunas no determinísticas se consideran seguras:ej.: curtime(), last_insert_id()

Page 14: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

14/47

MySQL - Replicación

Soporta cambios externos en la base de datos del slave:

• cambiar de engine en slaves• master InnoDB y slave MyISAM

Servía hace algunos años cuando InnoDB no tenía buena performance. Actualmente es discutible. Puede servir para algún caso particular. Medirlo en el sistema!

● Blackhole: filtro de datos

● cambiar configuración de slaves buscando mejor performance

• cambiar índices

• cambiar configuración raid

Page 15: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

15/47

MySQL - Replicación - 5.1

Replicación en cluster• desde 5.1.6 master/slave. circular desde 5.1.18• configuración de máxima disponibilidad

http://dev.mysql.com/doc/refman/5.5/en/mysql-cluster-replication.html

Page 16: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

16/47

MySQL - Replicación

Contras: • no hay automatización oficial de failover, se requiere

intervención manual o programación.

• escritura en slaves está limitada a un thread. Multi-thread en 5.6 (está en m6).

• es asincrónica y no transaccional, por lo que puede perder

datos. Mejorado en 5.5.2 (semisync) y 5.6 (crash recovery) • slave necesita monitoreo: caídas, demoras, consistencia

Page 17: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

17/47

Soluciones de HA en MySQL

Nativas1.Replicación2.Storage compartido 3.Cluster

De terceros

1.MMM 2.DRBD3.Pacemaker 4.Galera5.Tungsten

Page 18: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

18/47

MySQL - Storage compartido

Activo/activo • no soportado en InnoDB• MyISAM:

o sobre cluster file system (OCFS2/GFS)o parámetros necesarios:

external-locking query-cache=0 delay_key_write=off

Activo/pasivo• Necesita software de terceros para heartbeat• Failover:

o InnoDB aplica recoveryo MyISAM necesita que se valide que no hay tablas

corruptas: --myisam_recover como opción de arranque o myisamchk antes de levantarlo.

Page 19: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

19/47

Soluciones de HA en MySQL

Nativas1.Replicación2.Storage compartido 3.Cluster

De terceros

1.MMM 2.DRBD3.Pacemaker 4.Galera5.Tungsten

Page 20: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

20/47

MySQL - Cluster

Arquitectura shared nothing

http://dev.mysql.com/doc/mysql-cluster-excerpt/5.1/en/mysql-cluster-overview.html

Page 21: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

21/47

MySQL - Cluster

A partir de mysql 5.5, cluster es una distribución independiente.Actualmente está en producción 7.2

Nodo de datos - NDBD - Almacena datos e índices● Desde 7.2 soporta varios procesos (nodos) en mismo host

Nodo SQL - mysqld (versión 5.1)• Maneja comunicación con cliente: recibe sentencias SQL y se

comunica con nodos de datos para ejecutarla

Nodo de Gestión - ndb_mgmd• monitoreo, configuración y control del cluster

Datos se almacenan particionados y replicados entre NDBD• fragmento activo (primario) y de failover (secundarios)• parámetro NoOfReplicas es 2 por defecto

o valores mayores soportan caídas de más nodos

Page 22: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

22/47

MySQL - Cluster

Caídas soportadas nodo sql: • clientes se desconectan y transacciones no commiteadas se

pierden

nodo datos:• máximo NoOfReplicas-1• en caso de split-brain, vive el grupo con mayoría de nodos, y

desempata nodo árbitro. nodo gestión: • no impacta el funcionamiento del cluster• no se pueden agregar nuevos nodos hasta que vuelva

Page 23: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

23/47

MySQL - Cluster

Varias operaciones online:• backup• software upgrade• agregar nodos de datos • system restart en modo "rolling"

o gestión, datos (de a uno, todos), sql (idem)

Balanceo de carga:• Java Connector/J 5.0.6: jdbc:mysql:loadbalance:// Base ndbinfo con datos en vivo:• nodos activos• memoria usada (tabla memoryusage)• varios contadores de actividad (tabla counters)

Page 24: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

24/47

MySQL - Cluster

Recomendado para• transacciones cortas y chicas• sql con joins simples y búsquedas por PK • alta disponibilidad

Casos de uso• sistemas de tiempo real• soporte a telefonía Configuración - en práctico• Usa un archivo de configuración global: config.ini• local a cada nodo: my.cnf

o ubicación de nodos de gestión• logs por nodo (ndb_#_out.log) y global (ndb_#_cluster.log)

Page 25: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

25/47

MySQL - Cluster

Limitaciones• mínimo tres equipos, máximo 255 (48 nodos de datos)• lento en joins de mucho volumen y agregaciones• no soporta índices fulltext ni foreing keys• datos se almacenan en memoria (solo columnas indexadas

desde 5.5, antes todo), lo que limita el tamaño máximo de la base a la capacidad de los servidores de datos.

• estimación de memoria RAM necesaria en cada nodo:(SizeofDatabase x NumberOfReplicas x 1.1 ) / NumberOfDataNodes

ndb_size.pl estima memoria necesaria en cluster a partir de

una instancia mysql común.http://dev.mysql.com/doc/refman/5.5/en/mysql-cluster-programs-ndb-size-pl.html

Page 26: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

26/47

MySQL - Cluster

MCM: MySQL Cluster Manager• versión comercial: MySQL Cluster Carrier Grade Edition• mcmd --bootstrap # instala cluster de 3 nodos configurado • Redhat/OEL 5, SuSE EL10/11

Page 27: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

27/47

Soluciones de HA en MySQL

Nativas1.Replicación2.Storage compartido 3.Cluster

De terceros

1.MMM 2.DRBD3.Pacemaker 4.Galera5.Tungsten

Page 28: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

28/47

Mysql - Multi Master Manager

http://mysql-mmm.org/● Scripts para monitoreo y failover de replicaciones

master/master con un solo nodo soportando escrituras

Scripts: ● mmm_mond, mmm_agentd, mmm_control

Bug reportado 27/4/2011• https://bugs.launchpad.net/mysql-mmm/+bug/771843

"moving slaves to the new master can cause inconsistency accross databases"

• pasado a prioridad alta el 25/5, a resolver en v2.2

Page 29: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

29/47

Soluciones de HA en MySQL

Nativas1.Replicación2.Storage compartido 3.Cluster

De terceros

1.MMM 2.DRBD3.Pacemaker 4.Galera5.Tungsten

Page 30: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

30/47

MySQL - DRBD

Distributed Replicated Block Device - http://www.drbd.org• módulo en kernel linux que implementa replicación

sincrónica de bloques usando la red (raid-1)

Page 31: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

31/47

MySQL - DRBD

Necesita software de gestión de cluster para automatizar: • heartbeat / pacemaker

Ventajas• alternativa barata a una caja de storage (SAN)• datos quedan locales al servidor activo (performance)• es más seguro que replicación nativa (consistencia) • actualizaciones de hardware/software usando failover

contras• soportado solo en linux• agrega complejidad • corrupción se propaga • no permite replicar parte de la base

Page 32: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

32/47

MySQL - DRBD

Activo/activo• Sobre GFS/OCFS2• Sólo con MyISAM

Con LVM• se puede usar debajo y sobre DRBD• snapshots sólo si LVM va debajo• snapshots en slave permiten montar el filesystem para

maniobras read-only Soporta mirroring sincrónico y asincrónico• necesario para WAN, no recomendado para MySQL

Page 33: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

33/47

Mysql - DRBD

Parámetros recomendados en MySQL:• log-bin=nombre

por defecto es hostname y puede cambiar• innodb_log_file_size

más chico permite recovery más rápido• myisam_recover=force,backup

para chequeo automático de corrupción en failover• innodb_support_xa=1

sincroniza binlog con innodb datafiles (caídas innodb que genera rollback)

• sync_binlog=1

escribe binlog a disco después de cada escritura

Page 34: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

34/47

MySQL - DRBD

Posibles fallas master1. caída del servidor2. tranca sin que falle, no liberando recursos. Requiere fencing

del agente de cluster (heartbeat)3. corte del enlace con secundario

secundario 1. caída del servidor 2. corrupción de datos por fallas en storage 3. corte del enlace con master

Page 35: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

35/47

Soluciones de HA en MySQL

Nativas1.Replicación2.Storage compartido 3.Cluster

De terceros

1.MMM 2.DRBD3.Pacemaker 4.Galera5.Tungsten

Page 36: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

36/47

Pacemaker

Cluster resource manager - http://www.clusterlabs.org/gpl (v2), no hay versión enterprise.

●Apoyado por RedHat / Novell / LinBit.

Funcionalidades • soporta infraestructura de OpenAIS y Heartbeat• implementa STONITH para asegurar integridad de datos• configuración redundante en CIB (cluster information base), archivo XML• usa cualquier recurso que pueda ser gestionado con scripts• soporta varias configuraciones redundantes:

activo/pasivo, activo/activo, N+1, etc.

➢ Parte de Heartbeat hasta versión 2.1.3. Luego se independizó ➢ 1.0 más testeado sobre Heartbeat que con Corosync

Page 37: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

37/47

Pacemaker Stack

http://www.clusterlabs.org/wiki/Architecture#Supported_Cluster_Stacks

Page 38: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

38/47

Pacemaker Internals

http://www.clusterlabs.org/wiki/Architecture#Supported_Cluster_Stacks

Page 39: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

39/47

Pacemaker

con MySQL● gran comunidad de usuarios● percona-prm: Mysql Replication Manager (alpha)

Pasos para comenzar a utilizarlo:

● Configurar Heartbeat/etc/ha.d/ha.cf

● Configurar recursos Muchos parámetros, estudiar bien opcionesStonith para producción

● Probar escenarios !

Page 40: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

40/47

Pacemaker

Recurso: ● clase: OCF/lsb/legacy-heartbeat/stonith● parámetros● operaciones de monitoreo● scores: usado en toma de decisiones - = no usar + = usar INFINITY = constante

●lsb: script de inicio cumpliendo Linux Standard Base

●OCF: Open Cluster Framework, extensión de LSB

Page 41: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

41/47

Pacemaker

●Ejemplo de configuración para DRBD:

$> crm configure edit primitive drbd_disk ocf:linbit:drbd \

params drbd_resource="mysql" \ op monitor interval="15s"

primitive fs_drbd ocf:heartbeat:Filesystem \ params device="/dev/drbd0" directory="/varios/01" fstype="ext3" \ ms ms_drbd drbd_disk \ meta master-max="1" master-node-max="1" clone-max="2" \ clone-node-max="1" notify="true"

colocation mnt_on_master inf: fs_drbd ms_drbd:Master order mount_after_drbd inf: ms_drbd:promote fs_drbd:start

Page 42: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

42/47

Soluciones de HA en MySQL

Nativas1.Replicación2.Storage compartido 3.Cluster

De terceros

1.MMM 2.DRBD3.Pacemaker 4.Galera5.Tungsten

Page 43: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

43/47

MySQL - Galera

Replicación sincrónicahttp://codership.com/products/galera_replication

Page 44: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

44/47

MySQL - Galera

Características • Réplica en tiempo de commit• Sincrónica y multi-master• gestiona variables de autoincremento • Lleva ID de transacciones para garantizar consistencia• controla datos a replicar al recibirlos y antes de aplicarlos

(certificación)• Implementación genérica. Primera versión en InnoDB.• Parche para MySQL• Configurable mediante variables en my.cnf

'wsrep%';• Publica variables de estado

o show status like 'wsrep%'; • control de flujo con triggers (exceso de carga)

Page 45: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

45/47

Soluciones de HA en MySQL

Nativas1.Replicación2.Storage compartido 3.Cluster

De terceros

1.MMM 2.DRBD3.Pacemaker 4.Galera5.Tungsten

Page 46: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

46/47

MySQL - Tungsten Replicator

Opensource, GPL V2, y versión enterprise http://www.continuent.org

Funcionalidades• replicación en paralelo, multi-master y heterogena (aplica a

PostgreSQL, MySQL y Oracle). • implementa ID de transacciones global• múltiples servicios de replicación por proceso (N-N)

Buena documentación:http://code.google.com/p/tungsten-replicator/wiki/TungstenReplicatorCookbook

http://code.google.com/p/tungsten-replicator/wiki/Troubleshooting

Page 47: Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012

47/47

MySQL - Tungsten Replicator

Conector: • intermedia entre aplicación y BD• implementación nativa MySQL y PostgreSQL• incluye módulo router que se comunica con la BD, e

implementa HA

Replicator: captura cambios y propaga a otros replicators, usando protocolo propio TLH.

Manager: monitorea estado de componente, mediante módulos monitores: replicator, database y cluster.