• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Alternativas de alta disponiblidad en MySQL - MySQL Meetup - Montevideo - Marzo 2012
 

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

on

  • 3,337 views

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

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

Statistics

Views

Total Views
3,337
Views on SlideShare
2,881
Embed Views
456

Actions

Likes
0
Downloads
79
Comments
5

3 Embeds 456

http://blog.mashter.com 454
http://webcache.googleusercontent.com 1
http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

15 of 5 previous next Post a comment

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • Gracias Nelson Calero por Responder. Te explico con mas detalle, tengo un modem de 16 puerto, construi cables utp para cada nodo(CPU), tengo SO Windows 7 y windows XP(parche de wind 7), a cada computadora le asigne'e una IP diferente (x.x.x.1, x.x.x.2,x.x.x.3 y x.x.x.4), NOTA: la replicacion aqui lo hise local(agregando el modem el puerto 3306 y desactivando el firewalls) y SALIO con EXITO. Ahora pasamos con la replicacion Global ocupando logmein hamachi, hamachi me asigna un IP a cada nodo(27.x.x.50, 27.x.x.60, 27.x.x.100 y 27.x.x.12).cuando hago el CHANGE MASTER TO MASTER_HOST segun el link http://www.howtoforge.com/setting-up-master-master-replication-on-four-nodes-with-mysql-5-on-debian-etch en este link usan 4 computadoras con 4 ip diferente (yo creo que es local), bueno al hacer el CHANGE MASTER TO MASTER_HOST me tira el error 'error connecting to master 'CALZADLOGR560416@25.144.1.2:3306', yo quiero pensar que devo abrir el puerto 3306 de hamachi, pero OJO cuando entro con el usuario de replicacion en consola de windows le pongo >> mysql -u CALZADLOGR560416 -h 25.156.1.2 -p password: secreto entro al servidor sin ningun problema, este usuario esta a mas de 30 KM (la computadora..)Quiero saber cual es el problema..por favor hechame la mano...GRACIAS
    Are you sure you want to
    Your message goes here
    Processing…
  • @SEATEC2010 No me queda claro que quieres decir con replicación local y global. ¿Es por el uso de modem en vez de LAN?. Si ese fuera el caso, ¿estás usando las mismas IPs en la conexión por modem que por LAN?. Si no, deberías hacer cambios en la configuración de las réplicas cada vez que se cambien de modo de conexión.
    Saludos
    Are you sure you want to
    Your message goes here
    Processing…
  • Gracias Nelson Calero por Resonder...tengo un sistema en produccion hecho en Java, tengo 4 (A, B, C, D)tiendas en las cuales instale el mysql 5.6, en las 4 tiendas falla constantemente el internet, por eso devo tener un mecanismo en la cual las computadoras se conecten de manera local y ala ves deben enviar la informacion a todos lo nodos (a, b, c,d), hise una replicacion local(conexion con modem de 4 puerto) con ip fijas funciona a la perfeccion, pero cuando hise la replicacion globan con ips fijas en Red, me tiran este error 'error connecting to master 'CALZADLOGR560416@25.144.1.2:3306', asi como hise la prueba local, asi tambien lo estoy haciendo, no se cual sea el error...Gracias nelson por la ayuda
    Are you sure you want to
    Your message goes here
    Processing…
  • @SEATEC2010 Hola!. Con replicación, el servidor 1 debería ser el master y la aplicación debe escribir solo en él. Los cambios llegan a tos otros tres servidores que deben estar configurados como réplicas. La aplicación no debe escribir en las réplicas porque esos cambios no llegan al master.

    Si quisieras instalar un cluster usando los cuatro servidores, hay varias alternativas de configuración, pero lo importante es que la aplicación podría escribir en cualquiera de los servidores, y los cambios se ven en en resto. Es una configuración más compleja, que deberías evaluar luego que tengas claro que tu aplicación lo necesita porque tiene requisitos de alta disponibilidad que no se pueden resolver con configuraciones más simples.

    Saludos.
    Are you sure you want to
    Your message goes here
    Processing…
  • Cual es la diferencia de un cluster y una replicacion? supongamos que tengo 4 servidores MySQL en red con IP estaticos, si deseo insertar un dato en el dervidor 1, esta modificacion se deve reflejar en todos lo servidores, aqui se ocupa la replicacion o el cluster? Por favro necesito algo de Ayuda..Gracias
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • Alternativas de HA en MySQL Ing. Nelson Calero, OCP nelson.calero@gmail.com MySQL Meetup Montevideo 8 de Marzo 2012 1 /47
    • ConceptosDisponibilidad• 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 2/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 altostiempos de MTTR en componentes no afecten ladisponibilidad total del sistema. 3/47
    • Soluciones de HA en MySQLHay varias posibilidades nativas: – Replicación – Storage compartido – ClusterY 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 4/47
    • MySQL - ReplicaciónBasada en transferencia y aplicación de Log Binario del mastera 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ónicaDos thread en cada slave:• obtiene registros de binlog y genera relaylog (I/O thread)• lee relaylog y aplica registros (SQL thread) 5/47
    • MySQL - Replicación "MySQL replication by default is asynchronous. The masterwrites events to its binary log but does not know whether orwhen a slave has retrieved and processed them. Withasynchronous replication, if the master crashes, transactionsthat it has committed might not have been transmitted to anyslave. Consequently, failover from master to slave in this casemay result in failover to a server that is missing transactionsrelative to the master"http://dev.mysql.com/doc/refman/5.5/en/replication-semisync.html 6/47
    • MySQL - Replicación - funcionalidadeshasta 5.1 (2008): 1. log binario de sentencias, registros, o mixto 2. filtro de bases, tablas y transacciones 3. sentencias no determinísticas 4. disponible para Clusteren 5.5 (2010): 1. semisincrónica 2. fsync mejorado en slave 3. recuperación de corrupción en relay log 4. heartbeat 5. filtro de eventos por servidoren 5.6 (m3): 1. replication_event_checksum 7/47
    • Mysql - ReplicaciónSemisincró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 segundo o rpl_semi_sync_slave_enabled = 0/1;• monitoreo o SHOW STATUS LIKE Rpl_semi_sync%; 8/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 9/47
    • MySQL - ReplicaciónSET 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 replicadasrow• almacena datos modificados• lockea solo datos necesarios• recomendado cuando hay poco volumen de cambios 10/47
    • MySQL - Replicaciónbinlog filtrado en master: • SET SQL_LOG_BIN=0 • binlog-do-db, binlog-ignore-dbfiltrada aplicación en slave: • replicate-do/ignore-db/table, replicate-do-table • mysql proxyNOTA: 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) 11/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 autoincrementos o restricciones de unicidad (UKs) o cambios fuera de orden 12/47
    • MySQL - ReplicaciónSentencias inseguras (unsafe) no son replicadas en formatostatement: • no determinísticas• aquellas que pueden retornar valor distinto en slave sysdate(), user, UUID(), etc.• otras sentencias no seguras: update ... limit insert delayed load data infile # desde 5.1.50• algunas no determinísticas se consideran seguras: ej.: curtime(), last_insert_id() 13/47
    • MySQL - ReplicaciónSoporta 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 14/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 disponibilidadhttp://dev.mysql.com/doc/refman/5.5/en/mysql-cluster-replication.html 15/47
    • MySQL - ReplicaciónContras:• 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 16/47
    • Soluciones de HA en MySQLNativas 1. Replicación 2. Storage compartido 3. ClusterDe terceros 1. MMM 2. DRBD 3. Pacemaker 4. Galera 5. Tungsten 17/47
    • MySQL - Storage compartidoActivo/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=offActivo/pasivo• Necesita software de terceros para heartbeat• Failover: o InnoDB aplica recovery o MyISAM necesita que se valide que no hay tablas corruptas: --myisam_recover como opción de arranque o myisamchk antes de levantarlo. 18/47
    • Soluciones de HA en MySQLNativas 1. Replicación 2. Storage compartido 3. ClusterDe terceros 1. MMM 2. DRBD 3. Pacemaker 4. Galera 5. Tungsten 19/47
    • MySQL - ClusterArquitectura shared nothinghttp://dev.mysql.com/doc/mysql-cluster-excerpt/5.1/en/mysql-cluster-overview.html 20/47
    • MySQL - ClusterA partir de mysql 5.5, cluster es una distribución independiente.Actualmente está en producción 7.2Nodo de datos - NDBD - Almacena datos e índices● Desde 7.2 soporta varios procesos (nodos) en mismo hostNodo SQL - mysqld (versión 5.1)• Maneja comunicación con cliente: recibe sentencias SQL y se comunica con nodos de datos para ejecutarlaNodo de Gestión - ndb_mgmd• monitoreo, configuración y control del clusterDatos 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 21/47
    • MySQL - ClusterCaídas soportadasnodo sql:• clientes se desconectan y transacciones no commiteadas se pierdennodo 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 22/47
    • MySQL - ClusterVarias 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) 23/47
    • MySQL - ClusterRecomendado para• transacciones cortas y chicas• sql con joins simples y búsquedas por PK• alta disponibilidadCasos de uso• sistemas de tiempo real• soporte a telefoníaConfiguració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) 24/47
    • MySQL - ClusterLimitaciones• 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 deuna instancia mysql común. http://dev.mysql.com/doc/refman/5.5/en/mysql-cluster-programs-ndb-size-pl.html 25/47
    • MySQL - ClusterMCM: 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 26/47
    • Soluciones de HA en MySQLNativas 1. Replicación 2. Storage compartido 3. ClusterDe terceros 1. MMM 2. DRBD 3. Pacemaker 4. Galera 5. Tungsten 27/47
    • Mysql - Multi Master Managerhttp://mysql-mmm.org/ ● Scripts para monitoreo y failover de replicaciones master/master con un solo nodo soportando escriturasScripts: ● mmm_mond, mmm_agentd, mmm_controlBug 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 28/47
    • Soluciones de HA en MySQLNativas 1. Replicación 2. Storage compartido 3. ClusterDe terceros 1. MMM 2. DRBD 3. Pacemaker 4. Galera 5. Tungsten 29/47
    • MySQL - DRBDDistributed 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) 30/47
    • MySQL - DRBDNecesita software de gestión de cluster para automatizar:• heartbeat / pacemakerVentajas• 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 failovercontras• soportado solo en linux• agrega complejidad• corrupción se propaga• no permite replicar parte de la base 31/47
    • MySQL - DRBDActivo/activo• Sobre GFS/OCFS2• Sólo con MyISAMCon 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-onlySoporta mirroring sincrónico y asincrónico• necesario para WAN, no recomendado para MySQL 32/47
    • Mysql - DRBDPará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 33/47
    • MySQL - DRBDPosibles fallasmaster1. caída del servidor2. tranca sin que falle, no liberando recursos. Requiere fencing del agente de cluster (heartbeat)3. corte del enlace con secundariosecundario1. caída del servidor2. corrupción de datos por fallas en storage3. corte del enlace con master 34/47
    • Soluciones de HA en MySQLNativas 1. Replicación 2. Storage compartido 3. ClusterDe terceros 1. MMM 2. DRBD 3. Pacemaker 4. Galera 5. Tungsten 35/47
    • PacemakerCluster 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 36/47
    • Pacemaker Stackhttp://www.clusterlabs.org/wiki/Architecture#Supported_Cluster_Stacks 37/47
    • Pacemaker Internalshttp://www.clusterlabs.org/wiki/Architecture#Supported_Cluster_Stacks 38/47
    • Pacemakercon 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 opciones Stonith para producción● Probar escenarios ! 39/47
    • PacemakerRecurso:● 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 40/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 41/47
    • Soluciones de HA en MySQLNativas 1. Replicación 2. Storage compartido 3. ClusterDe terceros 1. MMM 2. DRBD 3. Pacemaker 4. Galera 5. Tungsten 42/47
    • MySQL - GaleraReplicación sincrónicahttp://codership.com/products/galera_replication 43/47
    • MySQL - GaleraCaracterí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) 44/47
    • Soluciones de HA en MySQLNativas 1. Replicación 2. Storage compartido 3. ClusterDe terceros 1. MMM 2. DRBD 3. Pacemaker 4. Galera 5. Tungsten 45/47
    • MySQL - Tungsten ReplicatorOpensource, GPL V2, y versión enterprisehttp://www.continuent.orgFuncionalidades • 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/TungstenReplicatorCookbookhttp://code.google.com/p/tungsten-replicator/wiki/Troubleshooting 46/47
    • MySQL - Tungsten ReplicatorConector: • intermedia entre aplicación y BD • implementación nativa MySQL y PostgreSQL • incluye módulo router que se comunica con la BD, e implementa HAReplicator: captura cambios y propaga a otros replicators,usando protocolo propio TLH.Manager: monitorea estado de componente, mediante módulosmonitores: replicator, database y cluster. 47/47