Como funciona a Alta Disponibilidade? [fechadas]

2

Eu não entendo como configurar um failover para meu cenário bem simples. Eu estou construindo um gateway de serviço para API. O que eu quero é ter dois servidores hospedados em diferentes datacenters . E eu simplesmente quero que o usuário possa acessar o serviço mesmo se um dos servidores estiver inativo. Não há problema com a sincronização de banco de dados, apenas me preocupo com a disponibilidade do serviço.

Como faço isso enquanto evito que o usuário implemente algum tipo de lógica de failover em seu final? Eu quero que o usuário receba um único domínio ou um único endereço IP e seja capaz de acessar o serviço o tempo todo usando esse único ponto final.

O que eu não entendo é como isso pode ser alcançado. Eu sei que posso configurar um nó de rede que encaminhará as solicitações para o primeiro ou segundo servidor, dependendo de qual delas está online no momento. No entanto, não consigo ver como essa configuração resolveu o problema de HA, pois acabamos de introduzir um único ponto de falha no sistema - o nó de encaminhamento. Portanto, se esse nó ficar inativo, o serviço ficará indisponível.

Você poderia explicar como implementar isso no mundo real? É possível conseguir isso com um custo razoável (ou seja, não mais do que um custo de hospedagem dos próprios servidores) .

Editar: Foi sugerido que o requisito de diferentes centros de dados é dispendioso. Portanto, sinta-se à vontade para fornecer sugestões para dois servidores em um datacenter.

Editar 2: sinta-se à vontade para mencionar o que é um custo razoável para essa configuração.

    
por Wapac 23.02.2016 / 11:42

2 respostas

6

funciona bem simples. A primeira regra é que você tem que ter mais de uma vez. Para simplificar, configurarei em um datacenter e com endereços IP pertencentes a este DC (você pode fazê-lo com seus próprios endereços IP e vários datacenters, mas estamos tolerando algumas coisas AS multihoming, BGP e algumas outras coisas que não são tão barato e fácil de implementar).

Você precisará ter pelo menos 4 servidores (você pode fazê-lo com apenas dois, mas não é bom). 2 para app e 2 para loadbalancing, cada servidor com várias placas de rede.

A configuração básica é assim:

       /---\     /------\     /----------\
       | S |-----| LB 1 |-----| SERVER 1 |
--NET--| W |     \------/\   /\----------/
       | I |              \_/
       | T |              / \
--NET--| C |     /------\/   \/----------\
       | H |-----| LB 2 |-----| SERVER 2 |
       \---/     \------/     \----------/

Você tem duas linhas separadas para a rede fornecidas pelo seu DC. Ambas as linhas estão na mesma VLAN e ambas estão conectadas ao switch (a melhor maneira é de 2 switches). 2 loadbalancers estão conectados a esses switches e compartilham um IP virtual. É o IP que pode fluir entre essas duas máquinas. Você pode usar VRRP e keepalived para conseguir isso muito bem.

Por trás desses dois loadbalancers, dois servidores espelhados são colocados. E aqui vem a mágica:

  1. Você apontará seu registro DNS para esse virtual ip
  2. Quando alguém acessa seu aplicativo, ele passa por um LB e termina em um servidor
  3. Quando um servidor morre, o loadbalancer o notará com algo como healtcheck e desativará esse servidor. Cada novo pedido será enviado para o servidor de integridade.
  4. Quando um balanceador de carga for interrompido, o keepalived o notará (novamente por meio de uma verificação de integridade) e moverá esse IP flutuante para o balanceador de carga de integridade e ninguém notará isso.

Você deve saber que o HA é caro e não pode fazê-lo com baixo orçamento. Você precisa calcular se a interrupção de seu serviço não é mais barata que o custo de HA, às vezes é.

Você deve procurar nas palavras-chave vrrp, keepalived e haproxy algumas idéias e maneiras de pensar sobre isso.

    
por 23.02.2016 / 13:23
1

A abordagem usual é, obviamente, usar dois nós de encaminhamento (balanceamento) em alguma forma de cluster HA . A consistência do ponto do mundo exterior é conseguido através de várias formas de compartilhada endereço IP - VRRP, CARP (o mesmo que VRRP, mas a implementação aberta), etc. Assim você terá a redundância em ambas as camadas - na camada de balanceamento e na camada de dados / serviço.

A consistência da camada de dados / serviço está além do escopo desta resposta, no entanto, geralmente é bastante simples. Você usa armazenamento de sessão centralizado (provavelmente replicado também, como redis ou memcached) e conjunto replicado de bancos de dados.

Em geral, isso é possível em apenas dois servidores físicos, cada um deles desempenhando papéis dirrerent ao mesmo tempo:. Um balanceador, um servidor de DB, e assim por diante

    
por 23.02.2016 / 12:00