alta disponibilidade no mysql 5.7 para aplicações em php

81
Alta Disponibilidade no MySQL 5.7 para aplicações em PHP Airton Lastori [email protected] Abril-2016

Upload: mysql-brasil

Post on 14-Apr-2017

573 views

Category:

Technology


6 download

TRANSCRIPT

Alta Disponibilidade no MySQL 5.7 para aplicações em PHP

Airton Lastori [email protected] Abril-2016

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

DBA Dev Gerencial, Usuário

ou Professor

Quem?

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Não usa MySQL Usa MySQL sem

HA Usa MySQL com

HA

Quem?

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Agenda

1. Alta disponibilidade (HA) – conceitos básicos

2. Arquiteturas e topologias de HA para MySQL

3. Monitoramento e gerenciamento

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Alta disponibilidade Conceitos básicos

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. | 6

O chefe

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. | 7

O Desenvolvedor

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. | 8

O DBA

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

“Precisamos garantir que a nossa aplicação não pare nunca! Nosso cliente não pode esperar. Perderemos dinheiro e nossa marca ficará prejudicada.”

9

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

“Vamos comprar um NoBreak para o Servidor e está tudo certo!”

10

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

...

11

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

“Quanto % do tempo o sistema deve ficar no ar?”

12

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

“100%, é claro!”

13

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

“Desculpe desapontá-lo, mas disponibilidade infinita não existe. Pense em serviços como abastecimento de água ou energia elétrica... Há necessidade de ter redundância e contingência dos equipamentos e processos+ferramentas para a operação”

14

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

“Chefe, na verdade precisamos de mais 1 servidor para aplicação. É só instalar

uma cópia da aplicação nele e estamos bem. Teremos nosso Cluster!”

15

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

“Na camada de banco não é tão simples assim...”

16

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. | 17

Xiii... Lá vem esse cara complicar...

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Agenda

1. Alta disponibilidade (HA) – conceitos básicos

2. Arquiteturas e topologias de HA para MySQL

3. Monitoramento e gerenciamento

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Alta disponibilidade Conceitos básicos

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Standalone

Clusterizado

20

Problemas diferentes

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Etapas típicas de um projeto de HA

1. Definir qual o tempo máximo de indisponibilidade e perdas aceitáveis

2. Revisar todos intens da infra-estrutura atual que terão contingência (mapear SPoF)

3. Definir a melhor arquitetura e topologia de HA para este contexto

4. Implantar a redundância dos componentes

5. Implantar monitoramento (instrumentação)

6. Implantar procedimentos operacionais para contingência

22

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Etapas típicas de um projeto de HA

1. Definir qual o tempo máximo aceitável de uma indisponibilidade

2. Revisar todos intens da infra-estrutura atual que terão contingência (mapear SPoF)

3. Definir a melhor arquitetura e topologia de HA para este contexto

4. Implantar a redundância dos componentes

5. Implantar monitoramento (instrumentação)

6. Implantar procedimentos operacionais para contingência

23

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Arquiteturas e topologias opções de HA para MySQL 5.7

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Sem Alta disponibilidade

Topologia Simples

Data Access (mysqld)

Data (Storage/HD/SDD)

App Servers

Database connection

25

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Sem Alta disponibilidade no Banco de Dados

Topologia com redundância apenas na Aplicação

Data Access (mysqld)

Data (Storage/HD/SDD)

App Servers

Database connections

27

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Alta disponibilidade no modo Ativo-Passivo

Topologia com redundância via Shared Storage

Data Access (mysqld)

Data (Shared Storage/SAN)

App Servers

Database connections

28

Ativo

Passivo

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

• Oracle Clusterware unifies servers in a server farm to form a cluster

– At the core of Oracle RAC

• Oracle Cluster 12c includes MySQL Server 5.6 agent

• Planned migration and failover of MySQL database

– Hidden from the application

01/05/2016

MySQL Enterprise Edition + Oracle Clusterware

29

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Alta disponibilidade no modo Master-Slave

Topologia com redundância via Replicação Simples

Slave read-only (mysqld)

Data (Storage/HD/SDD)

App Servers

Database connections

30

Read-write

Read-only

Replicação nativa

Master read-write (mysqld)

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Exemplo depois de configurado server-id e log-bin na instância master e restaurado um backup no slave

master> CREATE USER repl_user@%;

master> GRANT REPLICATION SLAVE ON *.* TO repl_user@% IDENTIFIED BY

'repl_user_password';

master> SHOW MASTER STATUS \G

*************************** 1. row ***************************

