MySQL - Alta Disponibilidad

44
con Alta Disponibilidad Por: Ing. Dennis Cohn Muroy

description

Este archivo fue presentado en el Linux Week 2010 en la Pontificia Universidad Católica del Perú. Muestra una posible solución para resolver los problemas relacionados con la alta disponibilidad de Bases de Datos MySQL

Transcript of MySQL - Alta Disponibilidad

Page 1: MySQL - Alta Disponibilidad

conAlta Disponibilidad

Por: Ing. Dennis Cohn Muroy

Page 2: MySQL - Alta Disponibilidad

Agenda

● Alta disponibilidad● Replicación● DRBD● Heartbeat● Ruteando las consultas● Mejoras esperadas

Page 3: MySQL - Alta Disponibilidad

Alta Disponibilidad

● Servicios siempre disponibles● Tolerancia a Fallos● Redundancia y Sistemas de reemplazo

Page 4: MySQL - Alta Disponibilidad

Consideraciones

● Puntos de Falla (Redundancia)● Factibilidad de eliminar nodos

● Tiempo● Hacer uso de equipos de respaldo

● Pérdida de transacciones

Page 5: MySQL - Alta Disponibilidad

Replicación

● Replicar datos de un servidor MySQL (maestro) a otro (maestro / esclavo)

● Herramienta asíncrona● Usos

● Escalar soluciones: distribuir carga.● Seguridad de datos: backup a nivel de esclavos● Distribución de datos (grandes distancias)

Page 6: MySQL - Alta Disponibilidad

Maestro – Maestro

● Insertar / modificar registros en más de una instancia MySQL

● Datos replicados asíncronamente● Modos:

● Activo – Pasivo ● Activo – Activo

Page 7: MySQL - Alta Disponibilidad

Maestro – Maestro: Configuración

Pasos a aplicar a cada nodo:

● Crear usuario con permiso de replicación

● Editar /etc/my.cfg

● Indicar usuario a usar (CHANGE MASTER TO)

● Iniciar la función de escucha (start slave)

● Revisar los estados● show master status\G;● show slave status\G;

log-bin

binlog-do-db=<bd a replicar>

binlog-ignore-db=<bd ignorar>

server-id=<entero único>

Page 8: MySQL - Alta Disponibilidad

Activo / Pasivo

Activo Pasivo

Page 9: MySQL - Alta Disponibilidad

Activo / Activo

Activo Activo

Page 10: MySQL - Alta Disponibilidad

Agregando un nuevo nodo...

Page 11: MySQL - Alta Disponibilidad

Anillo con 4 nodos

Page 12: MySQL - Alta Disponibilidad

¿Qué hacer en caso de fallo?

Page 13: MySQL - Alta Disponibilidad

Detectando nodo con problemas

Page 14: MySQL - Alta Disponibilidad

Reconfigurando el anillo

Page 15: MySQL - Alta Disponibilidad

Maestro – Maestro: Recomendaciones

● AUTO_INCREMENT:● auto_increment_increment● auto_increment_offset

● Considerar redundancia:● Recursos del nodo = suma recursos consumidos

por cada nodo

● MySQL Multi Master Replicator Manager (MMM)

Page 16: MySQL - Alta Disponibilidad

Maestro – Maestro NO distribuye INSERTs

Page 17: MySQL - Alta Disponibilidad

Maestro – Esclavo

● Maestro: Solo escritura● Esclavo: Solo lectura

● 1 Maestro, N Esclavos

Page 18: MySQL - Alta Disponibilidad

Maestro – Esclavo: Configuración

● Maestro: crear usuario; permiso de replicación

● Maestro: /etc/my.cfg

● Maestro: Verificar estado

● Esclavo: /etc/my.cfg

● Esclavo: Indicar usuario a usar (CHANGE MASTER TO)

● Iniciar la función de escucha (start slave)

● Esclavo: Verificar estado

server-id=<entero único>

