Alta disponibilidad con MySQL

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 Alta disponibilidad con MySQL

Page 1: Alta disponibilidad con MySQL

conAlta Disponibilidad

Por: Ing. Dennis Cohn Muroy

Page 2: Alta disponibilidad con MySQL

Agenda

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

Page 3: Alta disponibilidad con MySQL

Alta Disponibilidad

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

Page 4: Alta disponibilidad con MySQL

Consideraciones

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

● Tiempo● Hacer uso de equipos de respaldo

● Pérdida de transacciones

Page 5: Alta disponibilidad con MySQL

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: Alta disponibilidad con MySQL

Maestro – Maestro

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

● Datos replicados asíncronamente● Modos:

● Activo – Pasivo ● Activo – Activo

Page 7: Alta disponibilidad con MySQL

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: Alta disponibilidad con MySQL

Activo / Pasivo

Activo Pasivo

Page 9: Alta disponibilidad con MySQL

Activo / Activo

Activo Activo

Page 10: Alta disponibilidad con MySQL

Agregando un nuevo nodo...

Page 11: Alta disponibilidad con MySQL

Anillo con 4 nodos

Page 12: Alta disponibilidad con MySQL

¿Qué hacer en caso de fallo?

Page 13: Alta disponibilidad con MySQL

Detectando nodo con problemas

Page 14: Alta disponibilidad con MySQL

Reconfigurando el anillo

Page 15: Alta disponibilidad con MySQL

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: Alta disponibilidad con MySQL

Maestro – Maestro NO distribuye INSERTs

Page 17: Alta disponibilidad con MySQL

Maestro – Esclavo

● Maestro: Solo escritura● Esclavo: Solo lectura

● 1 Maestro, N Esclavos

Page 18: Alta disponibilidad con MySQL

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: Alta disponibilidad con MySQL

Maestro con un Esclavo

Maestro

Esclavo 1

Page 20: Alta disponibilidad con MySQL

Agregando un segundo esclavo

Maestro

Esclavo 1Esclavo 2

Page 21: Alta disponibilidad con MySQL

En caso el maestro falle...

Maestro

Esclavo 1Esclavo 2

Page 22: Alta disponibilidad con MySQL

Detectando la falla ...

Maestro

Esclavo 1Esclavo 2

Page 23: Alta disponibilidad con MySQL

Promoviendo un Esclavo a Maestro

Maestro

Esclavo 1Maestro

Esclavo 2

Page 24: Alta disponibilidad con MySQL

Maestro – Esclavo: Recomendaciones

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

Page 25: Alta disponibilidad con MySQL

Pero se invierte MUCHO tiempo promoviendo un nuevo maestro.

Page 26: Alta disponibilidad con MySQL

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: Alta disponibilidad con MySQL

Nodo Primario Nodo Secundario

Page 28: Alta disponibilidad con MySQL

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

Page 29: Alta disponibilidad con MySQL

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: Alta disponibilidad con MySQL

Comunicación normal

IPV

Page 31: Alta disponibilidad con MySQL

Nodo activo falla

IPV

Page 32: Alta disponibilidad con MySQL

Heartbeat detecta el fallo

IPV

Page 33: Alta disponibilidad con MySQL

Se redirige el tráfico

IPV

Page 34: Alta disponibilidad con MySQL

Tiempo ... 5 segundos

IPV

Page 35: Alta disponibilidad con MySQL

Se restablece el nodo fallido

IPV

Page 36: Alta disponibilidad con MySQL

Inicia sincronización

IPV

Page 37: Alta disponibilidad con MySQL

¿A dónde debo remitir la consulta?

Page 38: Alta disponibilidad con MySQL

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: Alta disponibilidad con MySQL

Una posible solución ...

Page 40: Alta disponibilidad con MySQL

IPV

“Nodo” Maestro

Esclavo 1 Esclavo 2 Esclavo n

Page 41: Alta disponibilidad con MySQL

¿Qué viene más adelante?

Page 42: Alta disponibilidad con MySQL

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: Alta disponibilidad con MySQL

Referencias

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

(Thalmann, Lars)

Page 44: Alta disponibilidad con MySQL

Gracias

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