File: master-bin.000003

Position: 433

slave> CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=3310,

MASTER_USER='repl_user', MASTER_PASSWORD='repl_user_password',

MASTER_LOG_FILE='master-bin.000003', MASTER_LOG_POS=433;

slave> START SLAVE;

32

www.alastori.com.br/2015/02/tutorial-replicacao-mysql-em-5-minutos.html

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Grandes usuários MySQL usam a replicação

33

Web, Cloud, Distribuído e Embarcado…

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Exemplos de uso da Replicação

• Redundância simples dos dados (Contingência)

• Backup

• Geo-redundância (DR)

• Dado mais próximo do cliente

• Escalabilidade de Leituras

– Dividir cargas OLTP e OLAP

– Read-write split

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Exemplos de uso da Replicação

• Redundância simples dos dados (Contingência)

• Backup

• Geo-redundância (DR)

• Dado mais próximo do cliente

• Escalabilidade de Leituras

– Dividir cargas OLTP e OLAP

– Read-write split

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Contingência em caso de falhas ou manutenção programada

Topologia Replicação Simples

Slave read-only (mysqld)

Data (Storage/HD/SDD)

App Servers

Database connections

36

Read-write

Read-only

Master read-write (mysqld)

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Contingência em caso de falhas do Master

Topologia Replicação Simples

Novo Master read-write (mysqld)

Data (Storage/HD/SDD)

App Servers

Database connections Failover

novas rotas para as conexões com o MySQL

manual ou automático

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Contingência em caso de falhas ou manutenção programada

Topologia Replicação Simples

Slave read-only (mysqld)

Data (Storage/HD/SDD)

App Servers

Database connections

38

Read-write

Read-only

Master read-write (mysqld)

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Contingência em caso de manutenção programada do Master

Topologia Replicação Simples

Temporary Master read-write (mysqld)

Data (Storage/HD/SDD)

App Servers

Database connections

39

Read-write

Inativo

Em Manutenção replicação parada

Switchover conexões roteadas para

outro servidor durante manutenção programada

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Componentes para Roteamento

MySQL Connectors

• Funcionalidades nativas de Failover ou Load Balancing

MySQL Router (novo )

• Middleware leve

• Roteamento baseado nas conexões

• Failover para o primeiro disponível ou Load Balancing

MySQL Utilities

• mysqlfailover – monitora a replicação, promove novo master e redireciona slaves

• MySQL Fabric – provê mapeamento da topologia para connector ou router

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Qual biblioteca connector você usa?

Oracle Confidential – Internal/Restricted/Highl

42

<?php phpinfo(); ?> Biblioteca mysqlnd é atual e recomendada, substituindo a

antiga libmysql.

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

PH

P

PH

P M

em

ory

PH

P S

tre

ams

Infrastructure

mysqlnd

MySQL Server

ext/mysql mysqli PDO_mysql

PHP Module (Extension) API

PECL/mysqlnd_ms … PECL/mysqlnd_memcache

mysqlnd: Native Driver PHP para MySQL

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Failover automático para o primeiro disponível

MySQL Router

Slave “read-only” (mysqld)

Data (Storage/HD/SDD)

App Servers

MySQL Router

48

Read-write

Read-only

Master read-write (mysqld)

Heartbeat

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Failover automático para o primeiro disponível

MySQL Router

Novo Master read-write (mysqld)

Data (Storage/HD/SDD)

App Servers

Connections Routing

49

Read-write

Read-only

Antigo Master falhou (mysqld)

Inativo

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Cuidado com aquelas aspas “read-only”

• Se configurado com read-only=0 há risco de inconsistências. –Exemplo de erro: • Falha temporária na conexão entre MySQL Router de apenas uma instância e o

MySQL Master

• Router vai fazer failover para o próximo disponível (slave)

• Uma aplicação escreve no Master, enquanto que outra escreve no slave

• Se configurado com read-only=1 algum processo adicional vai ter que verificar o erro e reconfigurar o servidor. –Talvez a própria aplicação ou um evento no próprio MySQL

50

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Não recomendado uso como Master-Master: sem resolução de conflitos

Topologia de Replicação Cruzada + MySQL Router

51

Master read-write (hot stand-by)

Data (Storage/HD/SDD)

App Servers

MySQL Router

Read-write

Read-only

Master read-write (ativo)

Heartbeat

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Cuidado com Replicação Cruzada ou bi-direcional

• Este setup é bastante controverso, na maioria das vezes evitado

– Porém, tem seus usos, como veremos mais adiante em “proximidade dos dados ao cliente”

