Escale cargas de trabalho em ambientes de VPC compartilhados e dedicados
Este tutorial pode incorrer em custos. Use o Estimador de custos para gerar uma estimativa do custo baseada em seu uso projetado.
Este tutorial apresenta as etapas de configuração de cargas de trabalho isoladas em um ambiente compartilhado (multilocatário) e em um ambiente dedicado (único locatário). Provisione um IBM Cloud® Virtual Private Cloud (VPC) com sub-redes abrangendo diversas zonas de disponibilidade (AZs) e instâncias de servidor virtuais (VSIs) que podem escalar de acordo com seus requisitos para garantir a alta disponibilidade de seu aplicativo. Além disso, configure balanceadores de carga para fornecer alta disponibilidade entre zonas dentro de uma região. Configure o Virtual Private Endpoints (VPE) para o seu VPC fornecendo rotas privadas para serviços na IBM Cloud.
Isole as cargas de trabalho ao provisionar um host dedicado, anexando um volume de dados criptografados a um VSI, expandindo o volume de dados anexado e redimensionando o VSI após o fato.
Você irá provisionar todos esses serviços e recursos de VPC usando o IBM Cloud Schematics, que fornece recursos Terraform-as-a-Service. O modelo Terraform define os recursos do IBM Cloud a serem criados, atualizados ou excluídos.
Objetivos
- Aprenda a configurar um VPC multizona com escala automática de instância.
- Entenda os conceitos de balanceamento de carga pública e privada.
- Saiba como escalar instâncias dinamicamente ou periodicamente.
- Conheça o uso de hosts dedicados.
- O app de front-end implementado em instâncias de servidor virtual se comunica com o app de back-end por meio do balanceador de carga privado.
- O app de back-end se comunica de forma segura com os serviços de nuvem via um terminal privado virtual (VPE).
- À medida que a carga no aplicativo aumenta, o ajuste de escala para o VPC é ativado e dinamicamente inclui ou remove as instâncias de servidor virtual com base em métricas como CPU, RAM, etc. ou por meio de ajuste de escala planejado.
- À medida que o escopo se expande, o host dedicado se isola e realiza cálculo pesado nos dados. Redimensione a instância no host dedicado atualizando o perfil com base em seu requisito. Além disso, expanda a capacidade de volume de armazenamento de blocos.
- Todas as instâncias se comunicam com os serviços IBM Cloud sobre o backbone privado usando um terminal privado virtual (VPE). Consulte o tópico Sobre os gateways do terminal privado virtual para obter mais detalhes.
Antes de Iniciar
O tutorial requer:
- Uma IBM Cloud conta faturável.
- Um shell local com
curl..
Ativar a criação de log e o monitoramento
- Configure uma instância IBM Cloud Logs como destino de IBM Cloud Logs Routing. Consulte Primeiros passos com IBM® Cloud Logs Routing
- Configure uma instância Monitoring para coletar métricas da plataforma. Consulte Ativação de métricas de plataforma
Provisão de serviços em nuvem necessária
Nesta seção, você criará os serviços de nuvem a seguir necessários para o aplicativo usando IBM Cloud Schematics: IBM Cloud Databases for PostgreSQL e IBM Cloud Object Storage.
- Navegue até SchematicsÁreas de trabalho, clique em Criar área de trabalho.
- Na seção Especificar modelo, forneça
https://github.com/IBM-Cloud/vpc-scaling-dedicated-hostna URL do repositório GitHub ou GitLab. - Selecione terraform_v1.5 como a versão do Terraform e clique em Next.
- Na seção Especificar modelo, forneça
- Em Detalhes da área de trabalho,
- Forneça um nome de espaço de trabalho: '
vpc-scaling-workspace. - Escolha um
Resource Groupe umLocation. - Clique em Avançar.
- Forneça um nome de espaço de trabalho: '
- Verifique os detalhes e, em seguida, clique em Criar.
- Em Variáveis, defina '
step1_create_servicescomo true clicando no menu de ação na linha > Editar, desmarque Usar padrão, escolha true no menu suspenso 'Override Valuee clique em Salvar. - Configure quaisquer variáveis adicionais que você gostaria de substituir, as mais típicas são
region,resource_group_name. - Role até a parte superior da página e clique em Gerar plano. Isso é o mesmo que o comando
terraform plan. - Clique em Mostrar mais para verificar os recursos a serem provisionados.
- Navegue até a página da área de trabalho usando o menu de trilha de navegação e clique em Aplicar plano. Verifique os logs para ver o status dos serviços criados.
Navegue até a lista de recursos. Aqui, é possível filtrar pelo basename usado para criar os recursos, ou seja, vpc-scaling, e você verá os serviços em nuvem necessários para este tutorial
provisionado no grupo de recursos que você especificou. Todos os dados armazenados com esses serviços são criptografados com uma chave gerada e armazenada no IBM Key Protect for IBM Cloud.
Configurar um Virtual Private Cloud Multizona
Nesta seção, você irá:
- Provisione uma IBM Cloud® Virtual Private Cloud (VPC) com sub-redes que se estendem por duas zonas. Para garantir a alta disponibilidade do seu app de front-end e do app de back-end, você criará vários VSIs nessas zonas.
- Configure um balanceador de carga pública para o seu front-end e um balanceador de carga privado para o seu app de back-end para oferecer alta disponibilidade entre as zonas.
- Crie um modelo de instância usado para prover instâncias em seu grupo de instância.
Inicialmente, você pode não implantar todos os recursos de infraestrutura para fazê-lo escalar, mesmo que tenha projetado dessa forma. É possível iniciar com apenas uma ou algumas instâncias, conforme mostrado a seguir.
À medida que a carga aumentar, você poderá precisar de mais instâncias para entregar o tráfego. Você pode configurar um balanceador de carga público para o app de front-end e um balanceador de carga privado para o app de back-end para distribuir igualmente as solicitações recebidas pelas instâncias. Com um balanceador de carga, é possível configurar verificações de funcionamento específicas para os membros do conjunto de membros associados às instâncias.
Um modelo de instância é necessário para que seja possível criar um grupo de instâncias para o ajuste automático de escala. O modelo de instância define os detalhes das instâncias de servidor virtual que são criadas para o seu grupo de instâncias.
Por exemplo, especifique o perfil (vCPU e memória), a imagem, os volumes conectados e as interfaces de rede para o modelo de imagem. Além disso, " user data é especificado para executar automaticamente os scripts de inicialização necessários para os aplicativos front-end e back-end, respectivamente. Todas as instâncias de serviço virtual criadas para um grupo de instâncias utilizam o modelo de instância
que é definido no grupo de instâncias. O script provisiona um modelo de instância e um grupo de instâncias (um para front-end e outro para back-end) sem políticas de ajuste de escala automático definidas ainda. Este exemplo não requer volumes
de dados para que eles sejam comentados no recurso modules/create_vpc/autoscale/main.tf ibm_is_instance_group.
O VPC usa a tecnologia cloud-init para configurar instâncias de servidor virtual. O campo user data na nova página do servidor virtual para VPC permite que os usuários insiram opções de configuração customizadas usando cloud-init.
Provisão dos recursos
Se desejar acessar os VSIs diretamente mais tarde, poderá opcionalmente criar uma chave SSH e configurar ssh_keyname para o nome da chave SSH do VPC.
-
Acesse a guia Configurações da sua Schematics área de trabalho, clique no menu de ação para
step2_create_vpc, desmarque Usar padrão, mude o valor de substituição para true e Salvar a configuração. -
Clique em Aplicar plano para fornecer os recursos do VPC.
Existem diversos módulos Terraform envolvidos no fornecimento de recursos do VPC. Para entender melhor, verifique o arquivo main.tf.
-
Siga os logs de status clicando em Mostrar mais. Depois que a aplicação for bem-sucedida, você deverá ver os seguintes recursos provisionados:
-
um VPC
-
duas sub-redes (uma em cada zona)
-
um balanceador de carga público com um grupo de segurança conduzindo o tráfego para o aplicativo de front-end
-
um balanceador de carga privado com um grupo de segurança conduzindo as solicitações de front-end para back-end
-
um modelo de instância e um grupo de instância para fornecimento e ajuste de escala das instâncias
-
Inicialmente, duas instâncias de servidor virtual (uma instância de front-end e uma instância de back-end) com os respectivos grupos de segurança anexados
A instância de front-end executa um servidor Nginx para entregar um aplicativo da web PHP que conversa com o back-end para armazenar e recuperar dados. A instância de backend executa um aplicativo Node.js com wrapper da API GraphQL para IBM Cloud Databases for PostgreSQL e IBM Cloud Object Storage.
-
-
Copie o nome do host do balanceador de carga público da saída de log e cole o nome do host em um navegador prefixando
http://para ver o aplicativo de front-end. Conforme mostrado no diagrama abaixo, insira o balanceamento, por exemplo, 10 e clique em Enviar para ver os detalhes das instâncias de servidor virtual que atendem a solicitação.
Visualizar aplicativo Para verificar os recursos de VPC provisionados, é possível usar a IU do VPC ou o Cloud Shell com os comandos ibmcloud is.
Na próxima seção, você escolherá um método de ajuste de escala (estático ou dinâmico) e criará políticas de ajuste de escala.
Aumente o carregamento em suas instâncias para verificar o ajuste de escala
Nesta seção, você começará o ajuste de escala das instâncias com o método de ajuste de escala inicialmente configurado como estático. Em seguida, você se move para ajustar a escala das instâncias com o escalonamento dinâmico, configurando um gerenciador de instância e uma política de gerenciador de grupos de instância. Com base nas métricas de utilização de destino que você define, o grupo de instâncias pode incluir ou remover dinamicamente as instâncias para atingir a sua disponibilidade de instância especificada.
Ajuste de escala manual
- Para verificar o método de ajuste de escala estático, navegue até a guia Configurações de sua Schematics área de trabalho para ver se a variável
step3_is_dynamicestá configurada comofalse. - Atualize a variável '
step3_instance_countpara '2e salve a configuração. - Aplique o plano para ver as duas instâncias adicionais provisionadas (uma instância de servidor virtual de front-end e uma instância de servidor virtual de back-end).
- Na guia Associações do seu grupo de instância de front-end, você deve ver agora
2instâncias. - Navegue até o navegador que mostra o app de front-end e clique no botão Atualizar ou envie um novo balanceamento várias vezes para ver os detalhes da instância de servidor virtual de front-end e a instância de servidor virtual de back-end atendendo a solicitação. Você deve ver duas das quatro instâncias de servidor virtual atendendo sua solicitação.
- Antes de mover para a próxima etapa, atualize a variável
step3_instance_countde2para1e Salve a configuração..
É possível conferir os logs e monitorar seus balanceadores de carga posteriormente no tutorial.
Ajuste de escala automático
-
Para alternar para o método de ajuste de escala dinâmico, configure a variável
step3_is_dynamiccomo true e clique em Salvar a configuração e Aplicar o plano. Essa configuração inclui um gerenciador de grupos de instâncias e uma política de gerenciador de grupos de instâncias para o grupo de instâncias existente alternando assim o método de ajuste de escala do grupo de instâncias destaticparadynamic.Instâncias de escala -
Para verificar os recursos de dimensionamento automático, você pode usar um gerador de carga em seu aplicativo. O script de shell a seguir simula um carregamento básico de 90000 solicitações com até 300 em paralelo
-
Abra um terminal local..
-
Crie uma variável de shell para o URL do balanceador de carga público da etapa acima com
/v1/controller/balance.phpanexado.export APPURL=http://<load-balancer>/v1/controller/balance.php -
Execute o seguinte script para gerar algum carregamento. Você pode repetir para criar mais tráfego. O
[1-1000]solicita que cada chamada curl faça essa quantidade de GETs. O--retrycapturará cada um dos números do comandoseq.seq 1 1000 | xargs -n1 -P100 curl -s $APPURL/"[1-1000]" -o /dev/null --retry
-
-
Na guia Associações do seu grupo de instâncias, você deve ver novas instâncias sendo provisionadas.
Você deve ver até 5 instâncias consideraram a carga como a contagem máxima de associação ser configurada como
5. É possível verificar os tamanhos mínimo e máximo do grupo de instâncias na guiaOverviewdo grupo de instâncias. -
Navegue até o navegador que mostra o app de front-end e envie o balanceamento várias vezes para ver os detalhes da instância de servidor virtual de front-end e a instância de servidor vistual de back-end atendendo a solicitação.
Espere que as instâncias escalem, pois o período agregado é configurado como
90 secondse período de tempo de espera é configurado como120 seconds. -
Espere as instâncias escalarem para
1antes de seguir para a próxima etapa.
Ações planejadas (Opcional)
Nesta seção, você usará o ajuste de escala planejado para VPC para agendar ações que incluam ou removam automaticamente a capacidade do grupo de instâncias, com base em demanda diária, intermitente ou sazonal. É possível criar diversas ações planejadas que escalam a capacidade mensalmente, semanalmente, diariamente, de hora em hora ou até mesmo a cada número configurado de minutos. Esta seção é opcional e não é necessária para concluir o restante deste tutorial..
- Para criar uma ação planejada única, configure a variável
step3_is_scheduledcomo true e clique em Salvar a configuração e Aplicar o plano. - Verifique o status de sua ação planejada na guia Ações planejadas do grupo de instâncias. O modelo Terraform agendará as ações para 5 minutes a partir do momento em que você aplicar o plano. Quando o status da ação for alterado
para
completed, o tamanho do grupo de instâncias será configurado para um mínimo de2e um máximo de5instâncias. Você deve ver as2instâncias na guia Associações do grupo de instâncias. - Clique em Gerar carga algumas vezes para gerar mais tráfego para ver a escala das instâncias até um máximo de
5.
Monitorando o balanceador de carga para métricas de VPC
Os balanceadores de carga calculam as métricas e enviam essas métricas para a sua instância de monitoramento, o que reflete diferentes tipos de uso e tráfego. É possível visualizar e analisar as métricas no painel IBM Cloud Monitoring.
- É possível monitorar seus balanceadores de carga na página Balanceadores de carga para VPC por
- Clicando no nome do balanceador de carga.
- No bloco
Monitoring previewdo balanceador de carga, clique em Ativar monitoramento.
- Alternativamente, também é possível monitorar os balanceadores de carga navegando até a páginaObservabilidade e clique em Monitoramento no painel esquerdo
- Clique em Instâncias
- Clique em Abrir painel ao lado da instância marcada como
Platform metrics. - Clique em Dashboards na barra lateral esquerda para abrir o painel IBM Load Balancer for VPC Monitoring Metrics.
- Em Dashboard templates, expanda IBM > Load Balancer for VPC Monitoring Metrics. O painel padrão não é editável.
- Lembre-se de gerar carga com relação ao seu aplicativo.
Verificar os logs
Os serviços de VPC geram logs de plataforma na mesma região na qual estão disponíveis. Os logs da plataforma são logs que são expostos por serviços ativados por criação de log e a plataforma na IBM Cloud. Para obter mais informações, consulte Configuração dos registros da plataformaIBM Cloud
- Navegue até a página Observability e clique em Logging > Instances no painel esquerdo.
- Clique em Cloud Logs na parte superior do painel
- Clique em Open dashboard (Abrir painel) ao lado da instância configurada anteriormente para capturar os registros.
- Clique em Explore logs > Logs no seletor de ferramentas à esquerda.
- Cole o CRN do balanceador de carga na barra de pesquisa para ver os registros.
Para verificar os logs de outros recursos do VPC, consulte Criação de log do VPC.
Configurar um host dedicado e prover uma instância de serviço virtual com um volume de dados criptografados
O fornecimento de hosts dedicados incorrerá em custos. Use o Estimador de custos para gerar uma estimativa do custo baseada em seu uso projetado.
Nesta seção, você criará um host dedicado em um grupo e oferecerá uma instância com um volume de dados criptografados.
A razão pela qual você cria um host dedicado é gerar um nó de cálculo de locatário único, livre de usuários fora de sua organização. Dentro desse espaço dedicado, é possível criar instâncias de servidor virtual de acordo com as suas necessidades. Além disso, é possível criar grupos de hosts dedicados que contêm hosts dedicados para um propósito específico. Como um host dedicado é um espaço de locatário único, somente os usuários em sua conta que têm as permissões necessárias podem criar instâncias no host.
-
Navegue até a guia Configurações da área de trabalho do seu Schematics, atualize a variável
step4_create_dedicatedcomo true e clique em Salvar a configuração. -
Clique em Aplicar o plano para prover os recursos a seguir,
- um grupo de hosts dedicado
- um host dedicado
- uma instância de serviço virtual com volume de dados criptografados (criptografia usando o IBM Key Protect for IBM Cloud) e com um grupo de segurança anexado.
Incluir um host dedicado -
Na saída de log, copie o endereço IP da instância e ative o Cloud Shell para executar o comando a seguir substituindo o item temporário
<IP_ADDRESS> pelo endereço IP da instânciaexport INSTANCE_IP=<IP_ADDRESS>Geralmente, você não irá configurar um IP público (IP flutuante) para uma instância. Nesse caso, um IP flutuante é configurado permite curl para o app implementado na instância.
-
Emita o comando curl a seguir para consultar o banco de dados. O aplicativo em execução na instância irá ler conteúdo do Databases for PostgreSQL sobre o terminal privado. Os dados são os mesmos que estão disponíveis ano aplicativo de front-end.
curl \ -s -X POST \ -H "Content-Type: application/json" \ --data '{ "query": "query read_database { read_database { id balance transactiontime } }" }' \ http://$INSTANCE_IP/api/bank -
Emita o comando curl a seguir para consultar o depósito do COS. O aplicativo em execução na instância irá ler conteúdo do Object Storage e retornar os resultados no formato JSON. Os dados armazenados em COS só estão disponíveis para o aplicativo em execução por meio da instância no host dedicado.
curl \ -s -X POST \ -H "Content-Type: application/json" \ --data '{ "query": "query read_items { read_items { key size modified } }" }' \ http://$INSTANCE_IP/api/bank -
Emita o comando curl a seguir para consultar o banco de dados e o depósito COS de uma vez. O aplicativo em execução na instância lerá conteúdo do Databases for PostgreSQL e do Object Storage e retornará os resultados no formato JSON.
curl \ -s -X POST \ -H "Content-Type: application/json" \ --data '{ "query": "query read_database_and_items { read_database { id balance transactiontime } read_items { key size modified } }" }' \ http://$INSTANCE_IP/api/bank
Redimensione o VSI e expanda o volume de armazenamento de bloco conectado no host dedicado
Se você observou o perfil da instância provisionado no host dedicado, ele é configurado como cx2-2x4,em que c significa a família Compute (categoria) com 2 vCPUs e 4 GiB de RAM. Nesta seção, você irá
redimensionar a instância atualizando o perfil para cx2-8x16 com 8 vCPUs, 16 GIB de RAM.
Nesta seção, você também expandirá o volume de armazenamento de bloco conectado ao VSI de 100 GB para 250 GB. Para entender a capacidade máxima no perfil de volume selecionado, confira Expandindo a capacidade do volume de armazenamento de bloco
Redimensione o VSI
-
Para redimensionar o VSI, navegue até a guia Configurações da sua área de trabalho do Schematics, atualize a variável
step5_resize_dedicated_instancepara true e Salve a configuração.Os servidores virtuais só podem ser redimensionados para perfis suportados pelo host dedicado no qual a instância é hospedada. Por exemplo, um servidor virtual provisionado com um perfil da família Compute, pode redimensionar para outros perfis também pertencentes à família Compute. Para obter mais informações sobre perfis, consulte Perfis de instância.
-
Aplicar o plano para redimensionar a instância por meio de
2 VCPUs | 4 GiB RAMpara8 VCPUs | 16 GiB RAM. -
É possível verificar o perfil da instância ao ativar o Cloud Shell, mudando a região para aquela na qual você provisionou sua VPC com o comando
ibmcloud target -r us-southe, em seguida, executando o comandoibmcloud is instancesou por meio da IU Instâncias de servidor virtual para VPC clicando no nome da instância dedicada.
Expanda a capacidade do volume de armazenamento de bloco
- Para expandir a capacidade do volume de armazenamento de bloco conectado, navegue até a guia Configurações da sua área de trabalho do Schematics, atualize a variável
step5_resize_dedicated_instance_volumepara true e clique em Salvar a configuração. - Aplique o plano para aumentar a capacidade do volume de armazenamento de bloco de
100 GBpara250 GB. - É possível verificar o tamanho do
Data volumepor meio da IU Instâncias de servidor virtual para VPC clicando no nome da instância dedicada.
O que vem a seguir?
Estenda o cenário configurando a finalização de SSL, sessões adesivas e criptografia de ponta a ponta. Para obter mais informações, consulte esta postagem do blog.
Remover recursos
Para remover a área de trabalho do Schematics e seus recursos, siga estes passos:
- Acesse as áreas de trabalho do Schematics e selecione a sua.
- Clique no menu suspenso Ações... e clique em Destruir recursos para limpar todos os recursos que foram provisionados por meio de Schematics.
- Clique no menu suspenso Ações... e em Excluir área de trabalho para excluir a área de trabalho.
Dependendo do recurso, ele não é excluído imediatamente, mas retido (por padrão por 7 dias). É possível recuperar o recurso excluindo-o permanentemente ou restaurando-o dentro do período de retenção. Consulte este documento sobre como usar a recuperação de recurso.