Load balancing: simulando um cluster com NGinx e Tomcat em localhost

Antes de iniciar, convém entender conceitualmente o que é um cluster e o que é load balancing.

Um cluster, ou agregado de computadores, é formado por um conjunto de computadores, que utiliza um tipo especial de sistema operacional classificado como sistema distribuído. Muitas vezes é construído a partir de computadores convencionais (personal computers), os quais são ligados em rede e comunicam-se através do sistema, trabalhando como se fossem uma única máquina de grande porte. (Definição de Cluster, Wikipedia)

Neste caso, vamos utilizar três servidores Tomcat em localhost para simular um cluster.

Em rede de computadores, o balanceamento de carga é uma técnica para distribuir a carga de trabalho uniformemente entre dois ou mais computadores, enlaces de rede, UCPs, discos rígidos ou outros recursos, a fim de otimizar a utilização de recursos, maximizar o desempenho, minimizar o tempo de resposta e evitar sobrecarga. Utilizando múltiplos componentes com o balanceamento de carga, em vez de um único componente, pode aumentar a confiabilidade através da redundância. (Definição de Load Balancing, Wikipedia)

Vamos utilizar o servidor http Nginx como load balancer para gerenciar e distribuir as requisições entre três instâncias do Tomcat.

Passo 1: Instalar três Apache Tomcat e alterar as portas de cada um deles.

Cada instância do Tomcat, para rodar em uma mesma máquina, deve ter um número diferente para porta HTTP, porta AJP e server port. Após instalar os servidores, altere o arquivo server.xml em CATALINA_HOME/conf. Faça isso para cada servidor instalado conforme explicado a seguir.

Altere a porta HTTP do servidor alterando a propriedade port abaixo:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

Para rodar os 3 servidores na mesma máquina é necessário ainda alterar a porta AJP e a server port de cada um deles.

Altere a porta AJP e a server port alterando as propriedades port abaixo:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

<Server port="8005" shutdown="SHUTDOWN">

Guarde o número das portas dos servidores que você configurou, eles serão necessários para configurar o cluster no Nginx. No meu caso, configurei as portas dos três servidores Tomcat para 8081, 8082 e 8083.

Passo 2: Instalar e configurar o Nginx, nosso load balancer

O Nginx é fácil de ser instalado, consulte a documentação do Nginx para instalar em seu ambiente. Após instalar o Nginx, a configuração de um cluster é simples.

Abra o arquivo NGINX_HOME/conf/nginx.conf e crie dentro de http um upstream como o seguinte:

upstream myCloud{
		server 127.0.0.1:8081;
		server 127.0.0.1:8082;	
		server 127.0.0.1:8083;
	}

Este upstream chamado myCloud lista os servidores que farão parte do nosso cluster.

Ainda no arquivo de configuração, altere para onde serão redirecionadas as requisições, faça isso dentro de server:

location / {
			proxy_pass http://myCloud;
		}

Essa configuração específica que qualquer requisição a raiz do servidor / será redirecionada para um dos servidores listados no cluster myCloud.

Coloque todos os servidores Tomcat para rodar, inicie o Nginx, por padrão ele responde na porta 80, então, quando acessar localhost ele deve direcionar para um dos servidores Tomcat. O algoritmo de load balancing padrão do Nginx é o round-robin. Pronto, você tem uma simulação de um cluster rodando em localhost.

1 Reply to “Load balancing: simulando um cluster com NGinx e Tomcat em localhost”

Leave a Reply

Your email address will not be published. Required fields are marked *