replicação mysql e php

49
Airton Lastori [email protected] dez-2011 Replicação MySQL com PHP

Upload: mysql-brasil

Post on 24-May-2015

7.998 views

Category:

Technology


3 download

DESCRIPTION

O recurso de Replicação MySQL tem sido utilizado com sucesso para aumento de performance e disponibilidade por diversas aplicações web no mundo todo, tais como Wikipedia, Twitter e Facebook. Vamos entender como configurar a Replicação MySQL e conectar uma pequena aplicação PHP com o objetivo de compreender os mecanismos que tornam possíveis atender requisitos de alta-performance e alta-disponibilidade. Neste tutorial configuraremos o recurso de Replicação nativa do MySQL e construiremos uma pequena aplicação PHP que atende requisitos de alta-performance e alta-disponibilidade.

TRANSCRIPT

Page 1: Replicação MySQL e PHP

<Insert Picture Here>

Airton Lastori [email protected]

dez-2011

Replicação MySQL

com PHP

Page 2: Replicação MySQL e PHP

agenda

Replicação MySQL

Como configurar

PHP com Replicação MySQL

Page 3: Replicação MySQL e PHP

agenda

Replicação MySQL

Como configurar

PHP com Replicação MySQL

Page 4: Replicação MySQL e PHP

Alguns usuários

Page 5: Replicação MySQL e PHP

fonte: alexa.com/topsites 17-ago-2011

Top websites

Page 6: Replicação MySQL e PHP

Quem usa MySQL – Top 10 Websites

1.Google

2.Facebook

3.Youtube

4.Yahoo!

5.Blogger.com

6.Baidu.com

7.Wikipedia

8.Windows Live

9.Twitter

10.QQ.com

fonte: alexa.com/topsites 17-ago-2011

Page 7: Replicação MySQL e PHP

Por que MySQL é muito utilizado?

1. MySQL: projetado para a Web

2. baixo TCO

3. performance & escalabilidade

4. confiabilidade & disponibilidade

5. LAMP stack

6. facilidade de uso & administração

7. a melhor escolha para SaaS & cloud

8. MySQL Cluster para serviços Web de escala

9. MySQL Enterprise Edition da Oracle

10. MySQL & NoSQL

http://www.mysql.com/why-mysql/white-papers/mysql-wp-top10-webbased-apps.php

Page 8: Replicação MySQL e PHP

Por que MySQL é muito utilizado?

1. MySQL: projetado para a Web

2. baixo TCO

3. performance & escalabilidade

4. confiabilidade & disponibilidade

5. LAMP stack

6. facilidade de uso & administração

7. a melhor escolha para SaaS & cloud

8. MySQL Cluster para serviços Web de escala

9. MySQL Enterprise Edition da Oracle

10. MySQL & NoSQL

http://www.mysql.com/why-mysql/white-papers/mysql-wp-top10-webbased-apps.php

Page 9: Replicação MySQL e PHP

READS

WRITES

Clie

nts

Master

Slaves

Replicação do MySQL Server cenário usual

Page 10: Replicação MySQL e PHP

Throughput e Latência... para determinado volume de

leituras e escritas.

Read-intensive ou Write-intensive? Ambos?

Mantém os mesmos níveis quando for necessário

escalar?

Requisitos de Performance

Page 11: Replicação MySQL e PHP

Necessidade de escalar MySQL + PHP

408 Request Time out

503 Service Unavailable

1040 SQLSTATE: 08004 (ER_CON_COUNT_ERROR)

– Too many connections

Page 12: Replicação MySQL e PHP

Benefício-chave

• O MySQL permite economias

significativas com custos de

hardware, adicionando novos

servidores commodity de

acordo com o necessário e de

maneira incremental

Por que MySQL? • Capacidade de escalar

conforme necessidade e de

maneira incremental

• Baixos custos e flexibilidade

Wikipedia

mysql.com/customers

Caso de sucesso