• Nesse caso anterior, a replicação cruzada é usada por praticidade

– permite simplificar o failover

– facilita resincronização dos dados em casos de falsos positivos, como falhas temporárias na rede

• É importante monitorar e se ambos servidores estão recebendo escritas, deve-se agir rapidamente para diminuir chances de inconsistências.

52

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Visão geral: mysqlfailover ou MySQL Fabric

MySQL Utilities para HA

Slave read-only (mysqld)

Data (Storage/HD/SDD)

App Servers

Database connections

53

Read-write

Read-only

Master read-write (mysqld)

MySQL Utilities

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

MySQL Utilities

shell> mysqlfailover --master=root@localhost:3331 --discover-slaves-login=root --

log=log.txt

MySQL Replication Monitor and Failover Utility

Failover Mode = auto Next Interval = Mon Mar 19 15:56:03 2012

...

Master Information

Binary Log File Position Binlog_Do_DB Binlog_Ignore_DB

mysql-bin.000001 571

GTID Executed Set

2A67DE00-2DA1-11E2-A711-00764F2BE90F:1-7 [...]

54

mysqlfailover

dev.mysql.com/doc/mysql-utilities/1.6/en/mysqlfailover.html

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

MySQL Utilities

Replication Health Status

+------------+-------+---------+--------+------------+---------+

| host | port | role | state | gtid_mode | health |

+------------+-------+---------+--------+------------+---------+

| localhost | 3331 | MASTER | UP | ON | OK |

| localhost | 3332 | SLAVE | UP | ON | OK |

| localhost | 3333 | SLAVE | UP | ON | OK |

| localhost | 3334 | SLAVE | UP | ON | OK |

+------------+-------+---------+--------+------------+---------+

Q-quit R-refresh H-health G-GTID Lists U-UUIDs L-log entries

55

mysqlfailover

dev.mysql.com/doc/mysql-utilities/1.6/en/mysqlfailover.html

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Exemplos de uso da Replicação

• Redundância simples dos dados (Contingência)

• Backup

• Geo-redundância (DR)

• Dado mais próximo do cliente

• Escalabilidade de Leituras

– Dividir cargas OLTP e OLAP

– Read-write split

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Backup no Slave

Topologia Replicação Simples

Slave parado (mysqld)

Data (Storage/HD/SDD)

App Servers

Database connections

58

Read-write

Inativo

Master read-write (mysqld)

Backup STOP SLAVE Cópia dos dados START SLAVE

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Backup no Slave

Topologia com Replicação Atrasada

Slave parado (mysqld)

Data (Storage/HD/SDD)

App Servers

Database connections

Master read-write (mysqld)

59

Read-write

Read-only

Inativo

dev.mysql.com/doc/refman/5.7/en/replication-delayed.html

Delay CHANGE MASTER TO MASTER_DELAY = N;

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Menor tempo em backups e restores, menos downtime

MySQL Enterprise Backup

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

MySQL Enterprise Backup

1. Sem parar o Master, faça um hot backup

2. Restaure no Slave

3. No Slave execute CHANGE MASTER TO ...

4. Inicie o Slave

61

Crie novos Slaves online

https://dev.mysql.com/doc/mysql-enterprise-backup/4.0/en/advanced.slave.html

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Exemplos de uso da Replicação

• Redundância simples dos dados (Contingência)

• Backup

• Geo-redundância (DR)

• Dado mais próximo do cliente

• Escalabilidade de Leituras

– Dividir cargas OLTP e OLAP

– Read-write split

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Geo-redundância para Disaster Recovery

Topologias com múltiplos slaves

63

Site 1 Master

Site 2 Slave

Ativo Passivo

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Cuidados com replicação via Internet

• Segurança

– Proteja o canal de replicação configurando o suporte nativo a criptografia da replicação do master ao slave.

– CHANGE MASTER TO ... MASTER_SSL_CAPATH* ...

• Revise as configurações de timeouts e retries

• Monitore – Com base no SLA para perdas de dados, defina limites para atrasos e dispare alertas

• Evite usar replicação semi-síncrona

– Se perdas de dados são inaceitáveis, considere um canal de comunicação eficiente

64

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Exemplos de uso da Replicação

• Redundância simples dos dados (Contingência)

• Backup

• Geo-redundância (DR)

• Dado mais próximo do cliente

• Escalabilidade de Leituras

– Dividir cargas OLTP e OLAP

– Read-write split

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Dado mais próximo do cliente

Topologias com múltiplos slaves

66

