Pergunta

Eu tenho um site PHP/MySQL básico armazenado inteiramente em uma microinstância do Amazon EC2.O tráfego está prestes a aumentar por um período temporário e eu gostaria de implementar o escalonamento automático básico principalmente para me dar mais potência de CPU, já que esse parece ser o gargalo.Portanto, as principais restrições que sei que tenho são:

  • Preservar dados do banco de dados MySQL
  • Preservar arquivos do site (que estão em /var/www/* )

Alguém pode apontar a melhor maneira de fazer isso?

P.S.Como a configuração do meu servidor não é tão complexa, estou disposto a reconstruir/recarregar tudo se for necessário.Eu só preciso colocar o Auto Scaling corretamente.

Foi útil?

Solução

Eu tive um problema semelhante e aqui está o que fiz.

Prepare o servidor de aplicativos para ser autoescalável (capaz de ser executado em várias instâncias simultaneamente):

  • Mudei meus bancos de dados SQL (MySQL e MSSQL) para RDS;
  • Modifiquei meu programa para que ele não escreva nos volumes/unidades locais e, em vez disso, coloco todos os arquivos em um balde S3;

Testei esta instância para garantir que meu servidor de aplicativos esteja totalmente separado do meu banco de dados e de outro armazenamento de gravação.Quando estiver tudo pronto:

  • enviei todas as minhas alterações para um repositório;
  • agendou uma tarefa que será executada quando meu servidor iniciar (e a cada 2 horas depois) que fará um git pull origin master do repositório (para garantir que o código nas novas instâncias será sempre o mais recente);
  • criou uma AMI personalizada desta instância;
  • criou um balanceador de carga;
  • criei um grupo de configuração de inicialização/escalador automático que usa a AMI que criei;

Agora que o escalonador automático está pronto:

  • Mudei a entrada do DNS apontando para o meu site para usar um DNS CNAME apontando para o ponto final do balanceamento de carga (nome DNS) em vez do ip elástico que eu originalmente associe à minha instância EC2 (de onde criamos o AMI e fiz o teste );

Tome nota:NÃO use o endereço IP estático atribuído ao seu Load Balancer porque eles serão alterados com muita frequência.Você realmente precisa configurar um CNAME apontando para o endpoint do Load-Balancer.

Algumas manutenções que precisei fazer:

  • Clonei uma cópia do repositório para uma cópia local onde faço os testes e atualizações.Quando preciso alterar alguma coisa no servidor de produção, simplesmente envio minhas alterações para o repositório e meu servidor de produção as coleta a cada 2 horas.
  • Quando já há muitas atualizações em meu código desde a última vez que criei a AMI, eu recrio a AMI para reduzir o tempo necessário para extrair do repositório.

E aliás, estou usando T1.micro instância.Essa é a ideia de usar o escalonamento automático em primeiro lugar.Não queremos gastar em um servidor Médio o tempo todo que nosso aplicativo estiver ocioso.

Outras dicas

advertências:

Como a resposta anterior mencionada, você não deve estar usando instâncias T1.micro para quaisquer instâncias de produção.

    .
  1. Como a resposta anterior mencionada, você não deve estar usando instâncias T1.micro para quaisquer instâncias de produção
  2. Você não pode (facilmente) instâncias do AutoScale EC2 que estão executando o MySQL. Se você acabou de pensar nisso, se você tiver vários dbs aparecendo, os dados não seriam sincronizados e uma bagunça. A maneira mais fácil de fazer isso é usar RDS e adicionar read-réplicas como você precisa.
  3. Agora para criar uma instância de autocalagem da Web (assumindo que você movimentado seu dB para RDS) Há algumas etapas no lado da AWS, e algumas etapas do seu lado com relação ao Gerenciamento de Código / Implantação.

    Autoscalação envolve:

      .
    1. Criando um AMI da sua atual exemplo do EC2. Com uma instância do EBS-Backed, os dados / volumes serão embrulhados com o AMI e serão implantados quando você implantar este AMI. No entanto, se você fez alterações no seu código, obviamente, este código não será atualizado, vamos cobrir isso abaixo.
    2. Criar uma configuração de lançamento de autoscalagem - você pode fazer isso via GUI agora no console da AWS, embora ainda seja fã do CLI. A configuração de lançamento especifica o AMI a ser usado, tamanhos de instância, etc.
    3. Crie um grupo de autocalagem e aplique a configuração de lançamento a ela. Quando você cria um grupo de autoscalagem, você deseja especificar um ELB para adicionar as instâncias a não serem acessíveis. Se você estiver usando um balanceador de carga do seu próprio rolo, certifique-se de que a instância se registe a isso quando é iniciada (usando o Cloud-init ou algo).
    4. Criar alarmes CloudWatch para ações de escala e escala - Isso pode ser vinculado à CPU, Network I / O, etc. Você precisará de pelo menos 2 alarmes (um para escala de escala, um para escala ).
    5. Agora, uma vez que a instância acabe, você terá seu servidor web, mas ele estará executando o código antigo:

        .
      1. Supondo que você esteja versionando seu código no Git, crie uma chave de implantação Git e adicione-a ao servidor.
      2. Use o Cloud-Init para acionar um código git pull - Cloud-init será executado apenas uma vez para que ele certifique-se de que seu servidor seja iniciado e execute com seu código mais recente.
      3. Você está pronto! As instruções acima são de alto nível. Indo para o detalhe passo a passo implicaria uma resposta muito mais longa, mas feliz em fornecer explicação sobre as etapas quando necessário, deixe-me saber!

Primeiro de tudo, se você está querendo executar qualquer tipo de site no EC2, você não deve usar micro instâncias.Você certamente não deve usar a micro instância em conjunto com autoscalação.A boa notícia é que, uma vez que a sua instância de micro está no volume do EBS-Backed, você pode simplesmente tirar um instantâneo desse volume para S3 e usar isso como base para qualquer número de instâncias de backups.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top