En este instructivo, se muestra cómo configurar la infraestructura de la herramienta Escalador automático. para Spanner. En este instructivo, se muestran dos formas de configurar la infraestructura según tus requisitos:
- Una topología de implementación por proyecto. Recomendamos esta topología para equipos independientes que desean administrar su propia infraestructura y configuración del escalador automático. Una topología de implementación por proyecto también es un buen punto de partida para probar las capacidades del escalador automático.
- Una topología de implementación centralizada. Recomendamos esta topología para los equipos que administran la configuración y la infraestructura de una o más instancias de Spanner, a la vez que mantienen los componentes y la configuración para el escalador automático en un lugar central. En la topología centralizada, además de un proyecto de escalador automático, debes configurar un segundo proyecto, que en este instructivo se denomina proyecto de aplicación. El proyecto de Aplicación contiene los recursos de la aplicación, incluido Spanner. En este instructivo, configurarás y habilitarás la facturación y las API para estos dos proyectos por separado.
Este documento forma parte de una serie:
- Ajuste de escala automático de Spanner
- Implementar una herramienta de Escalador automático centralizada o por proyecto para Spanner (este documento)
- Implementa una herramienta de escalador automático distribuido para Spanner
Esta serie está dirigida a equipos de TI, ingeniería de confiabilidad de sitios (SRE) y operaciones que desean reducir la sobrecarga operativa y optimizar el costo de las implementaciones de Spanner.
Objetivos
- Implementar el escalador automático con una topología de implementación centralizada o por proyecto.
- Importar instancias existentes de Spanner al estado de Terraform
- Configurar el escalador automático.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Los costos asociados con la operación de los componentes del escalador automático cuando implementas este instructivo deben ser cero o cerca de cero. Sin embargo, esta estimación no incluye los costos de las instancias de Spanner. Para ver un ejemplo de cómo calcular los costos de las instancias de Spanner, consulta Ajuste de escala automático de Spanner.
Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.
Antes de comenzar
-
In the Google Cloud console, activate Cloud Shell.
En Cloud Shell, clona el repositorio de GitHub:
git clone https://github.com/cloudspannerecosystem/autoscaler
Exporta las variables de los directorios de trabajo en los que residen los archivos de configuración de Terraform para cada topología:
export AUTOSCALER_DIR="$(pwd)/autoscaler/terraform/cloud-functions/per-project"
Prepara el proyecto del escalador automático
En esta sección, prepararás tu proyecto de escalador automático para la implementación.
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.
En Cloud Shell, configura las variables de entorno con el ID de tu proyecto de Escalador automático:
export PROJECT_ID=INSERT_YOUR_PROJECT_ID gcloud config set project "${PROJECT_ID}"
Configura la región y zona. y ubicación de App Engine (para Cloud Scheduler y Firestore para la infraestructura del escalador automático:
export REGION=us-central1 export ZONE=us-central1-c export APP_ENGINE_LOCATION=us-central
Crea una cuenta de servicio para que Terraform use a fin de crear todos los recursos en tu infraestructura:
gcloud iam service-accounts create terraformer --display-name "Terraform service account"
Otorga la función de propietario del proyecto (
roles/owner
) a la cuenta de servicio:gcloud projects add-iam-policy-binding "${PROJECT_ID}" \ --member "serviceAccount:terraformer@${PROJECT_ID}.iam.gserviceaccount.com" \ --role roles/owner
Crea un archivo de claves de la cuenta de servicio:
gcloud iam service-accounts keys create \ --iam-account "terraformer@${PROJECT_ID}.iam.gserviceaccount.com" "${AUTOSCALER_DIR}/key.json"
Si tu proyecto aún no tiene una instancia de Firestore, crea una:
gcloud app create --region="${APP_ENGINE_LOCATION}" gcloud alpha firestore databases create --region="${APP_ENGINE_LOCATION}"
Prepara el proyecto de la Aplicación
Si estás implementando el escalador automático en modo por proyecto, puedes pasar a la implementación del escalador automático.
En la topología de implementación centralizada, todos los componentes del escalador automático residen en el mismo proyecto. Las instancias de Spanner pueden ubicarse en diferentes proyectos.
En esta sección, configurarás el proyecto de aplicación en el que reside tu instancia de Spanner. La instancia de Spanner entrega una o más aplicaciones específicas. En este instructivo, se supone que los equipos responsables de estas aplicaciones son independientes del equipo responsable de la infraestructura y la configuración del escalador 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.
En Cloud Shell, configura las variables de entorno.
export APP_PROJECT_ID=INSERT_YOUR_APP_PROJECT_ID
Reemplaza INSERT_YOUR_APP_PROJECT_ID por el ID del proyecto de aplicación.
Otorga a la cuenta de servicio
terraformer
que creaste el rol de propietario (roles/owner
) en el proyecto de aplicación:gcloud projects add-iam-policy-binding "${APP_PROJECT_ID}" \ --member "serviceAccount:terraformer@${PROJECT_ID}.iam.gserviceaccount.com" \ --role roles/owner
Otorga esta función a la cuenta de servicio le permite crear recursos.
Configura el ID del proyecto de aplicación en la variable de entorno de Terraform correspondiente:
export TF_VAR_app_project_id="${APP_PROJECT_ID}"
Implementa el escalador automático
En esta sección, implementarás los componentes que conforman el escalador automático mediante módulos de Terraform preconfigurados. Los archivos de Terraform que definen estos módulos están en los siguientes directorios:
Directorio | Contenido del directorio |
---|---|
terraform/ |
Configuración de nivel superior, que incluye cada una de las opciones de implementación y los módulos reutilizables. |
terraform/cloud-functions/per-project/ |
Instrucciones para la opción de implementación por proyecto |
terraform/modules/autoscaler-functions/ |
Configuración de las funciones de Cloud Run de sondeo y escalamiento, y de los temas de Pub/Sub |
terraform/modules/scheduler/ |
Configuración de Cloud Scheduler para activar el sondeo. |
terraform/modules/spanner/ |
Configuración de la base de datos de Spanner |
terraform/cloud-functions/centralized/ |
Instrucciones para la opción de implementación centralizada. |
En Cloud Shell, configura el ID del proyecto, la región y la zona en las variables de entorno de Terraform correspondientes:
export TF_VAR_project_id="${PROJECT_ID}" export TF_VAR_region="${REGION}" export TF_VAR_zone="${ZONE}"
En este paso, configurarás una instancia existente para que el escalador automático la supervise o cree y configure una instancia nueva.
Si tienes una instancia de Spanner existente, configura el nombre de tu instancia en la siguiente variable:
export TF_VAR_spanner_name=INSERT_YOUR_SPANNER_INSTANCE_NAME
Si deseas crear una nueva instancia de Spanner para probar el escalador automático, configura la siguiente variable:
export TF_VAR_terraform_spanner=true
La instancia de Spanner que crea Terraform se llama
autoscale-test
.Si quieres obtener más información para configurar Terraform para administrar tu instancia de Spanner, consulta la sección sobre cómo importar tus instancias de Spanner.
Cambie su directorio de trabajo a directorio de Terraform por proyecto:
cd "${AUTOSCALER_DIR}" terraform init
Este comando también inicializa el directorio de Terraform por proyecto.
Importa la aplicación de App Engine existente al estado de Terraform:
terraform import module.scheduler.google_app_engine_application.app "${PROJECT_ID}"
Crea la infraestructura del escalador automático:
terraform apply -parallelism=2
Verás el siguiente mensaje en el que te solicita que verifiques que la lista de recursos que Terraform cree sea correcta:
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value:
Después de verificar los recursos, escribe
yes
cuando se te solicite.Cuando ejecutes este comando en Cloud Shell, es posible que encuentres el siguiente mensaje de error:
"Error: cannot assign requested address"
Este error es un problema conocido en el proveedor de Terraform de Google. En este caso, vuelve a intentarlo con el siguiente comando:
terraform apply -parallelism=1.
Importa tus instancias de Spanner
Si tienes instancias de Spanner existentes que deseas importar para que Terraform las administre, sigue las instrucciones de esta sección. De lo contrario, ve a Configura el escalador automático.
En Cloud Shell, enumera tus instancias de Spanner:
gcloud spanner instances list
Establezca la siguiente variable con el nombre de instancia en el que desea realizar el ajuste de escala automático:
SPANNER_INSTANCE_NAME=YOUR_SPANNER_INSTANCE_NAME
Crea un archivo de configuración de Terraform con un
google_spanner_instance
recurso:echo "resource \"google_spanner_instance\" \"${SPANNER_INSTANCE_NAME}\" {}" > "${SPANNER_INSTANCE_NAME}.tf"
Importar la instancia de Spanner al estado de Terraform:
terraform import "google_spanner_instance.${SPANNER_INSTANCE_NAME}" "${SPANNER_INSTANCE_NAME}"
Cuando se complete la importación, actualiza el archivo de configuración de Terraform para tu instancia con el atributo real de instancia:
terraform state show -no-color "google_spanner_instance.${SPANNER_INSTANCE_NAME}" \ | grep -vE "(id|num_nodes|state|timeouts).*(=|\{)" \ > "${SPANNER_INSTANCE_NAME}.tf"
Si tienes instancias adicionales de Spanner para importar, repite el proceso de importación.
Configura el escalador automático
Después de implementar el escalador automático, debes configurar sus parámetros.
En la consola de Google Cloud, ve a la página Cloud Scheduler.
Selecciona la casilla de verificación junto al trabajo
poll-main-instance-metrics
que creó la implementación del escalador automático.Haz clic en Edit.
Modifica los parámetros del escalador automático que se muestra en el campo de carga útil.
A continuación, se muestra un ejemplo de una carga útil:
[ { "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" } ]
La carga útil se define con un array de JSON. Cada elemento del array representa una instancia de Spanner que comparte el mismo programa de trabajo del escalador automático.
Para obtener más detalles sobre los parámetros y sus valores predeterminados, consulta la
README
para el componente de sondeoPara guardar los cambios, haz clic en Actualizar.
El escalador automático ya está configurado y listo para comenzar a supervisar y escalar tus instancias en la próxima ejecución de trabajo programado.
Si hay errores sintácticos en la carga útil de JSON, puedes examinarlos en el La consola de Google Cloud en la página Explorador de registros como entradas de registro del
tf-poller-function
.Se muestra un ejemplo de un error que podrías ver, a continuación:
SyntaxError: Unexpected token errortext in JSON at position 15 JSON.parse
Para evitar errores de sintaxis, usa un editor que pueda cambiar el formato y validar JSON.
Supervisa el escalador automático
En este paso, configurarás la supervisión en las funciones de Cloud Run de sondeo y escalamiento.
En la consola de Google Cloud, abre la página Explorador de registros.
Haz clic en Vista previa de consulta y, luego, ingresa el siguiente filtro en Compilador de consultas:
resource.type="cloud_function" resource.labels.function_name=~"tf-.*-function"
Haga clic en Ejecutar consulta.
En los resultados de la consulta, puedes ver todos los mensajes de las funciones del escalador automático. Como la aplicación de sondeo solo se ejecuta cada 2 minutos, es posible que debas volver a ejecutar la consulta para recibir los mensajes de registro.
Para ver solo los mensajes de las funciones de Cloud Run de Scaler, haz clic en el cuadro Vista previa de consulta y reemplaza el filtro anterior en el cuadro de texto Compilador de consultas con lo siguiente:
resource.type="cloud_function" resource.labels.function_name="tf-scaler-function"
Haga clic en Ejecutar consulta.
En Resultados de la consulta, debido al filtro aplicado a la carga útil de texto, solo se ven los mensajes de la función Escalador que se relaciona con las sugerencias y las decisiones de escalamiento.
Mediante el uso de filtros de consulta o filtros similares, puedes crear métricas basadas en registros. Estas métricas son útiles para funciones como registrar la frecuencia de los eventos de ajuste de escala automático o en los gráficos de Cloud Monitoring y las políticas de alertas.
Prueba el escalador automático
En esta sección, verificarás la operación del Escalador automático si cambias el tamaño mínimo de la instancia y supervisas los registros.
Cuando implementas el escalador automático con una base de datos de prueba, este se configura para usar NODES
como la unidad de capacidad de procesamiento. Para verificar si la herramienta funciona, cambia la configuración del tamaño mínimo (minSize
) a . Si la herramienta se ejecuta según lo esperado, la instancia de Spanner escalará
en 2 nodos. Si usaste una base de datos existente para este instructivo, es posible que veas valores diferentes.
En la consola de Google Cloud, ve a la página Cloud Scheduler.
Selecciona la casilla de verificación junto al trabajo
poll-main-instance-metrics
que creó la implementación del escalador automático.Haz clic en Edit.
En el campo Carga útil del trabajo, cambia el valor
minSize
de1
a2
:"minSize": 2
Para guardar los cambios, haz clic en Actualizar.
Ir a la página Explorador de registros.
Haz clic en Vista previa de consulta y, luego, ingresa el siguiente filtro en Compilador de consultas:
resource.type="cloud_function" resource.labels.function_name="tf-scaler-function"
Haga clic en Ejecutar consulta.
Haz clic en Pasar a los más recientes hasta que vea el siguiente mensaje de registro:
Scaling spanner instance to 2 NODES
Para verificar que Spanner haya escalado horizontalmente a 2 nodos, en la consola de Google Cloud ve a la página de la consola de Spanner.
Haz clic en la instancia
autoscale-test
.En descripción general, verifica que la cantidad de nodos sea ahora de 2. En esta prueba rápida, se demuestra un evento de escalamiento horizontal mediante la modificación de los parámetros del escalador automático. Puedes realizar una prueba de carga con una herramienta como YCSB para simular que el Escalador automático activa un evento de escalamiento según el uso.
Limpia
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borra el proyecto
- 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.
¿Qué sigue?
- Lee sobre la arquitectura del escalador automático.
- Lee sobre cómo implementar el escalador automático en modo distribuido.
- Obtén más información sobre los límites recomendados de Spanner.
- Obtén más información sobre las métricas de uso de CPU de Spanner. y Métricas de latencia.
- Obtén más información sobre las prácticas recomendadas para el diseño de esquemas de Spanner.
- Explora arquitecturas de referencia, diagramas y prácticas recomendadas sobre Google Cloud. Consulta nuestro Cloud Architecture Center.