Page 13: Replicação MySQL e PHP

Master

Slave

Clie

nts

Slaves

Master

Relay

Reads

Writes

Relays: aplicações de leitura intensiva

Page 14: Replicação MySQL e PHP

Benefícios-chave

• Flexibilidade para escolher o

hardware

• Implementação incremental

• Simplicidade e facilidade de uso

• Por que MySQL? • Capacidade de escalar para 5

bilhões de page views por mês,

gerando 1 escrita para cada 1,4

leituras

• Flexibilidade para crescer de

maneira incremental e com baixos

custos

mysql.com/customers

Caso de sucesso

Page 15: Replicação MySQL e PHP

Sharding: aplicações de escrita intensiva

Master

Slave

Clie

nts

Slaves

Shards

Reads

Writes

Partitioning Logic

1 2 3 4 5

Page 16: Replicação MySQL e PHP

Quantos “9s” de disponibilidade?

Failover automático ou manual?

Dados distribuídos e replicados:

Replicação assíncrona , semi-síncrona ou síncrona?

Resincronização automática?

Redundância geográfica?

Requisitos de disponibilidade

Page 17: Replicação MySQL e PHP

% 9 9 9 9 35 dias 4 days 50 min 5 min 8 horas

Replicação

ISPs &

Corporativo

On-Line

Services

eCommerce

Telecoms

Militar

.

Replication

9 . 4 dias

Cu

sto

& C

om

ple

xid

ad

e

Alta disponibilidade

Page 18: Replicação MySQL e PHP

% 9 9 9 9 35 dias 4 days 50 min 5 min 8 horas

Replicação

Clustering &

Virtualização

Clustering &

Redundância

Geográfica

ISPs &

Corporativo

On-Line

Services

eCommerce

Telecoms

Militar

. 9 .

4 dias

Cu

sto

& C

om

ple

xid

ad

e

Alta disponibilidade

Page 19: Replicação MySQL e PHP

• Backup

• diminuir carga servidor

• atraso programado

• Análise

• Datamarts

• DW

• Integração

• dataset completo

• dataset parcial

Outros usos da replicação

Page 20: Replicação MySQL e PHP

MySQL Enterprise Monitor • Auto-detecta topologia • Agrupa e mantém Master/Slave • Verificações do status e

sincronização em tempo real • Dados consolidados de todos

servidores • Notificação de problemas com

sincronização • Postura pró-ativa ao invés de

reativa • Aumenta disponibilidade

Boa prática: monitoramento

edelivery.oracle.com

trial 30 dias

Page 21: Replicação MySQL e PHP

1. Operação de Escrita

Aplicação

2. Mudanças

escritas no binlog

Replicação MySQL: como funciona

4. SQL Thread

aplica mudanças

do relaylog para o

MySQL

3. I/O Thread copia

mudanças do binlog

para relaylog

Master Slave

• Recurso nativo do MySQL

• Modelo assíncrono (padrão) ou semi-síncrono (5.5)

• Slave adiciona carga mínima ao Master

Page 22: Replicação MySQL e PHP

Replicação MySQL: como escalar

Writes & Reads Reads Reads

• Escreva para 1 Master

• Leia de vários Slaves, adicione mais quando necessário

• Perfeito para aplicações de leitura intensiva

Aplicação

Replicação MySQL

Load Balancer

Master Slave Slave

Page 23: Replicação MySQL e PHP

Formatos de replicação 1/2

Statement-based

› comando SQL do Master é

executado no Slave

› formato padrão

› única opção MySQL 5.0 e anterior

› [+] binlog é usualmente menor,

principalmente quando statement

afeta mais de uma linha

› [-] alguns statements não podem

ser replicados, principalmente

dependentes de functions não-

determinísticas

Row-based

› o dado do Master é aplicado no

Slave, sem necessidade de ser

interpretado

› MySQL 5.1 e posterior oferece

essa opção

› [+] formato mais seguro, pois

