Mais uma vez estamos aqui... dividindo um pouco de conhecimento!
Para começar precisamos responder 2 perguntas que já devem estar rodeando a cabeça do leitor... Ná verdade são 4 em duas.
1 - O que é Ngnix? Pra que sever?
2 - O que é GSLB? Onde aplico?
Vamos a primeira!
1 - O que é Nginx? Pra que server?
O Nginx (pronuncia-se enginex), é um servidor WEB e Proxy Reverso de alta performance, podendo fazer proxy de servidores de e-mail IMAP, POP, SMTP. O Nginx também pode fazer proxy de outros protocolos, mas, seu foco são protocolos HTTP e HTTPS.
Ele é um projeto Open Source que está sendo desenvolvido por um russo chamado Igor Sysoev, no qual já está trabalhando no mesmo a uns 4 anos.
E falando em proxy... já podemos imaginar algumas centenas de coisas que podemos fazer.. uma delas e balanceamento de servidores (Load Balancing). Ele é um ótimo e robusto balanceador de carga, com configuração fácil e rápida. em poucos minutos estarás com seus servidores balanceados.
Próxima pergunta...
2 - O que é GSLB? Onde aplico?
O GSLB - Global Service Load Balance, como já diz o nome, é um balanceamento global de servidores, ou seja, poderei balancear uma determinada aplicação ou serviço entre vários datacenters localizados em um continente, país, estado ou cidade. Vamos ver se a figura abaixo nos ajuda um pouco:

Para começar precisamos responder 2 perguntas que já devem estar rodeando a cabeça do leitor... Ná verdade são 4 em duas.
1 - O que é Ngnix? Pra que sever?
2 - O que é GSLB? Onde aplico?
Vamos a primeira!
1 - O que é Nginx? Pra que server?
O Nginx (pronuncia-se enginex), é um servidor WEB e Proxy Reverso de alta performance, podendo fazer proxy de servidores de e-mail IMAP, POP, SMTP. O Nginx também pode fazer proxy de outros protocolos, mas, seu foco são protocolos HTTP e HTTPS.
Ele é um projeto Open Source que está sendo desenvolvido por um russo chamado Igor Sysoev, no qual já está trabalhando no mesmo a uns 4 anos.
E falando em proxy... já podemos imaginar algumas centenas de coisas que podemos fazer.. uma delas e balanceamento de servidores (Load Balancing). Ele é um ótimo e robusto balanceador de carga, com configuração fácil e rápida. em poucos minutos estarás com seus servidores balanceados.
Próxima pergunta...
2 - O que é GSLB? Onde aplico?
O GSLB - Global Service Load Balance, como já diz o nome, é um balanceamento global de servidores, ou seja, poderei balancear uma determinada aplicação ou serviço entre vários datacenters localizados em um continente, país, estado ou cidade. Vamos ver se a figura abaixo nos ajuda um pouco:

