Alta Disponibilidade - MySQL

12
Garantindo a alta disponibilidade de um banco de dados, utilizando replicação MySql Master/Master Marcos , Raphael Godoi , Ruth Magnussen Departamento de Informática – Faculdade de Tecnologia de Guaratinguetá - FATEC Caixa Postal 12517-475 – Guaratinguetá– SP – Brasil {nani_rmf,masmil}@hotmail.com, [email protected] Abstract. This article aims at identifying the main features found in services with high availability and their classes and levels, and by means of developing a practical approach a simplified mechanism to ensure high availability through Redundancy server MySQL database, using the concept Replication Master / Master. Resumo. Este artigo tem como objetivo, identificar as principais características encontradas em serviços com alta disponibilidade, bem como suas classes e níveis, e ainda através de uma abordagem prática desenvolver um mecanismo simplificado a fim de garantir a alta disponibilidade através de redundância em servidores de banco de dados MySql, utilizando o conceito de replicação Master/Master. 1. Introdução Garantir a alta disponibilidade de um serviço, é muito mais do que garantir apenas a alta disponibilidade de um equipamento ou dispositivo que está ligado ao serviço, isso significa basicamente, por exemplo, que para garantir que um serviço de hospedagem web esteja sempre disponível, além de garantir a redundância dos servidores é necessário também que todos os equipamentos e procedimentos ligados ao serviço como: link´s de conexão, sistema elétrico, equipamentos de rede, procedimento de backup entre outros tenham alta disponibilidade mesmo que em níveis diferentes. A alta disponibilidade ou Hight Availability (HA) garante a redundância de equipamentos quando existem falhas, ocultando-as na visão do usuário, isso é feito com o auxilio de Software e Hardwares que fazem o gerenciamento dessas falhas, mascarando-as na visão do usuário final, criando uma camada de abstração onde existe em background uma compensação de um equipamento por outro quando necessário. Para entender mais sobre alta disponibilidade faz-se necessário o estudo das classes de disponibilidade.

Transcript of Alta Disponibilidade - MySQL

Page 1: Alta Disponibilidade - MySQL

Garantindo a alta disponibilidade de um banco de dados, utilizando replicação MySql Master/Master

Marcos , Raphael Godoi , Ruth Magnussen

Departamento de Informática – Faculdade de Tecnologia de Guaratinguetá - FATEC Caixa Postal 12517-475 – Guaratinguetá– SP – Brasil

{nani_rmf,masmil}@hotmail.com, [email protected]

Abstract. This article aims at identifying the main features found in services with high availability and their classes and levels, and by means of developing a practical approach a simplified mechanism to ensure high availability through Redundancy server MySQL database, using the concept Replication Master / Master.

Resumo. Este artigo tem como objetivo, identificar as principais características encontradas em serviços com alta disponibilidade, bem como suas classes e níveis, e ainda através de uma abordagem prática desenvolver um mecanismo simplificado a fim de garantir a alta disponibilidade através de redundância em servidores de banco de dados MySql, utilizando o conceito de replicação Master/Master.

1. Introdução

Garantir a alta disponibilidade de um serviço, é muito mais do que garantir apenas a alta disponibilidade de um equipamento ou dispositivo que está ligado ao serviço, isso significa basicamente, por exemplo, que para garantir que um serviço de hospedagem web esteja sempre disponível, além de garantir a redundância dos servidores é necessário também que todos os equipamentos e procedimentos ligados ao serviço como: link´s de conexão, sistema elétrico, equipamentos de rede, procedimento de backup entre outros tenham alta disponibilidade mesmo que em níveis diferentes.

A alta disponibilidade ou Hight Availability (HA) garante a redundância de equipamentos quando existem falhas, ocultando-as na visão do usuário, isso é feito com o auxilio de Software e Hardwares que fazem o gerenciamento dessas falhas, mascarando-as na visão do usuário final, criando uma camada de abstração onde existe em background uma compensação de um equipamento por outro quando necessário. Para entender mais sobre alta disponibilidade faz-se necessário o estudo das classes de disponibilidade.

