Várias instâncias do AWS e um banco de dados

6

Eu tenho um aplicativo da web que mora em duas instâncias do AWS - uma instância hospeda o site e a outra hospeda o banco de dados real (MySQL). A instância que hospeda o site tem um IP elástico apontando para ele, que está vinculado ao meu nome de domínio.

Obviamente, um dos principais benefícios da AWS é a capacidade de executar várias instâncias de uma só vez quando as coisas ficam ocupadas, e a AWS até oferece soluções automatizadas para isso. Ótimo. Mas se eu tenho meu domínio apontando para um IP e esse IP ligado a uma instância, como faço para espalhar o tráfego entre muitas instâncias? Eu tenho a máquina primária como um balanceador de carga? Em caso afirmativo, existe uma solução de balanceamento de carga comumente usada para uso com LAMP?

    
por mattloaf1 19.02.2010 / 03:31

4 respostas

3

Você pode usar o DNS round-robin, conforme mencionado anteriormente. E se você está procurando uma solução rápida e fácil, é provavelmente o que eu recomendaria também.

No entanto, as instâncias do EC2 não são duráveis e você não deve tratá-las dessa maneira. Significa que eles podem subir e desaparecer como um peido ao vento e sua aplicação tem que ser tolerante com isso. O DNS RR pode ser uma fonte de dor para você, porque não é inteligente o suficiente para lidar com tolerância a falhas / alta disponibilidade. Se um de seus servidores web morresse, o usuário ficaria preso tentando se conectar à máquina inoperante até que o TTL caísse no registro. O truque mencionado anteriormente de configurar um TTL ridiculamente baixo não funcionará. Servidores DNS de cache downstream não honrarão um TTL tão baixo. Você teria sorte de sair com um TTL de uma hora. Muitos usuários podem ficar presos tentando se conectar ao mesmo servidor da Web morto por 24 horas ou mais.

Eu recomendo que você olhe para HAProxy . O Reddit.com usa o HAproxy no EC2 para balancear a carga em cerca de 200 milhões de pageviews / mo. em várias dúzias de instâncias do servidor da web. Tenho certeza de que ele também lidará com seu aplicativo.

    
por 19.02.2010 / 05:22
5

A Amazon também oferece serviços de balanceamento de carga elástica.

link

    
por 23.02.2010 / 23:07
2

Você pode usar seu EIP com o balanceamento de carga elástico, como mencionou April; no entanto, quando eu estava avaliando isso, havia algumas deficiências que tornavam menos que ideal para minha implantação.

Tenho 2 IPs elásticos atribuídos a algumas instâncias do EC2 que servem como servidores Web front-end. Isso é simplesmente executando servidores Apache2 encadeados que manipulam o balanceamento de carga para meus servidores de aplicativos por trás deles. Esses dois EIPs são então colocados no round-robin DNS padrão.

A configuração do Apache2 faz uso do mod_balancer para balancear as requisições entre as instâncias do servidor backend, que nunca é menor que 3 instâncias. O banco de dados é executado em sua própria instância EC2 separada, à qual os sistemas de backend podem se conectar.

Você pode substituir a configuração do Apache2 em meus sistemas front-end por HAProxy. Eu olhei para isso, mas precisava fazer um roteamento muito mais inteligente do que eu pensava ser prático com o HAProxy, mas algum dia eu posso voltar e reavaliar essa posição.

Nesta configuração, estou lidando com mais de meia dúzia de sites altamente afetados que contam seus hits em dezenas de milhões por mês. Os servidores Apache2 front-end encadeados mostram quase nenhuma carga, pois eles apenas agem como intermediários, enquanto o trabalho real é feito nos servidores back-end. Percebi um aumento considerável no desempenho de velocidade de quando estávamos trabalhando em servidores dedicados tradicionais em datacenters co-localizados.

    
por 24.02.2010 / 00:17
1

Solução super básica:

Você pode configurar suas entradas de DNS para o site usando Round Robin DNS para apontar para vários IPs de host. Eleve um IP elástico separado para cada instância de front-end. No lado do DNS, é apenas um caso de adicionar uma segunda entrada para o mesmo nome de host, com o IP alternativo. Defina o TTL em cada entrada bastante baixa (5-60 segundos).

Mais informações aqui: link

    
por 19.02.2010 / 03:55