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:
- Como fazer escalonamento automático do Spanner
- Implantar uma ferramenta de escalonador automático por projeto ou centralizada para o Spanner (este documento)
- Implantar uma ferramenta de escalonador automático distribuído para o Spanner
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.
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
-
In the Google Cloud console, activate Cloud Shell.
No Cloud Shell, clone o seguinte repositório do GitHub.
git clone https://github.com/cloudspannerecosystem/autoscaler
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.
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Make sure that billing is enabled for your Google Cloud project.
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.
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}"
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
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"
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
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"
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.
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Make sure that billing is enabled for your Google Cloud project.
Enable the Spanner API.
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.
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.
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. |
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}"
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.
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.
Importe o aplicativo do App Engine para o estado do Terraform:
terraform import module.scheduler.google_app_engine_application.app "${PROJECT_ID}"
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.
No Cloud Shell, liste suas instâncias do Spanner:
gcloud spanner instances list
Defina a seguinte variável com o nome da instância que você quer escalonar automaticamente:
SPANNER_INSTANCE_NAME=YOUR_SPANNER_INSTANCE_NAME
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"
Importar a instância do Spanner para o estado do Terraform:
terraform import "google_spanner_instance.${SPANNER_INSTANCE_NAME}" "${SPANNER_INSTANCE_NAME}"
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.
No console do Google Cloud, acesse a página do Cloud Scheduler.
Marque a caixa de seleção ao lado do job
poll-main-instance-metrics
criado pela implantação do escalonador automático.Clique em Editar.
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.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.
No console do Google Cloud, abra a página Análise de registros.
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"
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.
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"
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.
No console do Google Cloud, acesse a página do Cloud Scheduler.
Marque a caixa de seleção ao lado do job
poll-main-instance-metrics
criado pela implantação do escalonador automático.Clique em Editar.
No campo Payload do job, altere o valor de
minSize
de1
para2
:"minSize": 2
Para salvar as alterações, clique em Atualizar.
Acesse a página Explorador de registros.
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"
Clique em Run.
Clique em Jump to Now até ver a seguinte mensagem de registro:
Scaling spanner instance to 2 NODES
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.
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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
A seguir
- Leia sobre a arquitetura do escalonador automático.
- Leia sobre como implantar o escalonador automático no modo distribuído.
- Leia mais sobre os limites recomendados do Spanner.
- Saiba mais sobre as métricas de uso de CPU e as métricas de latência do Spanner.
- Leia mais sobre as práticas recomendadas de design de esquemas do Spanner.
- Confira arquiteturas de referência, diagramas, tutoriais e práticas recomendadas do Google Cloud. Confira o Centro de arquitetura do Cloud.