Page 2: Alta Disponibilidade - MySQL

2. Classes de disponibilidade

2.1. Disponibilidade Básica: A disponibilidade Básica é aquela encontrada em máquinas comuns sem nenhum mecanismo em especial, em software ou hardware, que vise de alguma forma mascarar as eventuais falhas destas máquinas. Costuma-se dizer que máquinas nesta classe apresentam uma disponibilidade de 99% a 99,9% isto equivale a dizer que em um ano de operação a máquina pode ficar indisponível por um período de 9 horas a 4 dias.

2.2 Alta disponibilidade: Adiciona-se mecanismos, especializados de detecção, recuperação e mascaramento de falhas. Nesta classe as máquinas tipicamente apresentam alta disponibilidade na faixa de 99,99% a 99,9999% podendo ficar indisponíveis por um período de pouco mais que 5 minutos até uma hora em um ano de operação. Nesta classe se encaixam grande parte das aplicações comerciais de alta disponibilidade como por ex. Centrais Telefônicas.

2.3 Disponibilidade Continua: Com a adição de noves nas casas decimais, se obtém uma disponibilidade cada vez mais próxima de 100%, diminuindo o tempo de inoperância do sistema de forma que este venha a ser desprezível ou mesmo inexistente. Chega-se então na disponibilidade contínua, o que significa que todas as paradas planejadas, e não planejadas são mascaradas, e o sistema está sempre disponível.

3. Níveis de Alta disponibilidade

Como os sistemas de alta disponibilidade possuem muitos componentes distintos (hardware, software, rede elétrica, procedimentos e etc..). Ocorre que frequentemente não se deseja o mesmo nível de alta disponibilidade em cada componente. Necessita-se que alguns possuam um grau de disponibilidade maior do que outros, e por isso faz sentido decompor o sistema em domínios de disponibilidade, a fim de identificar qual a disponibilidade desejada em cada componente. Está decisão em dividir o sistema em domínios de disponibilidade pode ser tomada por várias razões como: custos, eficiência, falta de tecnologia existente, performance entre outras.

4. Principais características da HA

4.1 Failover: O processo no qual uma máquina assume os serviços de outra, quando esta última apresenta falha, é chamado failover. O failover pode ser automático ou manual, sendo o automático o que normalmente se espera de uma solução de Alta Disponibilidade.

4.2 Failback: Ao ser percebida a falha de um servidor, além do failover é obviamente necessário que se faça manutenção no servidor falho. Ao ser recuperado de uma falha, este servidor será recolocado em serviço, e então se tem a opção de realizar o processo inverso do failover, que se chama failback. O failback é portanto o processo de retorno

Page 3: Alta Disponibilidade - MySQL

de um determinado serviço de uma outra máquina para sua máquina de origem, este processo pode ser automático, manual ou até mesmo indesejado

4.2 Heartbeat: Mecanismo utilizado para monitoração de clusters através de softwares, permitindo o gerenciamento de falhas e a compensação de máquinas.

4.3 Missão: Quando se calcula a disponibilidade de um sistema, é importante que se observe o conceito de missão. Missão de um sistema é o período de tempo no qual ele deve desempenhar suas funções sem interrupção. Por exemplo, uma farmácia, que funcione das 8h às 20h, não pode ter seu sistema fora do ar durante este período de tempo. Se este sistema vier a apresentar defeitos fora deste período, ainda que indesejados, estes defeitos não atrapalham em nada o andamento correto do sistema quando ele é necessário. Uma farmácia 24h obviamente tem uma missão contínua, de forma que qualquer tipo de parada deve ser mascarada.

5. Exemplo replicação MySql Master/Master

