Implantar uma ferramenta centralizada de escalonamento automático por projeto ou projeto para o Spanner


Neste tutorial, mostramos como configurar a infraestrutura da ferramenta do escalonador automático para o Spanner. Neste tutorial, demonstramos duas maneiras de configurar a infraestrutura de acordo com os requisitos:

  • Uma topologia de implantação por projeto. Recomendamos essa topologia para equipes independentes que queiram gerenciar a própria configuração e infraestrutura do escalonador automático. Uma topologia de implantação por projeto também é um bom ponto de partida para testar os recursos do escalonador automático.
  • Uma topologia de implantação centralizada. Recomendamos essa topologia para equipes que gerenciam a configuração e a infraestrutura de uma ou mais instâncias do Spanner e mantêm os componentes e a configuração do escalonador automático em um local central. Na topologia centralizada, além de um projeto do escalonador automático, você configura um segundo projeto, que neste tutorial é chamado de projeto do aplicativo. O projeto de aplicativo mantém os recursos do aplicativo, incluindo o Spanner. Você configura e ativa o faturamento e as APIs para esses dois projetos separadamente neste tutorial.

Este documento faz parte de uma série:

Esta série é voltada à engenharia de TI, operações e confiabilidade do site (SRE) equipes que querem reduzir o overhead operacional e otimizar o custo Implantações do Spanner.

Objetivos

  • Implantar o escalonador automático usando uma topologia de implantação centralizada ou por projeto.
  • Importar instâncias do Spanner atuais para o estado do Terraform.
  • Configure o escalonador automático.

Custos

Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Os custos associados à operação de componentes do escalonador automático quando você implementar este tutorial precisam ser zero ou próximos a zero. No entanto, essa estimativa não inclui os custos das instâncias do Spanner. Para um exemplo de como calcular os custos das instâncias do Spanner, consulte Como fazer o escalonamento automático do Spanner.

Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.

Antes de começar

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  2. No Cloud Shell, clone o seguinte repositório do GitHub.

    git clone https://github.com/cloudspannerecosystem/autoscaler
    
  3. Exporte variáveis dos diretórios de trabalho onde estão os arquivos de configuração do Terraform para cada topologia:

    export AUTOSCALER_DIR="$(pwd)/autoscaler/terraform/cloud-functions/per-project"
    

Como preparar o projeto do escalonador automático