todos dados serão replicados

› [+] gera menos locks tanto no

Master quanto no Slave

› [-] maior tempo de propagação,

mais dados precisam trafegar

› [-] não permite concurrent insert

no MyISAM no Slave

dev.mysql.com/doc/refman/5.5/en/replication-formats.html

Page 24: Replicação MySQL e PHP

Formatos de replicação 2/2

Mixed-based – melhor dos dois mundos! • Servidor muda dinamicamente o formato de acordo com a

melhor situação • Quando configurada, o formato statement-based é utilizado

como padrão mas vai mudar para row-based baseado no melhor caso

dev.mysql.com/doc/refman/5.5/en/replication-formats.html

Page 25: Replicação MySQL e PHP

MySQL Replication Whitepaper mysql.com/why-mysql/white-papers/mysql-wp-replication.php

MySQL Newsletter – Ed. Especial: Scaling with MySQL mysql.com/news-and-events/newsletter/2010/2010-09sp.html

Casos de sucesso Scale-out mysql.com/why-mysql/scaleout

MySQL 5.5 Replication Docs dev.mysql.com/doc/refman/5.5/en/replication.html

MySQL Enterprise Edition Whitepaper mysql.com/why-mysql/white-papers/mysql_wp_enterprise_ready.php

Links

Page 26: Replicação MySQL e PHP

agenda

Replicação MySQL

Como configurar

PHP com Replicação MySQL

Page 27: Replicação MySQL e PHP

Configurar Replicação: visão geral

Cenário básico: 1 Master e 1 Slave 1. configure usuários 2. configure como Master e como Slave 3. instrua o Slave a se conectar ao Master e replicar

o binlog

dev.mysql.com/doc/refman/5.5/en/replication-howto.html

binlog relaylog

Master Slave

replicação

Page 28: Replicação MySQL e PHP

Master

1. Crie uma conta no Master para

que a I/O Thread do Slave possa

se conectar via TCP/IP:

mysql> CREATE USER 'repl'@'%'

IDENTIFIED BY 'slavepass';

2. Dê as permissões necessárias

para conexão e gerenciamento da

replicação:

mysql> GRANT REPLICATION SLAVE,

REPLICATION CLIENT ON *.* TO

'repl'@'%';

Slave

Nenhuma ação necessária

Passo 1/3: configure usuários

dev.mysql.com/doc/refman/5.5/en/replication-howto.html

Page 29: Replicação MySQL e PHP

Master

1. Pare o mysqld e edite o arquivo

de configuração

2. Habilite o binlog

3. Especifique um server_id único

4. Reinicie o mysqld

[mysqld]

log_bin=mysql-bin

server_id=10

Slave

1. Pare o mysqld e edite o arquivo

de configuração

2. Habilite o binlog (Opcional)

3. Especifique um server_id único

4. Reinicie o mysqld

5. Clone os dados com MySQL

Enterprise Backup ou mysqldump $mysqldump --single-transaction --all-databases --

master-data=1 --host=servername1 | mysql –

host=servername2

[mysqld]

server_id=15

Passo 2/3: configure Master e Slave

dev.mysql.com/doc/refman/5.5/en/replication-howto.html

Page 30: Replicação MySQL e PHP

Master

Determine a posição atual do log

binário:

sessão 1 mysql> FLUSH TABLES WITH READLOCK;

sessão 2 mysql> SHOW MASTER STATUS \G

File: mysql-bin.000003

Position: 78

Slave

Inicie a replicação:

mysql> CHANGE MASTER TO

MASTER_HOST='localhost',

MASTER_port=3306,

MASTER_USER='repl',

MASTER_PASSWORD='slavepass',

MASTER_LOG_FILE='mysql-bin.000003',

MASTER_LOG_POS=n;

mysql> START SLAVE;

mysql> SHOW SLAVE STATUS \G

Prefira executar este comando ao

invés de adicionar ao arquivo de

configuração para permitir trocar de