O objetivo deste exemplo é criar um serviço web, com redundância de banco de dados utilizando dois servidores MySql Master/Master, garantindo a alta disponibilidade dos dados através de um SCRIPT em PHP, que verifica qual servidor está ativo direcionando a aplicação, e trabalhando sobre o gerenciando do processo de Failover e Failback.

5.1 Componentes

- Servidor web: O servidor web, é o local onde serão armazenadas as aplicações, neste servidor haverá um script em PHP de conexão, que fará um teste com os serviços do MySql em cada servidor, primeiramente ele verificará se o servidor MySql Master/Slave 1 está ativo, caso não esteja ele direcionará a aplicação para o servidor MySql Master/Slave 2, garantindo o funcionamento da aplicação mesmo que o Servidor Master 1 esteja com problemas.

-Servidor MySql Master/Slave 1: Este servidor será o servidor principal e o primeiro servidor que o script de conexão em PHP tentará se conectar.

-Servidor Mysql Master/Slave 2: Este servidor será o espelho do Master 1, enquanto este estiver ativo, ele será o Slave e quando houver algum problema com o servidor Master 1, ele se transformará no servidor principal, trocando de papéis com o Servidor Master/Slave 1.

Page 4: Alta Disponibilidade - MySQL

Figura 1.1 Configuração do Projeto, servidor web XAMPP 1.7.3, com os nós de banco de dados Mysql Master/Slave 1 e Mater/Slave 2

5.2 Funcionamento:

O usuário acessará a aplicação através de seu navegador, a aplicação através do script de conexão fará a verificação de qual servidor MySql está ativo, primeiro é verificado o servidor Master 1, caso ele não esteja ativo, a aplicação passa a utilizar o servidor Master 2. O processo de replicação é simples todos os comandos realizados no MySql Master 1 é replicado para o Master 2, caso ocorra algum problema com o Master 1 o Master 2 assumi o serviço e passa a ser o banco de dados principal das aplicações, até que o Master 1 retorne a funcionar, antes de reassumir seu posto o Master 1 verificará todas as atualizações realizadas no Master 2, se atualizará e voltará como o banco de dados principal.

5.3 Instalação

Servidores Mysql Server 5.1.11

Mysql Query Browzer

1.2.17

Mysql Administrator

1.2.17

XAMP 1.7.3

Servidor Web X

Servidor MySql Master 1

X X X

Servidor MySql Master 2

X X X

Tabela 1 – Indica quais softwares devem estar instalados em cada servidor

Observações: Os softwares instalados acima podem ser configurados tanto em ambiente Linux quanto Windows, no caso deste exemplo o S.O utilizado para os

Page 5: Alta Disponibilidade - MySQL

servidores MySql Master 1 e 2 é o Windows Server 2003 Standard, e para o servidor web está sendo utilizado o Windows 7 Ultimate.

Importante: O exemplo em questão toma como principio, que os servidores MySql estão sendo configurados desde o início e que não foi criada nenhuma base de dados, caso você já possui um servidor MySql em produção os passos serão basicamente os mesmos, contudo você deverá realizar um dump full, no caso de uma replica full, ou o dump de uma determinada base no caso de uma réplica parcial, a partir do servidor MySql Master 1 e carregá-lo no Servidor MySql Master 2 de forma que os dois fiquem sincronizados, ou seja com as mesmas informações, caso o contrário, poderão ocorrer erros na hora de replicar, neste projeto será realizado a Réplica full, o espelhamento total do Master 1, ou seja tudo o que for criado no Master 1, também estará no Master 2 e vice versa.

Como o grande foco do exemplo, é a criação da redundância dos bancos de dados, será abordada somente a configuração da replicação nos servidores Mysql Master/Slave 1 e Master/Slave 2, e a criação do script de verificação dos servidores, que ficará no servidor web.

6. Configuração do Servidor Mysql Master/Slave 1

Pressupondo que o Mysql Server 5.11, MySql Administrator 1.2.17 e MySql Query Browzer 1.2.17 já estejam instalados, iremos começar a configurar o servidor Mysql Master/Slave 1.

