Alta Disponibilidade no MySQL 5.7 para aplicações em PHP
-
Upload
mysql-brasil -
Category
Technology
-
view
573 -
download
6
Transcript of Alta Disponibilidade no MySQL 5.7 para aplicações em PHP
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. |
“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. |
“Quanto % do tempo o sistema deve ficar no ar?”
12
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. |
mysql.com/why-mysql/white-papers/mysql_wp_ha_strategy_guide.php
Escolhendo a melhor solução para sua necessidade
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. |
Replicação em 5 minutos Monte seu lab e comece a brincar
• [blog post] http://www.alastori.com.br/2015/02/tutorial-replicacao-mysql-em-5-minutos.html
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. |
Saiba mais sobre Replicação MySQL com PHP e PECL/mysqlnd_ms Apresentação no PHP Conference
• [slides] slideshare.net/MySQLBR/replicao-mysql-e-php
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. |
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. |
Perguntas?
Alta Disponibilidade no MySQL 5.7 Contato: [email protected] twitter.com/mysqlbr facebook.com/mysqlbr