Balanceamento de carga com DNS


Um Cluster de Balanceamento de Carga é um conjunto de máquinas (duas ou mais) nas quais estão sendo executadas aplicações requerida por um número muito grande pessoas.

Um bom Cluster de Balanceamento de Carga deve ter a capacidade de receber os pedidos de requisição de serviço de vários clientes e distribuir (balancear a carga de trabalho) tais serviços às máquinas que constituem o cluster de forma que nenhuma máquina fique sobrecarregada e/ou ociosa.

Um exemplo simples para se obter este tipo de tecnologia é utilizando um servidor DNS (Domain Name System). Sendo que, quando o “cliente” vai acessar um serviço na rede este o faz utilizando nomes, e não endereços IPs,
esta resolução de nomes em endereços IPs se dá via servidor DNS. Assim, podemos dizer para um servidor DNS que um dado nome pode ser resolvido por vários IPs (várias máquinas).

Desta forma, podemos dizer para o servidor DNS que o nome http://www.cluster.com, pode ser resolvido por um servidor HTTP 1 (com endereço IP, 200.0.0.1) e por um servidor HTTP 2 (com endereço IP, 200.0.0.2), por exemplo. Assim, quando um dado cliente tentar acessar http://www.cluster.com, ele vai ser redirecionado para o servidor HTTP 1, quando um segundo cliente tentar acessar o http://www.cluster.com ele pode ser direcionado ao servidor HTTP 2, e assim por diante!

Para fazermos um cluster de balanceamento de carga simples com o DNS no Slackware Linux devemos seguir os seguintes passos:

obs. Nossa rede vai ser a 192.168.73.0/24. O servidor DNS vai ser o 192.168.73.1, e os servidores vão ser o 192.168.73.2 e 192.168.73.3.

1. Editar o arquivo /etc/named.conf;
2. Criar o arquivo de zona reversa, no nosso caso vai ser /var/named/cachingexample/domain.rev;
3. Criar o arquivo de domínio, no nosso caso vai ser /var/named/cachingexample/cluster.host;
4. Iniciar o servidor de nomes (DNS)
5. Configurar os servidores HTTP.


1. Editar o arquivo /etc/named.conf:

vi /etc/named.conf
options {
directory “/var/named”;
};
zone “.” IN {
type hint;
file “caching-example/named.ca”;
};
zone “localhost” IN {
type master;
file “caching-example/localhost.zone”;
allow-update { none; };
};
zone “0.0.127.in-addr.arpa” IN {
type master;
file “caching-example/named.local”;
allow-update { none; };
};
zone “0.73.168.192.in-addr.arpa” IN {
type master;
file “caching-example/domain.rev”;
};
zone “cluster.com” IN {
type master;
file “caching-example/cluster.host”;
};

No primeiro passo iremos editar o arquivo /etc/named.conf, neste iremos apenas criar as zonas reversa e de domínio e apontar os respectivos arquivos que conterão as configurações para esta zona.

2. Criar o arquivo de zona reversa, no nosso caso vai ser /var/named/cachingexample/domain.rev;

# vi /var/named/caching-example/domain.rev
$TTL 86400
$ORIGIN cluster.com.
73.168.192.in-addr.arpa IN SOA servidor.cluster.com. root.cluster.com.
(
&n bsp; 2004101901 ; Serial de sincronização
&n bsp; 3H ; refresh
&n bsp; 15M ; retry
&n bsp; 1W ; expiry
&n bsp; 1D ) ; minimum
NS dns.cluster.com.
2 IN PTR www
3 IN PTR www
2 IN PTR ftp
3 IN PTR ftp

Bem como a  idéia é apenas fazer um simples servidor de DNS balancear carga e não montar um servidor real de DNS, o arquivo de zona reversa não vai ser construído e configurado a risca é vai servir apenas de referencia.

O próximo passo é criar o arquivo de domínio:

3. Criar o arquivo de domínio, no nosso caso vai ser /var/named/cachingexample/cluster.host;

vi /var/named/caching-example/cluster.host
$TTL 86400
@ IN SOA servidor.cluster.com. root.servidor.cluster.com. (

2004101901 ;Serial de sincronização
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
NS dns.cluster.com.
IN MX 10 cluster.com.

localhost IN A 127.0.0.1
cluster.com. IN A 192.168.73.1
dns IN A 192.168.73.1
www IN A 192.168.73.2
IN A 192.168.73.3
ftp IN A 192.168.73.2
IN A 192.168.73.3

Bem, é justamente o arquivo de domínio que vai fazer o esquema de balanceamento de carga, observe que na entrada do www temos um endereço IP que é o 192.168.73.2 e logo na seqüência temos uma entrada em branco que faz
referencia também ao www, mas indica o IP 192.168.73.3. O mesmo acontece com o servidor ftp.

4. Iniciar o servidor de nomes (DNS):
# sh /etc/rc.d/rc.bind start

5. Configurar os servidores HTTP:
Nas máquinas que serão os servidores HTTP inicie o apache com o comando: apachectl start. É aconselhável criar paginas diferentes em cada servidor HTTP, para que seja observado a alternância entre os servidores (gerada pelo servidor DNS). É também interessante criar um servidor FTP para fazer testes também, tal servidor deve ser iniciado pelo inetd. Observação, lembre para fazer o balanceamento de carga os clientes devem ter como servidor DNS primário, o servidor DNS que você acabou de criar! No Linux teremos que editar o arquivo /etc/resolv.conf e colocar a seguinte linha nameserver 192.168.73.1.

Agora que você configurou o servidor DNS para que este faça o balanceamento de carga, vamos fazer alguns testes e responder a algumas perguntas:

1. Utilizando o ping verifique qual é a ordem em que o servidor DNS vai fazer o balanceamento.
2. Agora usando um browser acesse várias vezes o servidor, e verifique qual é a ordem de acesso aos servidores HTTP. Tente utilizar vários browsers ao mesmo tempo, tal como: Firefox, konqueror, Seamonkey, lynx, links, etc.
3. Faça também testes com os servidores FTP, fazendo acessos via browsers e principalmente via linha de comando, observando a ordem de balanceamento.
4. Corte a conexão de um dos servidores e observe como o servidor trata a indisponibilidade de tal servidor. Ele redireciona conexões para um servidor inativo ou não? O que acontece quanto o servidor voltar a ativa?
5. De acordo com o que você pesquisou nas questões acima responda qual é o esquema de balanceamento que o DNS utiliza? Se possível relacione com algum algoritmo de balanceamento de carga.
6. Quais foram as vantagens e desvantagens observadas quanto ao uso do DNS para fazer o balanceamento de carga?

Deixe um comentário