6.1 Configurando o servidor como Master/Slave:

Para que seja feita a replicação o servidor Master/Slave 2 deve se conectar no servidor Master/Slave 1, para acessar os log´s das operações realizadas no(s) banco(s) de dado(s) e atualizar-se, então faz se necessário a criação de um usuário com permissões especiais para ser utilizado nesta conexão, o comando abaixo é responsável pela criação deste usuário no Master/Slave 1.

6.1.1 Abra o Query Browzer e execute o comando:

GRANT FILE, SUPER, REPLICATION CLIENT, REPLICATION SLAVE, RELOAD ON *.* TO 'replica'@'%' IDENTIFIED BY 'senhareplica';

6.1.2 Depois de criar o usuário replica, abra o MySql Administrator, e acesse o menu Startup Variables, neste menu você poderá configurar os parâmetros que se encontram no arquivo My.ini (Arquivo de configuração do MySql).

Page 6: Alta Disponibilidade - MySQL

Figura 1.2 – Menu do Mysql Administrator

Acesse a aba replication, e na divisão Geral(General) Informe 1 para o parâmetro server Id, este parametro é responsável pela identificação do servidor, por este motivo é importante que seja unico.

Figura 1.3 – Configuração do parâmetro Server Id

Ainda na aba Replication, mais abaixo econtre a divisão General slave, e habilite o parâmtro Log slave updates, este parâmetro registra todos os comandos enquanto o servidor trabalha como slave.

Page 7: Alta Disponibilidade - MySQL

Deça mais um pouco ainda na aba replication encontre a divisão SLAVE DEFAULT CONNECTION VALUES , está partição é responsável pela conexão entre o Master/Slave 1 e o Master/Slave 2, nela deverá ser informado os seguinte parâmetros:

Master hotname: endereço IP do servidor Mysql Master 2

Master username: nome de usuário do servidor Master 2 utilizado para replicar, no nosso caso replica.

Master password: senha do usuário de replicação

Figura 1.7 – Configuração dos parâmetro para a conexão do Slave 1 com o Master 2

Importante: Clicar no botão Aplly change para gravar as alterações.

Depois de configurar o id do servidor, é necessário ativar os log´s binários, para que o MySql comece a registrar todos os comandos executados, para habilitá-lo clique na aba Log files, e ative o Binary Logfile(Arquivo binário de LOG) clicando no check box, não é necessário informar um nome.

Figura 1.4 – Ativação dos arquivos binários

Page 8: Alta Disponibilidade - MySQL

Após ativar os log´s binários clique no botão Aplly change, e reinice o serviço do MySql, para que as alterações sejam efetivadas, em seguida abra o Mysql Query Browzer e execute o comando abaixo, para reiniciar os logs binários caso já exista algum.

RESET MASTER;

Importantente: Para ter certeza que a instância de replicação foi criada, abra o Mysql Administrator, clique no menu Replication status, e verifique se a instância aparece na tela, caso não apareça nenhuma informação, na parte inferior clique no botão refresh, você deverá visualizar algo parecido com a imagem abaixo, se isso ocorrer seu servidor master/slave 1 foi configurado corretamente.

Figura 1.5 – Instância de replicação

7. Configuração do Servidor Mysql Master/Slave 2

Para configurar o servidor Master/Slave 2 siga os mesmo passos utilizados para configurar o Master/Slave 1, modificando apenas as seguintes informações:

No parâmetro Server Id, informe 2

Figura 1.3 – Configuração do parâmetro Server Id

Page 9: Alta Disponibilidade - MySQL

Na aba Replication, na divisão SLAVE DEFAULT CONNECTION VALUES , informe os seguintes valores, para cada parâmetro:

Master hotname: endereço IP do servidor Mysql Master 1

Master username: nome de usuário do servidor Master 1 utilizado para replicar, no nosso caso replica.

Master password: senha do usuário de replicação

Figura 1.7 – Configuração dos parâmetro para a conexão do Slave 2 com o Master 1