Vamos lá..
Um cliente na internet requisita uma determinada aplicação. O servidor que responderá está aplicação te encaminhará para um datacenter, podendo aplicar as seguintes métricas:
Um cliente na internet requisita uma determinada aplicação. O servidor que responderá está aplicação te encaminhará para um datacenter, podendo aplicar as seguintes métricas:
- Localização Geográfica: De acordo com a posição geográfica do cliente, o mesmo, será encaminhado para o datacenter mais próximo;
- Disponibilidade: Se o datacenter mais próximo do cliente não estiver disponível, o mesmo será direcionado para um que possa atende-lo naquele momento;
- Carga alta: Caso a aplicação esteja congestionada no datacenter principal, a requisição do cliente será direcionada para um datacenter que esteja mais livre;
- Balanceamento Manual: Este balanceamento é feito de acordo com o 'peso' (weight) configurado para cada datacenter;
O GSLB é uma ótima solução para 'disaster recovery', caso um algo aconteça com um dos datacenters do ambiente, automáticamente a requisições serão direcionadas para o que estiver disponível.
Com as duas perguntas respondidas... acredito que o leitor já está imaginando o que faremos..
Sim! Utilizaremos nosso amigo Nginx para fazer o balanceamento de carga (Load Balance) de um ambiente que possui vários datacenters espalhados pelo mundo. Eis o cenário abaixo:
Dados do cenário:
Datacenter - US
Aplicação URL: http://us.app.com IP Externo: 201.x.y.1
Servidores:
Server1 10.1.1.1:80
Server2 10.1.1.2:80
Server3 10.1.1.3:80
Porta do serviço: 80
Datacenter - EU
Aplicação URL: http://eu.app.com IP Externo: 189.x.y.1
Servidores:
Server1 192.168.1.1:8001
Server2 192.168.1.2:8001
Server3 192.168.1.3:8001
Porta do serviço: 8001
Datacenter - APAC
Aplicação URL: http://apac.app.com IP Externo: 200.x.y.1
Servidores:
Server1 172.1.1.1:8080
Server2 172.1.1.2:8080
Server3 172.1.1.3:8080
Porta do serviço: 8080
Mãos-a-obra
1 - Download do Nginx:
# cd /usr/local/src/
# wget pacote_do_Nginx
# tar -xvzf pacote_do_Nginx.tar.gz
# cd pasta_Nginx/
# ./configure # make # make install
Ao instalar será criada uma pasta em /etc/nginx/, onde na mesma encontram os arquivos de configuração do Nginx. Você irá notar uma breve semelhança com a estrutura de pastas e arquivos do Apache2.
2- Configuração do Nginx no Datacenter US:
# cd /etc/nginx/sites-enable/
# mv default ../
# tail default > default
# vi default
#==========================================================
3 - Criaremos o arquivo gslc.conf em /etc/nginx/conf/:
Obs.: Este procedimento terá que ser feito nos três datacenters
# mkdir /etc/nginx/conf
# touch /etc/nginx/conf/gslb.conf
# cd /etc/nginx/conf
# vi gslb.conf
O conteúdo deste arquivo é formado pelar redes que atendem cada região, exemplo:
98.0.0.0/24 us;
189.0.0.0/24 us;
50.0.0.0/24 eu;
201.0.0.0/24 eu;
20.0.0.0/24 apac;
200.0.0.0/24 apac;
...
...
...
OBS.: Estas redes descritas acima são apenas para demonstração e entendimento da funcionalidade da solução;
4- Configuração do Nginx no Datacenter EU:
# cd /etc/nginx/sites-enable/
# mv default ../
# tail default > default
# vi default
#==========================================================
5- Configuração do Nginx no Datacenter APAC:
# cd /etc/nginx/sites-enable/
# mv default ../
# tail default > default
# vi default
#==========================================================
Após estes 5 passos, você terá um ambiente 100% balanceado e preparado para um 'disater recovery'.
Lembrando que esta é uma solução Open Source, a mesma pode ser atendida por appliance pelas seguintes empresas:
Agora eu vou dormir!
Abraços.
OSB.:(Se tiverem tempo assistam os vídeos abaixo, não falam do Nginx, mas de um ambiente 100% disponível)
Com as duas perguntas respondidas... acredito que o leitor já está imaginando o que faremos..
Sim! Utilizaremos nosso amigo Nginx para fazer o balanceamento de carga (Load Balance) de um ambiente que possui vários datacenters espalhados pelo mundo. Eis o cenário abaixo:

