Como você automatiza o failover no EC2?

13

Das pessoas que gerenciam seus próprios clusters (ou seja, não usam / pagam pela Amazon Autoscale, Rightscale, Scalr etc.), como estão gerenciando suas instâncias no EC2 e lidando com (por exemplo) failover? Gostaria de saber se a maioria das pessoas acaba escrevendo suas próprias cargas de scripts contra a API do EC2, como suspeito.

Essa é certamente a nossa abordagem: prepare nosso próprio daemon de monitoramento / reinicialização baseado em Python Boto que roda fora do local, ouvindo as atualizações do UDP de nossas instâncias. Na falha, capturamos volumes, registramos imagens, iniciamos novas instâncias, excluímos volumes antigos e assim por diante.

De vez em quando, ao invadir nossos scripts, acho que já deve haver algumas ferramentas de código aberto que lidam com esses problemas e que não têm restrições de (digamos) Scalr, mas eu sempre volto do Google de mãos vazias. (Coisas que o Scalr tem são bastante limitadas no conjunto / versões / configurações de software suportadas e têm maneiras especializadas e complicadas da OMI de manipular essas configurações.)

Além disso, o ecossistema Linux-HA / Pacemaker (Heartbeat, ldirectord etc.) parece que não é realmente adequado para o EC2 . (Mas descobri isso - embora não tenha certeza de que seja realmente uma solução de alta qualidade).

Yang
fonte

Respostas:

5

Bem, não pretendo apenas afirmar o óbvio, mas a idéia geral é empurrar essa complexidade para os serviços gerenciados pela Amazon.

Portanto, no front-end, você usaria o Amazon Elastic Load Balancing (ELB) para fornecer um balanceamento de carga altamente disponível. Na extremidade traseira, você usa o Amazon Relational Database Service (MySQL hospedado), SimpleDB e S3 para armazenamento. Todos eles são gerenciados pela Amazon e contêm algum tipo de manipulação de alta disponibilidade / failover.

Isso normalmente deixa os servidores de aplicativos da web e quaisquer tipos de servidor comuns menos comuns que você possa estar usando (servidores de renderização, repositórios de dados NoSQL auto-instalados etc.).

Os servidores Webapp geralmente são tratados bem o suficiente com as verificações de integridade incorporadas no ELB. Você pode aceitar uma pequena degradação no desempenho quando um servidor de aplicativos da web está inoperante ou provisionar consistentemente um servidor com mais do que o necessário. Ou, se sua configuração for simples, quando um servidor de aplicativo da web falhar, o ELB, juntamente com o Cloudwatch, poderá gerar automaticamente um novo servidor de aplicativo da web para você.

Seus próprios servidores personalizados são outra questão. Para isso, é verdade, você está por conta própria e precisará se contentar com os métodos internos do aplicativo ou cole fita adesiva em algo com scripts personalizados / ferramentas de HA de código aberto.

Comprar a solução da Rightscale pode ser muito caro. Mas ferramentas Amazon mais caras, como ELB, alerta básico do CloudWatch (agora com resolução de 5 minutos) ou AutoScale valem a pena se você precisar de alta disponibilidade.

Jesper M
fonte
3
Estamos familiarizados com o conjunto de recursos da AWS, bem como com suas limitações. Para dar o seu primeiro exemplo, o ELB é acessado via CNAME RRs, que não pode coexistir com SOA RRs e, portanto, não pode atender a TLDs, além de não ser possível acessar via IPs estáticos - as frustrações ecoaram amplamente nos fóruns. Para dar o seu segundo exemplo, sim, o RDS é o MySQL, que é a limitação gigante. Sim, estamos interessados ​​em automatizar o failover de nossos próprios tipos de máquinas. Sim, a implantação da nuvem privada é relevante para nós. Sim, estou apenas curioso. Etc.
Yang
2
@Yang: Você deveria ter formulado sua pergunta com mais cuidado e me poupado o trabalho de digitar minha resposta. Não existe uma solução única para HA; depende do serviço em questão, como o estado é mantido, propriedades de failover de protocolo etc. Você está certo sobre as limitações / dificuldades no uso de ferramentas típicas de HA de nível de IP no EC2. Mas não há uma resposta única que se aplique universalmente ao "HA na AWS".
Jesper H
0

O RightScale tem ótimos artigos sobre como automatizar o failover no EC2. Embora a maioria deles mostre como fazer isso usando o RightScale, os princípios são gerais e provavelmente úteis para quem pensa em como configurar uma arquitetura de failover no EC2.

Suman
fonte
0

Os problemas que você descreve (alta disponibilidade, monitoramento de servidores personalizados, serviços de "canalização") são geralmente tratados por um provedor de PaaS. Rightscale e Scalr já foram mencionados em uma resposta anterior e existem boas opções adicionais (veja aqui algumas opções de PaaS:

/programming/9542784/looking-for-paas-providers-recommendations )

Você deve considerar qual dos fornecedores oferece o melhor ajuste para o que você precisa.

Aviso prévio: trabalho para o cloudify, um provedor de PaaS de código aberto.

Barak
fonte
0

Recentemente, escrevi um post em nosso blog de engenharia sobre como usar o ELB em conjunto com o Auto Scaling para obter failover automático para qualquer tipo de aplicativo. Ele aborda como as verificações de integridade do ELB podem ser usadas para executar ping no status do seu aplicativo e disparar ações de dimensionamento automático.

O desenvolvedor
fonte
0

Você instala a pulsação nos dois servidores. Você anexa um IP elástico ao servidor 'ativo'. Você configura um script para executar o failover iniciando uma solicitação de API para obter o IP elástico. Assim que o servidor 'stand-by' obtém o IP elástico ( demora cerca de 30 a 60 segundos), pode ser o mestre / ativo.

Não tenho detalhes específicos para fornecer aqui.

Amir Mehler
fonte
-1

A Amazon já fornece o Elastic Load Balancing ... Por que reinventar a roda?

Chris S
fonte
3
Por causa das várias limitações do ELB? Porque requer CNAME e não pode servir foo.com e www.foo.com? Porque eu quero implementar lógica de agendamento personalizada? Porque estou curioso para saber como você implementaria o ELB em um cluster de VMs não confiáveis? Faça sua escolha.
Yang
@ Yang, você faz da mesma maneira que faria se fossem servidores no seu datacenter. Não há diferença fundamental, nem molho mágico que o torne um ambiente em nuvem.
Chris S