8. Iniciando os servidores

Após configurar os dois servidores Master 1 e Master 2, abra o MySql Query Browzer e execute os comandos abaixo em cada um deles respectivamente,o conjunto de comandos deixarão os arquivos de Log´s dos servidores sincronizados.

Para o processo do servidor escravo.

SLAVE STOP;

Reinicia os Log´s binários.

SLAVE RESET;

Inicia o processo do servidor escravo.

SLAVE START;

Page 10: Alta Disponibilidade - MySQL

Para verificar se o serviço de replicação está ativo, abra o MySql Query Browzer e execute o comando abaixo:

SHOW SLAVE STATUS;

No resultado do comando, observe as colunas abaixo:

Slave_IO_Runing: YES, Indica que o processo log binário do master está em execução.

Slave_SQL_Running: YES, Indica que o processo para execução de comandos está ativo.

Obs: Se os dois parâmetros estiverem como YES o serviço de replicação está funcionando corretamento, caso contrário é preciso analisar a coluna de erro, afim de tentar solucionar o problema.

Page 11: Alta Disponibilidade - MySQL

9. Script de conexão

<?php

/* ----------------------------------------------------------------------------------------------------

objetivo::.conexao com o banco de dados ativo

equipe::.Marcos, Raphael e Rute

função::.conecta a um determinado banco de dados

criado em 06/03/2010

-------------------------------------------------------------------------------------------------------

Observação: o @ utilizado em algumas funções é utilzado para mascarar o erro de execução */

function conexao($ip,$ip_replica,$usuario,$senha,$banco){

//Verifica se o serviço do MySql está ativo no servidor master

if(@fsockopen($ip,3306,$erro,$errono,1)){

$conexao = mysql_pconnect($ip,$usuario,$senha);

echo 'Conectado ao servidor Master';

//Verifica se o serviço do MySql está ativo no servidor Slave

}else if(@fsockopen($ip_replica,3306,$erro,$errono,1)){

$conexao = mysql_pconnect($ip_replica,$usuario,$senha);

echo 'Conectado ao servidor Slave';

}else{

echo 'Nenhum servidor foi encontrado';

}

//Seleciona a base de dados na conexão

mysql_select_db($banco,$conexao) or die ("Erro ao selecionar base de dados: ".mysql_error);

//Seta o Charset

$charset = mysql_set_charset("utf8");

}

/* Parametro 1: Ip do servidor master, Parametro 2: Ip do servidor slave, Parametro 3: Usuário do banco de, dados, Parametro 4: Senha do Banco de dados, Parametro 5: Nome do banco de dados */

conexao('192.168.1.101','192.168.1.105','root','123','fatec');

?>

Page 12: Alta Disponibilidade - MySQL

8. Conclusão

A utilização da replicação Mysql Master/Master em conjunto com um script de conexão na linguagem PHP ou em qualquer outra linguagem com as mesmas características, pode ser um meio interessante de baixo custo, para garantir a alta disponibilidade de aplicativos web com pouco fluxo de informação.

9. Referências

PITANGA, M. Construindo super computadores com Linux: Clusters de alta disponibilidade. Brasil: Brasport, 2008.

Manual de referência do MySql 5.1. Disponível em:

< http://dev.mysql.com/doc/refman/4.1/pt/optimize-overview.html >. Acesso em: 5 set 2010.

Manual de referência do PHP. Disponível em:

< http://php.net/manual/pt_BR/index.php> . Acesso em: 5 ago 2010.

Sociedade Brasileira de Computação. Disponível em:

< http://www.sbc.org.br/ > . Acesso em: 5 ago 2010.

Guia dos revisores Windows Server longhorn beta 3. Disponível para download em:

<http://download.microsoft.com/download/e/3/8/e387f15b-65d8-42c5-8e6f-e089f28b3791/8_altadisponibilidade.pdf. > . Acesso em: 5 ago 2010.