Hoje em dia o número de serviços que fazem escalabilidade do banco de dados está crescendo cada vez mais, porém para algumas empresas o alto custo desses serviços pode ser um impeditivo. Nesse passo a passo irei mostrar como fazer de uma forma simples um cluster de escalabilidade do banco de dados
É claro que existem inúmeras formas e caminhos de fazer o que irei descrever aqui, porém como tive dificuldade de encontrar um formato mais claro na internet, irei dar o passo a passo do cluster mais simples possível que consegui fazer através dos meus estudos
Foram utilizados as seguintes tecnologias para fazer os passos
- Ubuntu 18.04
- Mariadb 10.3.14 (Esse foi o usado na minha instalação mais pode ser o mais atual)
- Galera Cluster
- Haproxy 1.8.8 (Esse foi o usado na minha instalação mais pode ser o mais atual)
Passos para a instalação do mariadb a partir do repositório oficial (isso é importante para garantir uma versão do mariadb que de suporte ao Galera Cluster)
Durante essa instalação vai ser solicitada a criação da senha para o root, porém ela pode ser criada posteriormente não importa
Confirme se a instalação foi concluída com sucesso verificando a versão do mysql
Configurações necessárias em todos os servidores (nós)
Vamos configurar primeiro o firewall para permitir requisições nas seguintes portas
No arquivo a seguir:
descomente a linha
adicionamos agora o arquivo de configuração do galera cluster
“coloquei separado a configuração que é geral e a configuração única do servidor, onde o arquivo galera.cnf é o geral (igual para todos), e o arquivo galera-node.conf é único em cada nó”
Neste arquivo é necessário incluir o ips que serão utilizados separados por vírgula
ex.: wsrep_cluster_address=”gcomm://10.10.10.1,10.10.10.2,10.10.10.3”
O primeiro IP DEVE ser o do master
Agora vamos configurar o arquivo especifico de cada nó, neste arquivo é necessário informar o hostname referente ao server e o seu ip
Após fazer a configuração em todos os nós pare o serviço do mariadb em todos eles
Configuração para inicialização do serviço de replicação
No servidor que vai ter a função master rode o seguinte comando
após rodar o comando verifique se deu certo com esse comando
se tudo deu certo até aqui vamos verificar os nós do nosso cluster, ainda no servidor master rode o comando
esse comando retornará o número de nós do nosso cluster, nesse momento esse número precisa ser 1 pois todos os outros nós estão com o serviço do mariadb parado, podemos agora ir em cada nó e subir o serviço
se rodarmos novamente o comando em qualquer um dos nós ele retornará o número total de nós do nosso cluster
Para testar agora é só logar em qualquer um dos nós, criar um database por ex. e verificar se a mudança foi refletida nos outros nós, neste momento poderiamos fazer INSERTS, UPDATES, SELECTS em qualquer um dos ips dos nós que automagicamente o galera cluster se encarrega de replicar para os outros os nós, vale lembrar que o galera cluster cuida sozinho para que não aconteça ids repetidos que poderiam inviabilizar a escalabilidade
Porém para escalarmos precisamos de um ip unico para usarmos em nossa aplicação e automatizar a escalabilidade, para isso vou usar o HAProxy fazendo os seguintes passos
Configuração do HAProxy
Antes de instalarmos o haproxy vamos criar um usuário no mysql que o haproxy usará para verificar a saúde dos nossos nós sql
Agora sim instalamos o haproxy
A configuração ficará no seguinte arquivo
Adicionamos no final desse arquivo a seguinte configuração, modificando no frontend o bind para o ip do próprio loadbalancer, e adicionando os servers no backend (fique atento a identação)
Obs. Na linha balancer também pode ser modificado o tipo de balanceamento entre os servidores, os valores permitidos são:
- roundrobin
- static-rr
- first
- source
- leastconn
No meu caso utilizei o ‘leastconn’ que faz a requisição para o nó que tiver menos conexões ativas mais pode ser o que você preferir
Reinicie o serviço haproxy
Observações finais
- Após a realização dessas configurações o acesso pode ser configurado normalmente com qualquer usuário existente utilizando o ip do loadbalancer
- Mesmo a criação/edição de usuários e permissões é replicada, ou seja, só é preciso configurar em um server, e eles serão replicados
- Para incluir um server temporário é só fazer a configuração do cluster dele mesmo e adicioná-lo ao haproxy (não é necessário o ajuste nos outros nós)
Comentários