Datacenter - US
Aplicação URL: http://us.app.com IP Externo: 201.x.y.1
Servidores:
Server1 10.1.1.1:80
Server2 10.1.1.2:80
Server3 10.1.1.3:80
Porta do serviço: 80
Datacenter - EU
Aplicação URL: http://eu.app.com IP Externo: 189.x.y.1
Servidores:
Server1 192.168.1.1:8001
Server2 192.168.1.2:8001
Server3 192.168.1.3:8001
Porta do serviço: 8001
Datacenter - APAC
Aplicação URL: http://apac.app.com IP Externo: 200.x.y.1
Servidores:
Server1 172.1.1.1:8080
Server2 172.1.1.2:8080
Server3 172.1.1.3:8080
Porta do serviço: 8080
Mãos-a-obra
1 - Download do Nginx:
# cd /usr/local/src/
# wget pacote_do_Nginx
# tar -xvzf pacote_do_Nginx.tar.gz
# cd pasta_Nginx/
# ./configure # make # make install
Ao instalar será criada uma pasta em /etc/nginx/, onde na mesma encontram os arquivos de configuração do Nginx. Você irá notar uma breve semelhança com a estrutura de pastas e arquivos do Apache2.
2- Configuração do Nginx no Datacenter US:
# cd /etc/nginx/sites-enable/
# mv default ../
# tail default > default
# vi default
#==========================================================
http {#=======================================================
upstream us.app.com {
server 10.1.1.1:80 weight=3; # Caso você queira dividir a carga entre servidores manualmente,
# acrescente o weight e altere o peso, nos outros servidores
server 10.1.1.2:80;
server 10.1.1.3:80;
}
server {
listen 80;
server_name www.app.com app.com; # URL chamada pelo cliente
location / {
proxy_pass http://us.app.com; # Note: Este é o upstream configurado
}
}
geo $gslb {
default us;
include conf/gslb.conf;
}
if ($gslb=eu) {
rewrite ^(.*) http://eu.app.com$1 redirect;
}
if ($gslb=apac) {
rewrite ^(.*) http://apac.app.com$1 redirect;
}
}
3 - Criaremos o arquivo gslc.conf em /etc/nginx/conf/:
Obs.: Este procedimento terá que ser feito nos três datacenters
# mkdir /etc/nginx/conf
# touch /etc/nginx/conf/gslb.conf
# cd /etc/nginx/conf
# vi gslb.conf
O conteúdo deste arquivo é formado pelar redes que atendem cada região, exemplo:
98.0.0.0/24 us;
189.0.0.0/24 us;
50.0.0.0/24 eu;
201.0.0.0/24 eu;
20.0.0.0/24 apac;
200.0.0.0/24 apac;
...
...
...
OBS.: Estas redes descritas acima são apenas para demonstração e entendimento da funcionalidade da solução;
4- Configuração do Nginx no Datacenter EU:
# cd /etc/nginx/sites-enable/
# mv default ../
# tail default > default
# vi default
#==========================================================
http {#=======================================================
upstream eu.app.com {
server 192.168.1.1:8001 weight=3; # Caso você queira dividir a carga entre servidores manualmente,
# acrescente o weight e altere o peso, nos outros servidores
server 192.168.1.2:8001;
server 192.168.1.3:8001;
}
server {
listen 80;
server_name www.app.com app.com; # URL chamada pelo cliente
location / {
proxy_pass http://eu.app.com; # Note: Este é o upstream configurado
}
}
geo $gslb {
default eu;
include conf/gslb.conf;
}
if ($gslb=us) {
rewrite ^(.*) http://us.app.com$1 redirect;
}
if ($gslb=apac) {
rewrite ^(.*) http://apac.app.com$1 redirect;
}
}
5- Configuração do Nginx no Datacenter APAC:
# cd /etc/nginx/sites-enable/
# mv default ../
# tail default > default
# vi default
#==========================================================
http {#=======================================================
upstream apac.app.com {
server 172.1.1.1:8080 weight=3; # Caso você queira dividir a carga entre servidores manualmente,
# acrescente o weight e altere o peso, nos outros servidores
server 172.1.1.2:8080
server 172.1.1.3:8080
}
server {
listen 80;
server_name www.app.com app.com; # URL chamada pelo cliente
location / {
proxy_pass http://apac.app.com; # Note: Este é o upstream configurado
}
}
geo $gslb {
default apac;
include conf/gslb.conf;
}
if ($gslb=eu) {
rewrite ^(.*) http://eu.app.com$1 redirect;
}
if ($gslb=us) {
rewrite ^(.*) http://us.app.com$1 redirect;
}
}
Após estes 5 passos, você terá um ambiente 100% balanceado e preparado para um 'disater recovery'.
Lembrando que esta é uma solução Open Source, a mesma pode ser atendida por appliance pelas seguintes empresas:
- Citrix (http://www.citrix.com.br)
- F5 (http://www.f5.com)
- Cisco (http://www.cisco.com)
Agora eu vou dormir!
Abraços.
OSB.:(Se tiverem tempo assistam os vídeos abaixo, não falam do Nginx, mas de um ambiente 100% disponível)
Alfredo, achei ótimo seu tutorial de como fazer um load balance com o Nginx.
ResponderExcluirPenso numa estrutura diferente para um projeto que estou desenvolvendo. Teria um Front-End com toda a aplicação em PHP e quem faria o processamento seria o Back-End. Você sabe me dizer se isso é possível com Nginx?
Com o Ngnix podemos fazer o balanceamento da camada 4, ou seja, você pode balancear qualquer protocolo (SQL, SIP, FTP, etc). Quanto a "Cluster" de processamento é possível porem não é o Ngnix que faz.
ResponderExcluir