Pesquisa de site

Como configurar e manter alta disponibilidade/clustering no Linux


Alta disponibilidade (HA) refere-se simplesmente à qualidade de um sistema para operar continuamente sem falhas por um longo período de tempo. As soluções de HA podem ser implementadas usando hardware e/ou software, e uma das soluções comuns para implementação de HA é o clustering.

Na computação, um cluster é composto por dois ou mais computadores (comumente conhecidos como nós ou membros) que trabalham juntos para executar uma tarefa. Nessa configuração, apenas um nó fornece o serviço e o(s) nó(s) secundário(s) assume(m) o(s) controle(s) em caso de falha.

Os clusters se enquadram em quatro tipos principais:

  • Armazenamento: fornece uma imagem consistente do sistema de arquivos entre servidores em um cluster, permitindo que os servidores leiam e gravem simultaneamente em um único sistema de arquivos compartilhado.
  • Alta disponibilidade: elimine pontos únicos de falha e faça failover de serviços de um nó de cluster para outro caso um nó fique inoperante.
  • Balanceamento de carga: envia solicitações de serviço de rede para vários nós do cluster para equilibrar a carga da solicitação entre os nós do cluster.
  • Alto Desempenho: realiza processamentos paralelos ou simultâneos, ajudando assim a melhorar o desempenho das aplicações.

Outra solução amplamente utilizada para fornecer HA é a replicação (especificamente replicações de dados). A replicação é o processo pelo qual um ou mais bancos de dados (secundários) podem ser mantidos sincronizados com um único banco de dados primário (ou mestre).

Para configurar um cluster, precisamos de pelo menos dois servidores. Para os fins deste guia, usaremos dois servidores Linux:

  • Nó1: 192.168.10.10
  • Nó2: 192.168.10.11

Neste artigo, demonstraremos os princípios básicos de como implantar, configurar e manter alta disponibilidade/clustering no Ubuntu 16.04/18.04 e CentOS 7. Demonstraremos como adicionar o serviço HTTP Nginx ao cluster.

Definindo configurações de DNS local em cada servidor

Para que os dois servidores se comuniquem, precisamos definir as configurações de DNS local apropriadas no arquivo /etc/hosts em ambos os servidores.

Abra e edite o arquivo usando seu editor de linha de comando favorito.

sudo vim /etc/hosts  

Adicione as seguintes entradas com endereços IP reais de seus servidores.

192.168.10.10	node1.example.com
192.168.10.11 	node2.example.com

Salve as alterações e feche o arquivo.

Instalando o servidor Web Nginx

Agora instale o servidor web Nginx usando os seguintes comandos.

sudo apt install nginx  [On Ubuntu]
sudo yum install epel-release && sudo yum install nginx [On CentOS 7]

Assim que a instalação for concluída, inicie o serviço Nginx por enquanto e habilite-o para inicialização automática no momento da inicialização e, em seguida, verifique se ele está instalado e funcionando usando o comando systemctl.
No Ubuntu, o serviço deve ser iniciado automaticamente imediatamente após a conclusão da pré-configuração do pacote, você pode simplesmente habilitá-lo.

sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx

Depois de iniciar o serviço Nginx, precisamos criar páginas da web personalizadas para identificar e testar operações em ambos os servidores. Modificaremos o conteúdo da página de índice padrão do Nginx conforme mostrado.

echo "This is the default page for node1.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS1
echo "This is the default page for node2.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS2

Instalando e configurando Corosync e Pacemaker

Em seguida, temos que instalar Pacemaker, Corosync e Pcs em cada nó como segue.

sudo apt install corosync pacemaker pcs	#Ubuntu 
sudo yum install corosync pacemaker pcs	#CentOS 

Assim que a instalação for concluída, certifique-se de que o daemon pcs esteja sendo executado em ambos os servidores.

sudo systemctl enable pcsd
sudo systemctl start pcsd
sudo systemctl status pcsd

Criando o Cluster

Durante a instalação, um usuário do sistema chamado “hacluster ” é criado. Portanto, precisamos configurar a autenticação necessária para pcs. Vamos começar criando uma nova senha para o usuário “hacluster”, precisamos usar a mesma senha em todos os servidores:

sudo passwd hacluster

A seguir, em um dos servidores (Nó1), execute o seguinte comando para configurar a autenticação necessária para pcs.

sudo pcs cluster auth node1.example.com node2.example.com -u hacluster -p password_here --force

Agora crie um cluster e preencha-o com alguns nós (o nome do cluster não pode exceder 15 caracteres, neste exemplo, usamos examplecluster) no servidor Node1.

sudo pcs cluster setup --name examplecluster node1.example.com node2.example.com 

Agora habilite o cluster na inicialização e inicie o serviço.

sudo pcs cluster enable --all
sudo pcs cluster start --all

Agora verifique se o serviço de cluster está instalado e funcionando usando o seguinte comando.

sudo pcs status
OR
sudo crm_mon -1

