Para o administrador de bancos de dados que já está acostumado a trabalhar com servidores MySQL, é sabido que um dos assuntos que mais se debate internet e mundo afora é a replicação de dados que, de maneira nativa, já vem disponível no MySQL desde sua versão 4. Esse debate foca principalmente na melhor maneira de expandir este recurso sem que haja perda na confiabilidade de seu funcionamento e perda da consistência dos dados replicados, independente da topologia a ser utilizada pelo ambiente.
Considerando os tipos ou protocolos de replicação que temos hoje disponíveis nativamente no MySQL, podemos citar:
· replicação assíncrona: que é de longe a mais utilizada, onde um servidor atua como MASTER com vários SLAVES;
· replicação semi-síncrona: que além de um servidor atuar como MASTER com vários SLAVES, o servidor MASTER também aguarda a confirmação da aplicação da transação atual por um dos SLAVES para então iniciar a execução da próxima. Isso seria uma espécie de acknowledge (i.e. ack) que é enviado ao servidor mestre pelo servidor escravo;
· replicação síncrona: presente na solução conhecida como MySQL Cluster (NDB Cluster), onde os vários nós ou servidores são organizados como membros de um cluster e cada transação executada em qualquer dos SQL/App nodes ou nós de aplicação utilizam Two Phase Commit, executando no nó onde ela foi iniciada e posteriormente no armazenamento de dados do cluster. Ao final da execução é retornado um OK.
Enquanto o MySQL Cluster utiliza o termo “nó” ou “nodo” para cada uma das máquinas que são interligadas, a replicação admite que cada máquina ou é um servidor MASTER ou SLAVE, onde cada MASTER tem vários SLAVES e um SLAVE tem apenas um MASTER. Isso era assim até o lançamento, no MySQL 5.7 DMR 6, de um outro tipo de replicação denominado MultiSource/MultiChannel Replication, onde cada SLAVE pode ter vários MASTERS.
Dos três tipos de replicação nativos citados, fica evidente uma escala entre aquele que tem maior (assíncrono) e menor (síncrono) poder de processamento de transações. Por outro lado, precisamos analisar também qual é o método que permite maior confiabilidade e consistência da informação. Nesse caso, a escala é inversamente proporcional, pois o método síncrono é o mais seguro, seguido pelo semi-síncrono e, finalmente, pelo assíncrono.
Além das funcionalidades nativas do MySQL, existem várias empresas que investem em produtos para entregar replicação mais eficiente, mais confiável, de várias formas e topologias, resultando em maior resiliência em operações de failover e switchover (processo de detecção de falha e troca de um servidor MASTER para um dos SLAVES existentes). Todo esse processo pode não ser trivial dependendo da quantidade de servidores a serem analisados no momento de uma falha, pois nada impede de um servidor ter um número de transações maior que outro e isso pode trazer problemas de inconsistências e falta de confiabilidade no método de replicação adotado (Errant Transaction).
Foi pensando em toda essa conceituação que a empresa Finlandesa Codership Oy iniciou um projeto denominado Galera Cluster, que faz uso da interface aberta do (pluggable database) MySQL para se conectar a produtos externos e orquestrar o seu funcionamento. Uma vez adicionada a nova camada de controle dos dados e feitas algumas configurações, os servidores já poderão ser agrupados em um cluster. Nesse sentido, teríamos um ambiente com replicação entre vários servidores chamados de nós. Estes trabalham em replicação MASTER/MASTER, com:
· validação de pacotes (Write-Sets) através de replicação baseada em certificação;
· controle de valores auto incremento (PK) para que não haja violação de chaves primárias definidas com a propriedade auto_increment.
Isto permite realizar todo tipo de leitura e escrita de dados em qualquer um dos componentes do cluster, seja este localizado em uma LAN ou WAN.
Galera Cluster
O Galera Cluster, que tem como seu coração a API denominada WSREP (ou Write-Set Replication API), é uma camada de abstração de dados que, se adicionada ao MySQL, possibilita que vários servidores de bancos de dados sejam organizados de forma interligada onde cada máquina é reconhecida como um nó de um cluster.
O cluster pode ser formado por N servidores físicos e/ou virtuais. Tal organização faz com que não exista a necessidade de failover dentro de um mesmo cluster, pois todos os servidores de bancos de dados MySQL que compõem a implementação possuem o mesmo conjunto de dados. A obtenção do mesmo conjunto de dados é realizada através de uma replicação denominada virtualmente síncrona, processo este que é umas das principais características do produto. Falaremos mais sobre sincronia virtual e transações mais à frente.
A adição das configurações para habilitação da API do Galera Cluster ao MySQL é realizada através do arquivo de configuração do próprio MySQL, geralmente localizado em /etc ou /etc/mysql. Sabemos que toda vez que o MySQL é iniciado, o arquivo de configuração é lido e as variáveis com seus respectivos valores são carregadas em memória. A API tem suas variáveis que devem ser adicionadas a tal arquivo para que seu plugin possa ser carregado e suas configurações se tornem disponíveis ao MySQL através de algum cliente.
A WSREP API, por sua vez, ainda conta com outros dois componentes:
· A WSREP Hook, que é o conector de integração à extensão do modelo nativo de replicação do MySQL;
· A função dlopen() que é quem provê o canal de integração entre MySQL e o conector WSREP Hook.
Além disso, existe ainda o Galera Replication Plugin. Este é responsável pelo processo de certificação, replicação e comunicação entre os nós do cluster, utilizando um framework chamado Group Communication. Ele possibilita a utilização de sincronia virtual que mantém os nós do cluster atualizados em uma fração de segundos e gerencia a adesão de novos membros ao cluster. Seu objetivo é manter todos os nós atualizados com relação aos dados já confirmados no nó de origem de cada transação executada no cluster.
O principal protocolo utilizado para replicação, troca de mensagens e adesão ao cluster por novos membros é o TCP. O protocolo UDP pode ser utilizado para replicação de dados em LAN.
Além dos componentes do Galera Cluster citados (todos estão em um plugin que é configurado para ser lido na inicialização do MySQL conforme configuração adicionada em seu arquivo de configuração), ainda se faz necessário a instalação da suíte de backup Percona Xtrabackup, que é uma evolução do antigo InnoDB Hot Backup. Existe então uma integração entre MySQL, Galera Plugin e Xtrabackup para fazer com que novos nós ou mesmo nós que tiveram uma parada, recebam o conjunto de dados ou SNAPSHOT de forma automática, sendo tal SNAPSHOT incremental ou completo (backup incremental ou full). Trataremos sobre provisionamento de novos nós, ou mesmo, retorno de um nó a um cluster após uma parada problemática um pouco mais à frente.
Conceitos e estudos que deram origem ao produto
Normalmente em um esquema ou topologia de replicação do tipo MASTER/SLAVE, a informação é escrita no MASTER que roda em um servidor A. Essa informação é então replicada em forma de stream para um outro servidor B, onde roda um outro servidor de banco de dados que recebe tais informações e mantém o mesmo estado em relação aos dados do MASTER. Aqui, os dois servidores estão em um mesmo ponto no tempo com relação aos dados. Temos nesse cenário um tipo de banco de dados em cluster por obter a mesma informação sendo sincronizada em mais de um servidor físico. Um problema que podemos observar é que cada operação é então executada em forma de fila, sendo a replicação de dados um stream de alterações que são disponib ...
Confira outros conteúdos:
SQL SUM: somando os valores de uma...
SQL: INNER JOIN
SQL: Introdução ao Where
Promoção de Natal
Oferta exclusiva de Natal!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 59,90
Total: R$ 718,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 59,90 /mês
Total: R$ 718,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.