Master sem parar o Slave.

dev.mysql.com/doc/refman/5.5/en/replication-howto.html

Passo 3/3: instrua o Slave a replicar

Page 31: Replicação MySQL e PHP

agenda

Replicação MySQL

Como configurar

PHP com Replicação MySQL

Page 32: Replicação MySQL e PHP

Ambiente de testes Windows 1/3

1. Web server Apache HTTPd ou Glassfish ou MS-IIS ou nginx etc

2. PHP runtime versão 5.3.6 ou superior

3. MySQL Server 1 Master e 1 Slave, versão 5.5, BD Sakila

4. Ferramentas MySQL Workbench, Netbeans, Notepad++ etc

Para facilitar usaremos bundles: • XAMPP for Windows v1.7.7

• Apache 2.2.21 • MySQL 5.5.16 • PHP 5.3.8 • ...

• MySQL Installer for Windows • MySQL Server 5.5.18 • MySQL Workbench 5.2.35 • BD Sakila, Documentação, Connectors

Page 33: Replicação MySQL e PHP

Ambiente de testes Windows 2/3

1. XAMPP for Windows apachefriends.org/pt_br/xampp.html

a. Baixar ZIP e descompactar na pasta C:\XAMPP b. Modificar a porta do MySQL para rodar 2 instâncias na mesma máquina: C:\xampp\mysql\bin\my.ini

mysqld]

port= 3307

c. (Opcional) Modificar a porta do Apache: C:\xampp\apache\conf\httpd.conf

Listen 81

d. C:\xampp\xampp_start.exe

2. MySQL Installer dev.mysql.com/downloads/installer

a. Instalar todas opções padrão, já será inicializado como serviço -defaults-file="C:\ProgramData\MySQL\MySQL Server 5.5\my.ini"

3. (Opcional) Netbeans netbeans.org

Page 34: Replicação MySQL e PHP

Ambiente de testes Windows 3/3

1. Verificar instalação a. Criar arquivo info.php em C:\xamp\htdocs <?php phpinfo(); ?> b. Acessar: http://localhost:81/info.php

Page 35: Replicação MySQL e PHP

<?php

echo "<h1>Master</h1>";

$connection_m = mysqli_connect('localhost', 'root', 'root', 'sakila', '3310');

