Como configurar o Auto Scaling básico para site Amazon EC2 usando PHP e MySQL
-
22-12-2019 - |
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.
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.
- .
- Como a resposta anterior mencionada, você não deve estar usando instâncias T1.micro para quaisquer instâncias de produção
- 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.
- 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.
- 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.
- 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).
- 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 ).
- Supondo que você esteja versionando seu código no Git, crie uma chave de implantação Git e adicione-a ao servidor.
- 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.
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:
- .
Agora, uma vez que a instância acabe, você terá seu servidor web, mas ele estará executando o código antigo:
- .
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.