Crea una implementación en VMs

En este documento, se explica cómo implementar Spanner Omni en máquinas virtuales (VMs). Esta implementación no tiene encriptación. Si deseas configurar rápidamente un entorno de prueba o de prueba de concepto para evaluar Spanner Omni, crear una implementación no segura es la forma más rápida de comenzar, ya que no requiere que configures mTLS ni otras medidas de seguridad. Sin embargo, debido a los riesgos de seguridad, como el tráfico de red sin encriptar y el acceso abierto, no recomendamos esta configuración para los entornos de producción. Puedes elegir entre una implementación de un solo servidor o una implementación regional en varias zonas.

La versión de vista previa de Spanner Omni no admite la encriptación TLS y deja de escribir datos 90 días después de que creas una implementación. Para obtener acceso anticipado a la edición con todas las funciones, comunícate con Google.

Antes de comenzar

Antes de configurar una implementación no segura, asegúrate de cumplir con los siguientes requisitos:

  • Acceso SSH: Tener acceso SSH a todas las máquinas del deployment para descargar y ejecutar el objeto binario de Spanner Omni.

  • Conectividad: Todas las máquinas de la implementación pueden conectarse entre sí.

  • Redes: La configuración de red permite la comunicación TCP en los puertos 15000 a 15025.

  • Almacenamiento: Cada máquina tiene suficiente almacenamiento para alojar los datos que controla la implementación.

  • Requisitos del sistema: Asegúrate de que tu configuración cumpla con todos los requisitos del sistema.

  • Configuración de vSphere: Si ejecutas Spanner Omni en la plataforma de virtualización de vSphere, inhabilita la virtualización del contador de marcas de tiempo (TSC). Agrega monitor_control.virtual_rdtsc = FALSE al archivo de configuración .vmx de la máquina virtual.

Paso 1: Decide la topología de implementación

Spanner Omni usa una jerarquía de ubicaciones, zonas y servidores para definir su topología de implementación. Puedes elegir entre las siguientes topologías según tus objetivos de disponibilidad:

  • Servidor único: La implementación tiene un solo servidor que se ejecuta en una sola máquina.

  • Zona única: La implementación se ejecuta en varios servidores distribuidos en una sola zona.

  • Ubicación única, varias zonas (implementación replicada): La implementación se ejecuta en varios servidores distribuidos en varias zonas de una ubicación.

  • Varias ubicaciones y zonas: La implementación se ejecuta en varios servidores distribuidos en varias ubicaciones y zonas.

Para obtener más información, consulta los términos clave de Spanner Omni y las configuraciones de implementación de Spanner Omni.

Para cualquier implementación que no sea un solo servidor, crea un archivo de configuración YAML llamado deployment.yaml que defina la topología. Solo especifica los servidores raíz en este archivo. Agregar servidores no raíz más adelante

Ejemplo: Implementación replicada en varias zonas

En el siguiente ejemplo, se muestra una configuración para una implementación regional en tres zonas.

name: regional-deployment
location:
  - name: us-central1
zone:
  - name: us-central1-a
    location: us-central1
    single_server: false
    root_server:
      - host: rootserver1
  - name: us-central1-b
    location: us-central1
    single_server: false
    root_server:
      - host: rootserver2
  - name: us-central1-c
    location: us-central1
    single_server: false
    root_server:
      - host: rootserver3

Ejemplo: Implementación en varias ubicaciones

En el siguiente ejemplo, se muestra una configuración para una implementación en tres ubicaciones.

name: multi-location-deployment
location:
  - name: us-central1
  - name: europe-west2
  - name: asia-southeast1
zone:
  - name: us-central1-a
    location: us-central1
    single_server: false
    root_server:
      - host: rootserver1
  - name: europe-west2-a
    location: europe-west2
    single_server: false
    root_server:
      - host: rootserver2
  - name: asia-southeast1-a
    location: asia-southeast1
    single_server: false
    root_server:
      - host: rootserver3

Paso 2: Descarga y configura el objeto binario

Repite estos pasos para cada máquina de la implementación:

  1. Crea un directorio para el archivo binario y navega hasta él.

  2. Descarga el objeto binario:

    gsutil cp gs://spanner-omni/VERSION/spanner-omni-VERSION-linux-x86_64.tar.gz .
    

    También puedes usar scp o cualquier otra herramienta de transferencia de archivos para copiar el objeto binario en tus VMs.

  3. Extrae el objeto binario:

    tar -xvf spanner-omni-VERSION-linux-x86_64.tar.gz
    

Paso 3: Inicia los servidores

Crea un directorio base en cada servidor para almacenar datos, metadatos y registros. Si un servidor necesita reiniciarse, especifica el mismo directorio para garantizar la continuidad.

Opción A: Implementación de un solo servidor

Para una implementación de un solo servidor, ejecuta el siguiente comando:

spanner start-single-server --base-dir=SPANNER_BASE_DIR

Después de que se inicie el servidor, continúa con el Paso 6: Interactúa con la implementación.

Opción B: Implementación de expansión horizontal

Para las implementaciones de expansión horizontal, inicia el servidor en cada máquina. Las marcas --server-address y --zone coinciden con los valores de la configuración de implementación. La red resuelve el server_address.

spanner start --root --server-address=RESOLVABLE_HOSTNAME --zone=ZONE_NAME --base-dir=SPANNER_BASE_DIR

Por ejemplo:

spanner start --root --server-address=rootserver1 --zone=us-central-1a --base-dir=./spanbasedir

Paso 4: Crea la implementación