Na saída do comando acima, você pode ver que há um aviso sobre nenhum dispositivo STONITH, mas o STONITH ainda está ativado no cluster. Além disso, nenhum recurso/serviço de cluster foi configurado.

Configurando opções de cluster

A primeira opção é desabilitar STONITH (ou atirar no outro nó na cabeça), a implementação de esgrima no Pacemaker.

Este componente ajuda a proteger seus dados contra corrupção por acesso simultâneo. Para os fins deste guia, iremos desativá-lo, pois não configuramos nenhum dispositivo.

Para desligar STONITH, execute o seguinte comando:

sudo pcs property set stonith-enabled=false

Em seguida, ignore também a política Quorum executando o seguinte comando:

sudo pcs property set no-quorum-policy=ignore

Depois de definir as opções acima, execute o comando a seguir para ver a lista de propriedades e certifique-se de que as opções acima, stonith e a política de quorum estejam desabilitadas.

sudo pcs property list

Adicionando um serviço de recurso/cluster

Nesta seção, veremos como adicionar um recurso de cluster. Configuraremos um IP flutuante que é o endereço IP que pode ser movido instantaneamente de um servidor para outro dentro da mesma rede ou data center. Resumindo, um IP flutuante é um termo técnico comum, usado para IPs que não estão estritamente vinculados a uma única interface.

Neste caso, será utilizado para suportar failover em um cluster de alta disponibilidade. Tenha em mente que os IPs flutuantes não são apenas para situações de failover, eles têm alguns outros casos de uso. Precisamos configurar o cluster de forma que apenas o membro ativo do cluster “possua” ou responda ao IP flutuante a qualquer momento.

Adicionaremos dois recursos de cluster: o recurso de endereço IP flutuante chamado “floating_ip” e um recurso para o servidor web Nginx chamado “http_server”.

Primeiro comece adicionando o float_ip da seguinte maneira. Neste exemplo, nosso endereço IP flutuante é 192.168.10.20.

sudo pcs resource create floating_ip ocf:heartbeat:IPaddr2 ip=192.168.10.20 cidr_netmask=24 op monitor interval=60s

onde :

  • floating_ip: é o nome do serviço.
  • “ocf:heartbeat:IPaddr2 ”: informa ao Pacemaker qual script usar, IPaddr2 neste caso, em qual namespace ele está (pacemaker) e qual padrão ele está em conformidade com ocf.
  • op monitor interval=60s”: instrui o Pacemaker a verificar a integridade deste serviço a cada minuto, chamando a ação de monitor do agente.

Em seguida, adicione o segundo recurso, denominado http_server. Aqui, o agente de recursos do serviço é ocf:heartbeat:nginx.

sudo pcs resource create http_server ocf:heartbeat:nginx configfile="/etc/nginx/nginx.conf" op monitor timeout="20s" interval="60s"

Depois de adicionar os serviços de cluster, emita o comando a seguir para verificar o status dos recursos.

sudo pcs status resources

Observando a saída do comando, os dois recursos adicionados: “floating_ip ” e “http_server ” foram listados. O serviço float_ip está desativado porque o nó primário está em operação.

Se você tiver um firewall ativado em seu sistema, será necessário permitir todo o tráfego para o Nginx e todos os serviços de alta disponibilidade através do firewall para uma comunicação adequada entre os nós:

-------------- CentOS 7 -------------- 
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=high-availability		
sudo firewall-cmd --reload

-------------- Ubuntu -------------- 
sudo ufw allow http	
sudo ufw allow high-availability						
sudo ufw reload 

Testando alta disponibilidade/clustering

A etapa final e importante é testar se nossa configuração de alta disponibilidade funciona. Abra um navegador da web e navegue até o endereço 192.168.10.20. Você deverá ver a página Nginx padrão de node2.example.com conforme mostrado na captura de tela.

Para simular uma falha, execute o comando a seguir para parar o cluster em node2.example.com.

sudo pcs cluster stop http_server

Em seguida, recarregue a página em 192.168.10.20. Agora você deve acessar a página da web padrão do Nginx em node1.example.com.

Como alternativa, você pode simular um erro informando ao serviço para parar diretamente, sem parar o cluster em nenhum nó, usando o seguinte comando em um dos nós:

 
sudo crm_resource --resource http_server --force-stop 

Então você precisa executar crm_mon no modo interativo (o padrão), dentro do intervalo de monitoramento de 2 minutos, você poderá ver o cluster avisando que http_server falhou e mover para outro nó.

Para que os serviços de cluster sejam executados com eficiência, talvez seja necessário definir algumas restrições. Você pode ver a página man pcs (man pcs) para obter uma lista de todos os comandos de uso.

Para obter mais informações sobre Corosync e Pacemaker, confira: https://clusterlabs.org/

Resumo

Neste guia, mostramos os princípios básicos de como implantar, configurar e manter alta disponibilidade/clustering/replicação no Ubuntu 16.04/18.04 e CentOS 7. Demonstramos como adicionar o serviço Nginx HTTP a um cluster. Se você tiver alguma opinião para compartilhar ou perguntas, use o formulário de feedback abaixo.