if (!$connection_m) {

echo 'Error: ' + mysqli_connect_error();

} else {

$result_m = mysqli_query($connection_m, 'SELECT film_id, title, release_year FROM film ORDER

BY film_id DESC LIMIT 5');

if (!$result_m) {

echo 'Error: ' + mysqli_error();

} else {

echo "<table>\n";

while ($row = mysqli_fetch_assoc($result_m)) {

printf("<tr><td>%s</td><td>%s</td><td>%s</td></tr>\n",

htmlentities($row['film_id']),

htmlentities($row['title']),

htmlentities($row['release_year']));

} //end while

echo "</table>\n";

mysqli_free_result($result_m);

} //end if

mysqli_close($connection_m);

} //end if

// REPETIR PARA SLAVE

?>

Exemplo: conectando ao MySQL

Page 36: Replicação MySQL e PHP

Teste: quando o Master cai

1. Teste se Update propaga para Slave mysql> UPDATE `sakila`.`film` SET `release_year`=2008 WHERE `film_id`='1000';

2. Parar o servidor Master

"C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqladmin" --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.5\my.ini" shutdown -uroot –p

3. Slave contém os dados

replicados e pode ser usado para failover

Page 37: Replicação MySQL e PHP

Drivers PHP para MySQL (extensões)

ext/mysql

• depricated: uma das primeiras PHP extensions, mantido para PHP 4, sem novas funcionalidades no PHP 5

• novas funcionalidades do MySQL não são suportadas

mysqli

• suporte completo às funcionalidades MySQL

• Ativamente mantido e suportado pela Oracle

PDO_mysql

• o PHP Data Objects define uma inferface leve e consistente para acessar vários BDs

• boa opção para aplicações simples e portáveis

Page 38: Replicação MySQL e PHP

PH

P

PH

P M

em

ory

PH

P S

tre

am

s

Infrastructure

mysqlnd

MySQL Server

ext/mysql mysqli PDO_mysql

PHP Module (Extension) API

PHP 5.3 e mysqlnd – Native Driver

PECL/mysqlnd_ms … …

Page 39: Replicação MySQL e PHP

mysqlnd Statistics

• Por volta de 150 estatisticas coletadas

• mysqli_get_client_stats(), mysqli_get_connection_stats()

Page 40: Replicação MySQL e PHP

PECL/mysqlnd_ms PHP mysqlnd replication plugin

Automatic read/write splitting

• can be controlled with SQL hints

• can be replaced providing callback

• can be disabled for MySQL Cluster use

Load Balancing

• random (pick for every statement or once per request, latter is default)

• round robin (iterate per statement)

• can be replaced providing callback

• can be controlled with SQL hint

Fail over

• optional, automatic connect fail over

Connection pooling

• Lazy connections (don’t open before use, default)

Stable NOV-11

Page 41: Replicação MySQL e PHP

Transparência para aplicação

Page 42: Replicação MySQL e PHP

Exemplo: split e load balancing

Page 43: Replicação MySQL e PHP

Limitações do PECL/mysqlnd_ms

1. nem todos cenários de consistência são

suportados (non-ACID): por exemplo, consistência forte onde os clientes tem sempre a mesma visão após um update http://blog.ulf-wendel.de/2011/consistency-cloud-and-the-php-mysqlnd-replication-plugin/

2. não suporta topologias com mais de 1 master

3. para spliting são considerados SELECT e não é

suportado multiplos statements inline

4. native prepared statements não são suportados, a não ser client-side prepared statement emulation (como no caso do PDO_MySQL)

Page 44: Replicação MySQL e PHP

MySQL com PHP dev.mysql.com/usingmysql/php

Connector/PHP User Manual dev.mysql.com/doc/refman/5.5/en/apis-php.html

Documentação PECL/mysqlnd_ms php.net/mysqlnd_ms

Blog Ulf Wendel blog.ulf-wendel.de/2011/112-stable-release-of-the-replication-and-load-

balancing-plugin-for-php

Links

Page 45: Replicação MySQL e PHP

Mais sobre MySQL

Page 46: Replicação MySQL e PHP

MySQL Treinamento e Certificação

MySQL Boot Camp

Accelerated

MySQL Performance

Tuning Boot Camp

Accelerated

MySQL for Begginers

MySQL for Database

Administrators

MySQL Performance

Tuning

MySQL High

Availability

MySQL Cluster

MySQL DBA

MySQL Boot Camp

Accelerated

MySQL for Developers

MySQL Performance

Tuning Boot Camp

Accelerated

MySQL for Begginers

MySQL and PHP

Developing Dynamic

Web Applicationg

MySQL Advanced

Stored Procedures

MySQLDeveloper

http://education.oracle.com

Treinamentos

Certificações

Opcional

Necessário

Page 47: Replicação MySQL e PHP

07-dez-2011

Registre-se: http://bit.ly/usLQoD

Page 48: Replicação MySQL e PHP

Sumário

O PHP é uma importante linguagem que ajudou a tornar o MySQL o

Banco de Dados Open Source mais popular do mundo.

O recurso de replicação nativo do MySQL é fácil de configurar e pode

ser usado para aumento de performance e disponibilidade de

aplicações PHP.

O driver nativo mysqlnd em conjunto com plug-in PECL/mysqlnd_ms

podem fazer load balancing e failover de maneira transparente para

aplicações PHP.

Page 49: Replicação MySQL e PHP

Obrigado!

Time MySQL Brasil

[email protected] [email protected] [email protected] [email protected]

@MySQLBR meetup.com/MySQL-BR