Para crear la implementación, sigue estos pasos:

  1. Copia el archivo deployment.yaml que creaste en el paso 1: Decide la topología de implementación en uno de los servidores raíz.

  2. En ese servidor raíz, ejecuta el siguiente comando para crear la implementación:

    spanner deployment create --config-file=deployment.yaml
    

    La consola de cada máquina muestra mensajes que indican que la implementación está lista.

  3. Valida la implementación enumerando las zonas:

    spanner deployment zones list
    

    El resultado muestra las ubicaciones, las zonas y los servidores que especificaste en deployment.yaml.

Paso 5: Configura un balanceador de cargas (opcional)

Configura un balanceador de cargas de TCP con los siguientes detalles:

Configuración Valor
Protocolo TCP
IP de backend Las direcciones IP de tus servidores
Puerto 15000 (o el puerto que usas en la marca --server-address)
URL de verificación de estado http://SERVER_IP:15012/healthz
Estrategia de balanceo Round robin

En el caso de las implementaciones en varias ubicaciones, puedes configurar un balanceador de cargas por ubicación y un balanceador de cargas principal para distribuir el tráfico en todas las ubicaciones.

Paso 6: Interactúa con la implementación

Cuando tu implementación esté lista, podrás interactuar con ella usando la CLI desde cualquier VM o máquina local. Si ejecutas la CLI desde una máquina independiente, como una laptop de desarrollador, descarga y extrae el paquete de la CLI. Para obtener más información, consulta la Guía de inicio rápido para usar la CLI de Spanner Omni.

Para interactuar con tu implementación, sigue estos pasos:

  1. Crea una base de datos:

    spanner --deployment-endpoint=LOAD_BALANCER_IP_OR_SERVER_IP databases create DATABASE_NAME
    
  2. Abre el shell de SQL:

    spanner sql --database=DATABASE_NAME
    
  3. Crea una tabla e inserta datos:

    CREATE TABLE names (
      nameId INT64 NOT NULL,
      name STRING(100)
    ) PRIMARY KEY (nameId);
    
    INSERT INTO names (nameId, name) VALUES (1, "Jack");
    
  4. Verifica la base de datos y los datos:

    Para enumerar las bases de datos, haz lo siguiente: bash spanner databases list

    El resultado es similar al siguiente:

    NOMBRE ESTADO VERSION_RETENTION_PERIOD EARLIEST_VERSION_TIME ENABLE_DROP_PROTECTION
    DATABASE_NAME READY 1 h 2025-02-07T12:25:30Z falso

    Para consultar la tabla, haz lo siguiente: bash spanner sql --database=DATABASE_NAME

  5. Ejecuta los siguientes comandos SQL:

    SHOW TABLES;
    SELECT * FROM names;
    

Paso 7: (Opcional) Escala la implementación

Para escalar la capacidad dentro de una zona, puedes agregar servidores que no sean raíz. Ejecuta el siguiente comando en cada servidor nuevo:

spanner start --server-address=NON_ROOT_HOSTNAME --join-servers=SERVER1:PORT1,SERVER2:PORT2,SERVER3:PORT3 --zone=ZONE_NAME --base-dir=SPANNER_BASE_DIR

Paso 8: Observa la implementación (opcional)

Para supervisar el estado y el rendimiento de tu implementación, puedes configurar la recopilación, la visualización y las alertas de métricas. También puedes recopilar registros de seguimiento distribuidos para analizar la latencia de las solicitudes.

Configura Prometheus

Los servidores de Spanner Omni exportan métricas en formato Prometheus en el puerto 15012. Agrega lo siguiente a tu scrape_configs en prometheus.yml:

scrape_configs:
  - job_name: 'spanner'
    static_configs:
      - targets: ['HOST1:15012', 'HOST2:15012', 'HOSTN:15012']

Configurar Grafana

Para ver los datos de supervisión en Grafana, haz lo siguiente:

  1. Aprovisiona la fuente de datos de Prometheus creando un archivo en provisioning/datasources:

    apiVersion: 1
    datasources:
      - name: Prometheus
        uid: prometheus
        type: prometheus
        access: proxy
        url: http://PROMETHEUS_HOST:PROMETHEUS_PORT
        jsonData:
          httpMethod: POST
          manageAlerts: false
          prometheusType: Prometheus
          prometheusVersion: PROMETHEUS_VERSION
          cacheLevel: 'High'
          disableRecordingRules: false
          incrementalQueryOverlapWindow: 10m
    
  2. Crea un panel en la IU de Grafana o aprovisiona uno con provisioning/dashboards.

Configura alertas

Configura alertas con la IU de Grafana o los archivos de configuración. Por ejemplo, puedes activar una alerta si el percentil 95 (p95) de la latencia de transacción supera los 100 milisegundos. Para obtener una lista de las alertas disponibles, consulta Usa alertas de Prometheus para supervisar Spanner Omni.

Recopila y analiza registros

Recopila información de seguimiento distribuido en formato OTLP y visualízala con herramientas como Jaeger.

  1. Configura un recopilador de seguimientos compatible con OTLP. Para Jaeger:

    export COLLECTOR_OTLP_ENABLED=true
    jaeger-all-in-one
    

    Asegúrate de que el puerto de OTLP permita el tráfico de red entre Spanner Omni y el recopilador.

  2. Configura la variable de entorno SPANNER_BOX_OTLP_TRACE_EXPORTER_ENDPOINT y, luego, inicia los servidores de Spanner Omni:

    export SPANNER_BOX_OTLP_TRACE_EXPORTER_ENDPOINT=COLLECTOR_HOST:COLLECTOR_PORT
    spanner start --root --server-address=RESOLVABLE_HOSTNAME --zone=ZONE_NAME --base-dir=SPANNER_BASE_DIR
    

¿Qué sigue?