replicação mysql e php

Post on 24-May-2015

7.998 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

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

<Insert Picture Here>

Airton Lastori airton.lastori@oracle.com

dez-2011

Replicação MySQL

com PHP

agenda

Replicação MySQL

Como configurar

PHP com Replicação MySQL

agenda

Replicação MySQL

Como configurar

PHP com Replicação MySQL

Alguns usuários

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

Top websites

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

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

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

READS

WRITES

Clie

nts

Master

Slaves

Replicação do MySQL Server cenário usual

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

Necessidade de escalar MySQL + PHP

408 Request Time out

503 Service Unavailable

1040 SQLSTATE: 08004 (ER_CON_COUNT_ERROR)

– Too many connections

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

Master

Slave

Clie

nts

Slaves

Master

Relay

Reads

Writes

Relays: aplicações de leitura intensiva

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

Sharding: aplicações de escrita intensiva

Master

Slave

Clie

nts

Slaves

Shards

Reads

Writes

Partitioning Logic

1 2 3 4 5

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

% 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

% 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

• Backup

• diminuir carga servidor

• atraso programado

• Análise

• Datamarts

• DW

• Integração

• dataset completo

• dataset parcial

Outros usos da replicação

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

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

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

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

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

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

agenda

Replicação MySQL

Como configurar

PHP com Replicação MySQL

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

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

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

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

agenda

Replicação MySQL

Como configurar

PHP com Replicação MySQL

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

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

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

<?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

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

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

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 … …

mysqlnd Statistics

• Por volta de 150 estatisticas coletadas

• mysqli_get_client_stats(), mysqli_get_connection_stats()

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

Transparência para aplicação

Exemplo: split e load balancing

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)

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

Mais sobre MySQL

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

07-dez-2011

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

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.

Obrigado!

Time MySQL Brasil

marcos.trujillo@oracle.com airton.lastori@oracle.com marcelo.t.souza@oracle.com ana.guiselini@oracle.com

@MySQLBR meetup.com/MySQL-BR

top related