log-bin

binlog-do-db=<bd a replicar>

binlog-ignore-db=<bd ignorar>

server-id=<entero único>

Page 19: MySQL - Alta Disponibilidad

Maestro con un Esclavo

Maestro

Esclavo 1

Page 20: MySQL - Alta Disponibilidad

Agregando un segundo esclavo

Maestro

Esclavo 1Esclavo 2

Page 21: MySQL - Alta Disponibilidad

En caso el maestro falle...

Maestro

Esclavo 1Esclavo 2

Page 22: MySQL - Alta Disponibilidad

Detectando la falla ...

Maestro

Esclavo 1Esclavo 2

Page 23: MySQL - Alta Disponibilidad

Promoviendo un Esclavo a Maestro

Maestro

Esclavo 1Maestro

Esclavo 2

Page 24: MySQL - Alta Disponibilidad

Maestro – Esclavo: Recomendaciones

● InnoDB en el maestro (transacciones)● MyISAM en el esclavo (solo lectura)● Separar: Relay logs – archivos de datos

Page 25: MySQL - Alta Disponibilidad

Pero se invierte MUCHO tiempo promoviendo un nuevo maestro.

Page 26: MySQL - Alta Disponibilidad

DR:BD

● Raid 1 a nivel de red● Nodo primario / secundario● Modos de trabajo:

● Síncrono: – Escritura en disco = activo + pasivo

● Asíncrono: – Escritura en disco = activo

Page 27: MySQL - Alta Disponibilidad

Nodo Primario Nodo Secundario

Page 28: MySQL - Alta Disponibilidad

¿Cómo interactuar con la réplica en caso la base de datos primaria falle?

Page 29: MySQL - Alta Disponibilidad

Heartbeat

● Migración de servicio + ip de un nodo a otro

● Comunicación entre 2 nodos:● Estado de procesos en el otro nodo

Page 30: MySQL - Alta Disponibilidad

Comunicación normal

IPV

Page 31: MySQL - Alta Disponibilidad

Nodo activo falla

IPV

Page 32: MySQL - Alta Disponibilidad

Heartbeat detecta el fallo

IPV

Page 33: MySQL - Alta Disponibilidad

Se redirige el tráfico

IPV

Page 34: MySQL - Alta Disponibilidad

Tiempo ... 5 segundos

IPV

Page 35: MySQL - Alta Disponibilidad

Se restablece el nodo fallido

IPV

Page 36: MySQL - Alta Disponibilidad

Inicia sincronización

IPV

Page 37: MySQL - Alta Disponibilidad

¿A dónde debo remitir la consulta?

Page 38: MySQL - Alta Disponibilidad

Ruteando las consultas

● Maestro: Insert, Update, Delete● Esclavo: Select● Tipos

● Enlazado con la aplicación– Implementación– SQL Relay

● Transparente– MySQL Proxy– Tungsten

Page 39: MySQL - Alta Disponibilidad

Una posible solución ...

Page 40: MySQL - Alta Disponibilidad

IPV

“Nodo” Maestro

Esclavo 1 Esclavo 2 Esclavo n

Page 41: MySQL - Alta Disponibilidad

¿Qué viene más adelante?

Page 42: MySQL - Alta Disponibilidad

Mejoras esperadas

● Replicación Master – Master en anillo. Remover elementos del anillo con un solo comando

● Inclusión de un MySQL Heartbeat● Auto recuperación del relay log (CRASH)● Agregar soporte semi – síncrono (Google)

● MySQL 5.4 / MySQL 6.0

Page 43: MySQL - Alta Disponibilidad

Referencias

● High Performance MySQL● Building Scalable Web Sites● DR:BD [www.drbd.org]● MySQL [www.mysql.com]● MySQL Replication Features

(Thalmann, Lars)

Page 44: MySQL - Alta Disponibilidad

Gracias

Ing. Dennis Cohn [email protected] me: @denniscm20