Como configurar o balanceamento de carga round-robin de DNS para alta disponibilidade
Introdução
Embora seja uma das técnicas mais controversas, um bom método para distribuir geograficamente seu aplicativo aproveitando a presença global de seu provedor é usar e gerenciar respostas de DNS (ou seja, lista de endereços IP retornados). A menos que você esteja disposto a gastar uma pequena fortuna em custos de hardware e infraestrutura, trabalhar com DNS para obter alta disponibilidade é provavelmente um excelente caminho a percorrer.
Neste artigo, veremos como explorar algumas das possibilidades verdadeiramente excelentes e únicas oferecidas pela infraestrutura global de servidor em nuvem/data center da DigitalOcean para ter uma configuração de aplicativo geograficamente distribuída e altamente disponível para tempo de inatividade mínimo (e, portanto, perda de dados ) gerenciando respostas de DNS.
Glossário
1. Estrutura Tradicional de Implantação de Aplicativos
2. Alta disponibilidade
- Estrutura de implantação de aplicativos altamente disponíveis
- Como obter alta disponibilidade usando DNS
- Resumo
3. Como implantar aplicativos altamente disponíveis
- Configuração de balanceadores de carga/proxy reverso
- Configuração de registros DNS
- Configuração de servidores de aplicativos
- Configuração de bancos de dados
Estrutura Tradicional de Implantação de Aplicativos
As implantações de aplicativos tradicionais e mais comuns dependem de configurações com todos os componentes relacionados localizados no mesmo local devido a vários motivos, como:
- Falta de meios dos provedores;
- Custos elevados e/ou;
- Trabalho de engenharia complicado.
Mesmo que um aplicativo seja atendido por várias máquinas atrás de balanceadores de carga (ou proxies reversos) e mesmo que o banco de dados também seja configurado de forma a oferecer confiabilidade e evitar perda de dados, esses tipos de arranjos são propensos a diferentes níveis de erros, causando, às vezes, tempo de inatividade.
Para evitar isso, deve-se confiar e usar uma arquitetura de sistema mais confiável. Aquele em que os dados e servidores são distribuídos globalmente em diferentes áreas (por exemplo, São Francisco e Nova York).
Alta disponibilidade
Se seu aplicativo é da sua empresa, você precisa mantê-lo acessível 24 horas por dia, 7 dias por semana, se possível, quase sem interrupções. Infelizmente, escalar horizontalmente em muitos servidores em um local nem sempre é a solução devido a problemas inesperados no data center.
Distribuir globalmente seus servidores virtuais em diferentes centros geográficos, no entanto, pode fornecer a estabilidade de que você precisa - mantendo assim o nível de tempo de atividade dos aplicativos o mais alto possível.
Em termos de design de sistema de TI, esse tipo de estrutura é chamado de alta disponibilidade.
Graças à presença da DigitalOcean em dois continentes, em cinco locais diferentes, você também pode espalhar sua pilha de aplicativos globalmente.
Você pode conectar um IP reservado, que é um endereço IP estático publicamente acessível que pode ser mapeado para um de seus Droplets, para sua infraestrutura redundante e lançar seu site ou serviço com um único IP público. Esse IP reservado pode ser remapeado instantaneamente para um novo droplet, para permitir flexibilidade e capacidade de resposta em sua infraestrutura. Leia mais sobre este novo recurso aqui.
Estrutura de implantação de aplicativos altamente disponíveis
Simplificando, a estrutura de implantação de aplicativos altamente disponíveis, como acabamos de abordar, depende da entrega e da resposta a clientes de diferentes datacenters.
Embora existam várias maneiras possíveis de obter esse tipo de estrutura, provavelmente a mais simples e econômica é aproveitar as vantagens de como o DNS funciona.
Um exemplo básico de configuração pode ser considerado o seguinte:
________________
| |
| CLIENT |
| WEB BROWSER |
|________________|
||
||
_______\/_______
| |
| DNS SERVER |
|________________|
||
||
_______/ \_______
/ \
/ \
____________________ ____________________
| | | |
| SAN FRANCISCO | | SAN FRANCISCO |
|____________________| |____________________|
| ______________ | | ______________ |
| | | | | | | |
| | WEB SERVER | | | | WEB SERVER | |
| | LOAD BALANCE | | | | LOAD BALANCE | |
| | PROXY | | | | PROXY | |
| |_____ _____| | | |_____ _____| |
|________| |________| |________| |________|
|| __ __ ||
||<=====||==================||=====>||
\/ \/ \/ \/
____________________ ____________________
| | | |
| SAN FRANCISCO | | NEW YORK |
|____________________| |____________________|
| ______________ | | ______________ |
| | | | | | | |
| | APP SERVER | | | | APP SERVER | |
| |______ ______| | | |______ ______| |
| ______||______ | | ______||______ |
| | | | | | | |
| | DATABASE |<==================>| DATABASE | |
| |______________| | | |______________| |
|____________________| |____________________|
Como obter alta disponibilidade usando DNS
Quando um usuário digita o nome de domínio de um site, por meio de um conjunto de regras definidas (ou seja, um protocolo), o navegador disca para os servidores de nomes e pergunta a eles o endereço das máquinas que hospedam o referido site. Depois de receber o endereço IP, ele envia a solicitação para esse computador, juntamente com alguns dados adicionais, e processa a resposta.
Como o DNS permite que vários registros sejam mantidos (mesmo do mesmo tipo), torna-se possível listar vários hosts como o servidor.
Portanto, conforme demonstrado no esquema acima, se você listar o endereço IP de 2 balanceadores de carga/proxies reversos, localizados em dois locais diferentes, cada um configurado para balancear a carga entre os servidores de aplicativos, novamente localizados em pelo menos dois servidores de dados diferentes centros de dados, se um dos centros de dados ficar inacessível, o navegador do cliente tentará os próximos registros de endereço IP retornados pelo servidor DNS e repetirá o processo para obter o site.
Esse tipo de balanceamento de carga é chamado de balanceamento de carga Round Robin DNS.
Resumo
As coisas podem parecer um pouco complexas à primeira vista. Vamos resumi-los usando instruções passo a passo:
- O DNS pode conter vários registros para o mesmo nome de domínio.
- O DNS pode retornar a lista de endereços IP para o mesmo nome de domínio.
- Quando um navegador da Web solicita um site da Web, ele tenta esses endereços IP um por um, até obter uma resposta.
- Esses endereços IP devem apontar para não servidores de aplicativos, mas para balanceadores de carga/proxies reversos.
- Esses proxies reversos precisam equilibrar a carga entre vários servidores em vários locais.
- Se um datacenter estiver inoperante e o navegador da Web não conseguir obter uma resposta de um endereço IP (ou seja, um balanceador de carga), ele tentará acessar o endereço do outro.
- Como é muito improvável que ambos os centros de dados estejam inacessíveis ao mesmo tempo, o segundo balanceador de carga retornará uma resposta.
- Os servidores de aplicativos da Web devem ser sem estado para facilitar o trabalho dos balanceadores de carga.
- Os servidores de banco de dados devem ser configurados de forma replicada.
Como implantar aplicativos altamente disponíveis
Nota: Este tutorial é independente da linguagem de programação ou do tipo de servidor da web. Seguindo essas instruções, você pode obter alta disponibilidade, independentemente de sua escolha de estruturas, servidores Web ou HTTP.
Configurando balanceadores de carga/proxy reverso
A primeira etapa para alta disponibilidade é configurar dois ou mais proxies reversos de balanceamento de carga que irão se comunicar entre seus servidores de aplicativos.
- Instancie dois servidores de nuvem em dois locais: Crie duas gotas da DigitalOcean. por exemplo. Artigo: Como criar um servidor DO Cloud
- Configure um balanceador de carga/proxy reverso em cada droplet: Instale e configure Nginx, Apache ou HAProxy. por exemplo. Artigo: Balanceamento de carga HAProxy no Ubuntu
- Obtenha os endereços IP de seus balanceadores de carga: Digite
/sbin/ifconfig
e descubra os endereços IP de seus droplets. por exemplo.endereço inet:107.170.40.112
Configurando registros DNS
Os Registros DNS A traduzem nomes de domínio (por exemplo, linux-console.net
) para endereços IP acessíveis por máquina.
Depois de configurar dois droplets com um proxy reverso de balanceamento de carga em cada um, a próxima etapa consiste em adicionar 2 registros A por meio do serviço DNS da DigitalOcean para apontar seu nome de domínio para o endereço IP.
- Faça login no seu painel de controle da DigitalOcean: Clique em
DNS
no menu à esquerda e adicione um novo nome de domínio apontando para um droplet de balanceador de carga da etapa anterior. - Adicione um novo Registro A: Quando estiver na próxima etapa, clique em \Adicionar registro no lado superior e crie um novo registro A, com o endereço IP do outro droplet do balanceador de carga.
Configurando Servidores de Aplicativos
A próxima etapa é configurar os servidores de aplicativos.
Para que a distribuição global funcione, assim como os primeiros servidores de balanceamento de carga que você criou, você precisa de dois novos droplets para hospedar seus servidores de aplicativos.
Observação: você também pode executar cada um dos servidores de aplicativos na mesma máquina que os balanceadores de carga; no entanto, isso não seria recomendado.
Implante ou duplique seu droplet de servidor de aplicativos em dois locais. Por exemplo:
- Em NY 1 e NY 2;
- Em AMS 1 e AMS 2;
- Em SF 1 e NY 2 etc.
Volte para a primeira etapa e, seguindo os artigos de configuração do balanceador de carga, configure-os para fazer proxy de conexões de entrada para esses dois droplets de serviço de aplicativo.
Configurando Bancos de Dados
É difícil imaginar uma aplicação web sem um banco de dados. A parte mais difícil da distribuição de aplicativos em vários servidores provavelmente é lidar com bancos de dados.
Dependendo de sua escolha de servidor de banco de dados, crie uma configuração duplicada, mas em vários locais.
Ver:
- Para replicação mestre/escravo do MySQL:
Como configurar a replicação mestre-escravo no MySQL
- Para MySQL Master/Master Replication:
Como configurar a replicação mestre-mestre do MySQL
- Para replicação mestre/escravo do PostgreSQL:
Como configurar a replicação mestre-escravo no PostgreSQL
Depois de concluir a criação de uma estrutura de banco de dados replicada, aponte seus aplicativos para usar seus endereços, conforme interagido em tutoriais como o servidor de banco de dados.