Master read-write

Slave 1 read-only

Réplica do Master

Slave 2 read-only Réplica do Master

Slave 3 read-only Réplica do Slave 1

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Dado mais próximo do cliente

Topologias com múltiplos masters

67

Master 1 read-write

Master 3 read-write

Master 2 read-write

Master 4 read-write

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Uso da replicação cruzada ou bi-direcional

• Configure auto_increment_offset e auto_increment_increment.

• Cuidado ao usar a replicação bidirecional, pois ela não inclui o conceito de resolução de conflitos.

• Se mais de 1 servidor puder atualizar o mesmo domínio de dados, você poderá ter conflitos que podem ou não serem notados. Se você tiver sorte, a replicação irá parar quando houver conflito (ex. DUPLICATE KEY), mas você não deve contar com isso (ex. UPDATE).

• Se você pretende ter um sistema de alta disponibilidade, você deve garantir, ao nível da aplicação ou permissões, que mais de um servidor não tente atualizar os mesmos dados.

• Mesmo que os dados sejam naturalmente particionados, como por exemplo duas escolas diferentes, é fundamental para colocar restrições locais para garantir que os dados não sejam acidentalmente atualizados no servidor errado.

– Exemplo: quando necessário atualizar dados de outra unidade, a aplicação tem que se conectar ao MySQL “dono do dado” e atualizar as informações lá, e não apenas atualizar as informações localmente e esperar o melhor.

68

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Replicação Semi-síncrona para evitar perda de dados

Topologias resilientes

72

Master Slave

ACK = Confirmação de recebimento dos pacotes

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. | 73

Analogia

73

Carta Simples

Carta AR

Intimação Judicial

Assíncrona sem confirmação do recebimento

Semi-síncrona confirmado recebimento, mas ainda não “processada”

Síncrona confirmado recebimento e processamento (commit)

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Sem perda de dados e failover facilitado com replicação Semi-síncrona

Topologias resilientes com múltiplos slaves

74

Master Slave 1 Primeira opção de failover (sempre mais atualizado)

Slave 2 Segunda opção de failover

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Restrições e recomendações

• A replicação convencional ocorre na camada de acesso aos dados (SQL), portanto funciona com qualquer storage engine, mas recomenda-se InnoDB

• InnoDB é recomendado por ser crash-safe, facilitando operações de crach-recovery e provisionamento via MEB

• Failover automático requer GTID e Row Format

• A replicação do NDB Cluster é diferente da replicação convencional e ocorre na camada de dados

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. | 81

Group Replication: multi-master Ativo-Ativo

Router

App

Virtually Synchronous Replication

App App

labs.mysql.com

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Resumo das opções

Replication Shared Disk

Virtualization Group Replication

Cluster Carrier Grade Edition

Failover Speed Config. Medium High High

Geo-Redundancy High None Config. High

Scaling Read None Read R/W

Ease of Migration From Stand-alone InnoDB to HA

Medium High High Low

Possibility of Transaction Loss During Failure

Config. Low Config. Low

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Monitoramento e Gerenciamento ambientes de HA bem administrados

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. | 85

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. | 86

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. | 87

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. | 88

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. | 89

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

MySQL Utilities

• Binary Log Operations

• Database Operations

• General Operations

• Server Operations

• Specialized Operations

• High Availability Operations

– How Can I Use Replication?

– How Do I Add New Servers to My Topology and Change Master Role

– Setup Automatic Failover

– Restore the Previous Master After Failover

– How Can I Find All of the Slaves Attached to My Master Server?

– How To Check If Data Is Correctly Replicated?

– How To Fix Errant Transactions on the Replication Topology?

91

dev.mysql.com/doc/mysql-utilities/1.6/en/mysql-utils-ha.html

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

MySQL Enterprise Edition Suporte + Backup + Monitor + Workbench + Plug-ins

Escalabilidade Autenticação

Firewall Auditoria

(novo) TDE Criptografia

Oracle Enterprise Manager for MySQL

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Sumário

1. HA não é simples nem de graça

2. O MySQL possui diversas opções para HA

3. Entenda os requisitos, compare as possíveis arquiteturas e topologias, faça a melhor escolha!

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

@MySQLBR meetup.com/MySQL-BR facebook.com/MySQLBR

pt.planet.mysql.com

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Obrigado!

Copyright © 2016 Oracle and/or its affiliates. All rights reserved. |

Perguntas?

Alta Disponibilidade no MySQL 5.7 Contato: [email protected] twitter.com/mysqlbr facebook.com/mysqlbr