Pesquisa de site

Como usar o Nginx como um balanceador de carga HTTP no Linux


Quando se trata de configurar vários servidores de aplicativos para redundância, o balanceamento de carga é um mecanismo comumente usado para distribuir com eficiência solicitações de serviço recebidas ou tráfego de rede em um grupo de servidores back-end.

O balanceamento de carga tem diversas vantagens, incluindo maior disponibilidade de aplicativos por meio de redundância, maior confiabilidade e escalabilidade (mais servidores podem ser adicionados à combinação quando o tráfego aumenta). Ele também traz melhor desempenho do aplicativo e muitos outros benefícios.

Leitura recomendada: o guia definitivo para proteger, fortalecer e melhorar o desempenho do servidor Web Nginx

O Nginx pode ser implantado como um balanceador de carga HTTP eficiente para distribuir o tráfego de rede de entrada e a carga de trabalho entre um grupo de servidores de aplicativos, em cada caso retornando a resposta do servidor selecionado para o cliente apropriado.

Os métodos de balanceamento de carga suportados pelo Nginx são:

  • round-robin – que distribui solicitações aos servidores de aplicativos em um estilo round-robin. É usado por padrão quando nenhum método é especificado,
  • menos conectado – atribui a próxima solicitação a um servidor menos ocupado (o servidor com o menor número de conexões ativas),
  • ip-hash – onde uma função hash é usada para determinar qual servidor deve ser selecionado para a próxima solicitação com base no endereço IP do cliente. Este método permite persistência de sessão (vincular um cliente a um servidor de aplicativos específico).

Além disso, você pode usar pesos de servidor para influenciar algoritmos de balanceamento de carga Nginx em um nível mais avançado. O Nginx também oferece suporte a verificações de integridade para marcar um servidor como com falha (por um período de tempo configurável, o padrão é 10 segundos) se sua resposta falhar com um erro, evitando assim escolher esse servidor. servidor para solicitações de entrada subsequentes por algum tempo.

Este guia prático mostra como usar o Nginx como um balanceador de carga HTTP para distribuir solicitações recebidas de clientes entre dois servidores, cada um com uma instância do mesmo aplicativo.

Para fins de teste, cada instância do aplicativo é rotulada (na interface do usuário) para indicar o servidor em que está sendo executada.

Testando a configuração do ambiente

Load Balancer: 192.168.58.7
Application server 1: 192.168.58.5
Application server 2: 192.168.58.8

Em cada servidor de aplicação, cada instância da aplicação é configurada para ser acessada utilizando o domínio tecmintapp.lan. Supondo que este seja um domínio totalmente registrado, adicionaríamos o seguinte nas configurações de DNS.

A Record   		@   		192.168.58.7

Este registro informa às solicitações do cliente para onde o domínio deve direcionar, neste caso, o balanceador de carga (192.168.58.7). Os registros DNS A aceitam apenas valores IPv4. Alternativamente, o arquivo /etc/hosts nas máquinas clientes também pode ser usado para fins de teste, com a seguinte entrada.

192.168.58.7  	tecmintapp.lan

Configurando o balanceamento de carga Nginx no Linux

Antes de configurar o balanceamento de carga Nginx, você deve instalar o Nginx em seu servidor usando o gerenciador de pacotes padrão para sua distribuição, conforme mostrado.

sudo apt install nginx   [On Debian/Ubuntu]
sudo yum install nginx   [On CentOS/RHEL]   

Em seguida, crie um arquivo de bloco de servidor chamado /etc/nginx/conf.d/loadbalancer.conf (dê um nome de sua escolha).

sudo vi /etc/nginx/conf.d/loadbalancer.conf

Em seguida, copie e cole a seguinte configuração nele. O padrão desta configuração é round-robin, pois nenhum método de balanceamento de carga é definido.

 
upstream backend {
        server 192.168.58.5;
        server 192.168.58.8;
    }
	
    server {
        listen      80 default_server;
        listen      [::]:80 default_server;
        server_name tecmintapp.lan;

        location / {
	        proxy_redirect      off;
	        proxy_set_header    X-Real-IP $remote_addr;
	        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
	        proxy_set_header    Host $http_host;
		proxy_pass http://backend;
	}
}

Na configuração acima, a diretiva proxy_pass (que deve ser especificada dentro de um local, / neste caso) é usada para passar uma solicitação aos servidores proxy HTTP referenciados usando o palavra backend, na diretiva upstream (usada para definir um grupo de servidores). Além disso, as solicitações serão distribuídas entre os servidores usando um mecanismo de balanceamento round-robin ponderado.

Para empregar o mecanismo de menor conexão, use a seguinte configuração

upstream backend {
        least_conn;
        server 192.168.58.5;
        server 192.168.58.8;
    }

E para ativar o mecanismo de persistência de sessão ip_hash, use:

upstream backend {
	ip_hash;
        server 192.168.58.5;
        server 192.168.58.8;
    }

Você também pode influenciar a decisão de balanceamento de carga usando pesos do servidor. Usando a configuração a seguir, se houver seis solicitações de clientes, o servidor de aplicativos 192.168.58.5 receberá 4 solicitações e 2 serão 192.168.58.8.

upstream backend {
        server 192.168.58.5	weight=4;
        server 192.168.58.8;
    }

Salve o arquivo e saia dele. Em seguida, certifique-se de que a estrutura de configuração do Nginx esteja correta após adicionar as alterações recentes, executando o seguinte comando.

sudo nginx -t

Se a configuração estiver correta, reinicie e habilite o serviço Nginx para aplicar as alterações.

sudo systemctl restart nginx
sudo systemctl enable nginx

Testando balanceamento de carga Nginx no Linux

Para testar o balanceamento de carga do Nginx, abra um navegador da web e use o seguinte endereço para navegar.

http://tecmintapp.lan

Assim que a interface do site for carregada, anote a instância do aplicativo que foi carregada. Em seguida, atualize continuamente a página. Em algum momento, o aplicativo deverá ser carregado do segundo servidor indicando balanceamento de carga.

Você acabou de aprender como configurar o Nginx como um balanceador de carga HTTP no Linux. Gostaríamos de saber sua opinião sobre este guia e, especialmente, sobre como empregar o Nginx como balanceador de carga, por meio do formulário de feedback abaixo. Para obter mais informações, consulte a documentação do Nginx sobre como usar o Nginx como um balanceador de carga HTTP.