Nesta seção, você prepara seu projeto do escalonador automático para implantação.

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  3. Enable the Identity and Access Management (IAM), Resource Manager, App Engine Admin, Firestore, Spanner, Pub/Sub, Cloud Run functions, Cloud Build, and Cloud Scheduler APIs.

    Enable the APIs

  4. No Cloud Shell, defina as variáveis de ambiente com o código do seu projeto do escalonador automático:

    export PROJECT_ID=INSERT_YOUR_PROJECT_ID
    gcloud config set project "${PROJECT_ID}"
    
  5. Defina a região e a zona e a localização do App Engine (para o Cloud Scheduler e Firestore para a infraestrutura do escalonador automático:

    export REGION=us-central1
    export ZONE=us-central1-c
    export APP_ENGINE_LOCATION=us-central
    
  6. Crie uma conta de serviço para o Terraform usar na criação de todos os recursos na sua infraestrutura:

    gcloud iam service-accounts create terraformer --display-name "Terraform service account"
    
  7. Atribuir o papel de proprietário do projeto (roles/owner) à conta de serviço:

    gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
        --member "serviceAccount:terraformer@${PROJECT_ID}.iam.gserviceaccount.com" \
        --role roles/owner
    
  8. Crie um arquivo da chave da conta de serviço:

    gcloud iam service-accounts keys create \
        --iam-account "terraformer@${PROJECT_ID}.iam.gserviceaccount.com" "${AUTOSCALER_DIR}/key.json"
    
  9. Se o projeto não tiver um Firestore instância ainda, crie uma:

    gcloud app create --region="${APP_ENGINE_LOCATION}"
    gcloud alpha firestore databases create --region="${APP_ENGINE_LOCATION}"
    

Como preparar o projeto do aplicativo

Se estiver implantando o escalonador automático no projeto por projeto, pule para Como implantar o escalonador automático.

Na topologia de implantação centralizada, todos os componentes do escalonador automático residem no mesmo projeto. As instâncias do Spanner podem ser localizadas em projetos diferentes.

Nesta seção, você configura o projeto do aplicativo em que reside a instância do Spanner. A instância do Spanner exibe um ou mais aplicativos específicos. Neste tutorial, presume-se que as equipes responsáveis por esses aplicativos sejam separadas da equipe responsável pela infraestrutura e pela configuração do escalonador automático.

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  3. Enable the Spanner API.

    Enable the API

  4. No Cloud Shell, defina as variáveis de ambiente:

    export APP_PROJECT_ID=INSERT_YOUR_APP_PROJECT_ID
    

    Substitua INSERT_YOUR_APP_PROJECT_ID pelo ID do projeto de aplicativo.

  5. Atribua o proprietário à conta de serviço terraformer que você criou cargo (roles/owner) no projeto do aplicativo:

    gcloud projects add-iam-policy-binding "${APP_PROJECT_ID}" \
        --member "serviceAccount:terraformer@${PROJECT_ID}.iam.gserviceaccount.com" \
        --role roles/owner
    

    A concessão desse papel à conta de serviço permite que ela crie recursos.

  6. Defina o ID do projeto do aplicativo na variável de ambiente correspondente do Terraform:

    export TF_VAR_app_project_id="${APP_PROJECT_ID}"
    

Como implantar o escalonador automático

Nesta seção, você implanta os componentes que compõem o escalonador automático usando módulos pré-configurados do Terraform. Os arquivos do Terraform que definem esses módulos estão nos seguintes diretórios:

Diretório Conteúdo do diretório
terraform/ Configuração de nível superior, que inclui cada uma das opções de implantação e os módulos reutilizáveis.
terraform/cloud-functions/per-project/ Instruções para a opção de implantação por projeto.
terraform/modules/autoscaler-functions/ Configuração das funções do Cloud Run e do Poller e dos tópicos do Pub/Sub
terraform/modules/scheduler/ Configuração do Cloud Scheduler para acionar a pesquisa.
terraform/modules/spanner/ Configuração do banco de dados do Spanner
terraform/cloud-functions/centralized/ Instruções para a opção de implantação centralizada.
  1. No Cloud Shell, defina o ID do projeto, a região e a zona nas variáveis de ambiente correspondentes do Terraform:

    export TF_VAR_project_id="${PROJECT_ID}"
    export TF_VAR_region="${REGION}"
    export TF_VAR_zone="${ZONE}"
    
  2. Nesta etapa, configure uma instância atual para que o escalonador automático monitore ou crie e configure uma nova instância.

    Se você tiver uma instância do Spanner, defina o nome dela na seguinte variável:

    export TF_VAR_spanner_name=INSERT_YOUR_SPANNER_INSTANCE_NAME
    

    Se você quiser criar uma nova instância do Spanner para testar o escalonador automático, defina a seguinte variável:

    export TF_VAR_terraform_spanner=true
    

    A instância do Spanner que o Terraform cria é denominada autoscale-test.

    Para mais informações sobre como configurar o Terraform para gerenciar a instância do Spanner, consulte Como importar instâncias do Spanner.

  3. Altere seu diretório de trabalho para o diretório por projeto do Terraform:

    cd "${AUTOSCALER_DIR}"
    terraform init
    

    Esse comando também inicializa o diretório por projeto do Terraform.

  4. Importe o aplicativo do App Engine para o estado do Terraform:

    terraform import module.scheduler.google_app_engine_application.app "${PROJECT_ID}"
    
  5. Crie a infraestrutura do escalonador automático:

    terraform apply -parallelism=2
    

    Você verá a seguinte mensagem pedindo que você verifique se a lista de recursos para o Terraform criar está correta:

       Do you want to perform these actions?
       Terraform will perform the actions described above.
       Only 'yes' will be accepted to approve.
       Enter a value:
       

    Depois de verificar os recursos, digite yes quando solicitado.

    Ao executar esse comando no Cloud Shell, talvez apareça a seguinte mensagem de erro:

    "Error: cannot assign requested address"

    Esse erro é um problema conhecido no provedor do Terraform no Google. Nesse caso, tente novamente com o seguinte comando: terraform apply -parallelism=1.

Como importar instâncias do Spanner

Se você quiser importar instâncias do Spanner para o Terraform e gerenciá-las, siga as instruções nesta seção. Caso contrário, pule para Como configurar o escalonador automático.

  1. No Cloud Shell, liste suas instâncias do Spanner:

    gcloud spanner instances list
    
  2. Defina a seguinte variável com o nome da instância que você quer escalonar automaticamente:

    SPANNER_INSTANCE_NAME=YOUR_SPANNER_INSTANCE_NAME
    
  3. Criar um arquivo de configuração do Terraform com um google_spanner_instance recurso:

    echo "resource \"google_spanner_instance\" \"${SPANNER_INSTANCE_NAME}\" {}" > "${SPANNER_INSTANCE_NAME}.tf"
    
  4. Importar a instância do Spanner para o estado do Terraform:

    terraform import "google_spanner_instance.${SPANNER_INSTANCE_NAME}" "${SPANNER_INSTANCE_NAME}"
    
  5. Quando a importação for concluída, atualize o arquivo de configuração do Terraform para sua instância com o atributo da instância real:

    terraform state show -no-color "google_spanner_instance.${SPANNER_INSTANCE_NAME}" \
        | grep -vE "(id|num_nodes|state|timeouts).*(=|\{)" \
        > "${SPANNER_INSTANCE_NAME}.tf"
    

    Se você tiver outras instâncias do Spanner para importar, repita o processo de importação.

Como configurar o escalonador automático

Depois de implantar o escalonador automático, configure os parâmetros dele.

  1. No console do Google Cloud, acesse a página do Cloud Scheduler.

    Acessar o Cloud Scheduler

  2. Marque a caixa de seleção ao lado do job poll-main-instance-metrics criado pela implantação do escalonador automático.

  3. Clique em Editar.

  4. Modifique os parâmetros do escalonador automático mostrado no campo de payload.

    Veja a seguir um exemplo de payload:

        [
            {
                "projectId": "my-spanner-project",
                "instanceId": "spanner1",
                "scalerPubSubTopic": "projects/my-spanner-project/topics/spanner-scaling",
                "units": "NODES",
                "minSize": 1,
                "maxSize": 3
            },{
                "projectId": "different-project",
                "instanceId": "another-spanner1",
                "scalerPubSubTopic": "projects/my-spanner-project/topics/spanner-scaling",
                "units": "PROCESSING_UNITS",
                "minSize": 500,
                "maxSize": 3000,
                "scalingMethod": "DIRECT"
            }
        ]
       

    O payload é definido usando uma matriz JSON. Cada elemento na matriz representa uma instância do Spanner que compartilha a mesma programação de job do escalonador automático.

    Para mais detalhes sobre os parâmetros e seus valores padrão, consulte o README para o componente Poller.

  5. Para salvar as alterações, clique em Atualizar.

    O escalonador automático agora está configurado e pronto para iniciar o monitoramento e escalonamento das instâncias na próxima execução do job programado.

    Se houver erros de sintaxe em seu payload JSON, você pode examiná-los no Console do Google Cloud na página Análise de registros como entradas de registro do tf-poller-function função.

    Acessar o Explorador de registros

    Este é um exemplo de erro que você pode ver:

    SyntaxError: Unexpected token errortext in JSON at position 15 JSON.parse

    Para evitar erros de sintaxe, use um editor que possa reformatar e validar JSON.

Como monitorar o escalonador automático

Nesta etapa, você vai configurar o monitoramento nas funções do Cloud Run de ferramenta de pesquisa e escalonamento.

  1. No console do Google Cloud, abra a página Análise de registros.

    Acessar o Explorador de registros

  2. Clique em Visualização da consulta e insira o seguinte filtro no Criador de consultas:

    resource.type="cloud_function"
    resource.labels.function_name=~"tf-.*-function"
    
  3. Clique em Run.

    Em "Resultados da consulta", é possível ver todas as mensagens das funções do escalonador automático. Como o aplicativo de pesquisa só é executado a cada dois minutos, talvez seja necessário executar novamente a consulta para receber as mensagens de registro.

  4. Para ver apenas as mensagens das funções do Cloud Run do escalonador automático, clique na coluna Consulta visualização e substituir o filtro anterior no texto do Criador de consultas com o seguinte:

    resource.type="cloud_function"
    resource.labels.function_name="tf-scaler-function"
    
  5. Selecione Executar consulta.

    Em Resultados da consulta, devido ao filtro aplicado ao payload do texto, você vê apenas as mensagens da função do escalonador automático relacionadas a sugestões e decisões de escalonamento.

    Usando consultas de filtro ou filtros semelhantes, é possível criar métricas com base em registros. Essas métricas são úteis para registrar funções de frequência de eventos de escalonamento automático ou de gráficos e políticas de alertas do Cloud Monitoring.

Como testar o escalonador automático

Nesta seção, você verifica a operação do escalonador automático alterando o tamanho mínimo da instância e monitorando os registros.

Quando você implanta o escalonador automático com um banco de dados de teste, o escalonador automático é configurado para usar NODES como a unidade para capacidade de computação. Verifique se a ferramenta está funcionando alterando a configuração do tamanho mínimo (minSize) para 2. Se a ferramenta estiver em execução conforme o esperado, a instância do Spanner será escalonada para dois nós. Se você usou um banco de dados atual para este tutorial, talvez veja valores diferentes.

  1. No console do Google Cloud, acesse a página do Cloud Scheduler.

    Acessar o Cloud Scheduler

  2. Marque a caixa de seleção ao lado do job poll-main-instance-metrics criado pela implantação do escalonador automático.

  3. Clique em Editar.

  4. No campo Payload do job, altere o valor de minSize de 1 para 2:

    "minSize": 2
    
  5. Para salvar as alterações, clique em Atualizar.

  6. Acesse a página Explorador de registros.

    Abrir o Explorador de registros

  7. Clique em Visualização da consulta e insira o seguinte filtro no Criador de consultas:

    resource.type="cloud_function"
    resource.labels.function_name="tf-scaler-function"
    
  8. Clique em Run.

  9. Clique em Jump to Now até ver a seguinte mensagem de registro:

    Scaling spanner instance to 2 NODES

  10. Para verificar se o Spanner foi escalonado horizontalmente para dois nós, no console do Google Cloud acesse a página do console do Spanner.

    Acessar o Spanner

  11. Clique na instância autoscale-test.

    Na visão geral, verifique se o número de nós agora é 2. Este teste rápido demonstra um evento de escalonamento horizontal modificando os parâmetros do escalonador automático. Realize um teste de carga com uma ferramenta como YCSB para simular o escalonador automático que aciona um evento de escalonamento com base na utilização.

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

Exclua o projeto

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

A seguir