Configurazioni del deployment

Questo documento descrive le configurazioni di deployment per Spanner Omni su macchine virtuali (VM) o server bare metal. Spiega la struttura e le opzioni di configurazione del file di configurazione del deployment YAML (deployment.yaml) utilizzato per definire le topologie di deployment delle VM e i parametri di runtime quando si utilizza la CLI Spanner Omni.

Per scoprire come creare un deployment, consulta uno dei seguenti articoli:

Panoramica della configurazione del deployment

Quando crei un deployment su VM o server bare metal, passi questo file di configurazione al comando spanner deployment create nella CLI Spanner Omni:

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

La configurazione del deployment definisce i seguenti elementi chiave:

  • Modalità a server singolo: modalità di ottimizzazione che limita l'intero deployment a un singolo server per lo sviluppo e il test.
  • Località: siti fisici o regioni cloud in cui si trovano i tuoi server.
  • Distanze tra le località: latenze di rete tra coppie di località.
  • Zone: raggruppamenti logici di server che rappresentano le repliche Paxos.
  • Server radice: server dedicati responsabili del quorum di appartenenza e dei metadati della zona.
  • Tipi di replica: ruoli per ogni zona (lettura/scrittura, testimone o sola lettura).
  • SLA dell'orologio: parametri di sincronizzazione TrueTime, inclusi jitter dell'orologio ed errore del tasso di deriva.
  • Impostazioni di deployment: impostazioni globali come posizioni dei leader preferite e impostazioni di sicurezza dell'autenticazione.

Struttura del file di configurazione

L'esempio seguente mostra la struttura di primo livello di un file di configurazione del deployment:

# Deployment name
name: regional-deployment

# Restrict the entire deployment to a single server (optional, default: false)
single_server: false

# Physical or logical locations (regions)
location:
  - name: us-central1

# Network distances between locations (optional)
location_distance:
  - src: us-central1
    dest: us-east1
    latency_ms: 30

# Zones and root servers in the deployment
zone:
  - name: us-central1-a
    location: us-central1
    single_server: false
    replica_type: READ_WRITE
    root_server:
      - host: rootserver1.example.internal
        port_base: 15000

# Clock synchronization SLA parameters (optional)
clock_sla:
  jitter_in_s: 0.005
  rate_error_in_ppm: 200

# Deployment settings (optional)
deployment_settings:
  preferred_leader_location: us-central1
  security_settings:
    insecure_mode: true

Campi di primo livello

La configurazione della distribuzione supporta i seguenti campi di primo livello:

Campo Tipo Descrizione
name Stringa Il nome del deployment, ad esempio prod, staging o regional-deployment.
single_server Booleano Facoltativo. Se impostato su true, specifica che l'intero deployment è un deployment a server singolo, limitandolo a una zona e a un server. I deployment creati con single_server: true non possono aggiungere zone o server dopo la creazione. Se vuoi eseguire Spanner Omni in modalità a server singolo, non devi creare manualmente questa configurazione perché Spanner Omni la genera automaticamente quando esegui il comando spanner start-single-server. Il valore predefinito è false.
location Elenco di oggetti Le posizioni fisiche o logiche (regioni) nel deployment.
location_distance Elenco di oggetti Facoltativo. La latenza di rete tra coppie di località.
zone Elenco di oggetti Obbligatorio. Le zone che compongono il deployment. Devi specificare almeno una zona.
clock_sla Oggetto Facoltativo. Parametri dell'accordo sul livello del servizio (SLA) di sincronizzazione dell'orologio per il software TrueTime.
deployment_settings Oggetto Facoltativo. Impostazioni di runtime per il posizionamento preferito del leader e l'autenticazione di sicurezza.

Nome deployment

Il campo name specifica un nome scelto dall'utente per il deployment. Puoi utilizzare qualsiasi stringa che identifichi il deployment, ad esempio prod, staging o regional-deployment.

Modalità a server singolo

Il campo single_server di primo livello specifica che l'intero deployment è un deployment a un singolo server. Se impostata su true, questa impostazione limita il deployment a una zona e un server, il che riduce l'overhead delle risorse per gli ambienti di sviluppo e test locali. I deployment creati con single_server:true non possono aggiungere zone o server dopo la creazione.

Se vuoi eseguire Spanner Omni in modalità a server singolo, non devi creare manualmente questa configurazione. Quando esegui il comando spanner start-single-server, Spanner Omni genera automaticamente questa configurazione. Per saperne di più, vedi Opzione A: deployment su un singolo server.

Il campo single_server di primo livello è diverso dal campo single_server a livello di zona:

  • Il campo single_server di primo livello si applica all'intero deployment.
  • Il campo a livello di zona single_server si applica solo a una singola zona all'interno di un deployment. Per saperne di più, consulta Zone a server singolo.

Località

Una località rappresenta un data center fisico o una regione cloud in cui si trovano le macchine (equivalente a una regione in Google Cloud).

Definisci le località nell'elenco location:

location:
  - name: us-central1
  - name: europe-west2

I nomi delle sedi devono soddisfare i seguenti requisiti:

  • Deve iniziare con una lettera e terminare con una lettera o un numero.
  • Può contenere solo lettere, cifre, trattini bassi (_) e trattini (-).
  • Può includere facoltativamente un prefisso di dominio seguito da due punti (ad esempio, cloud.google.com:us-east1 o onprem:datacenter1).
  • Impossibile utilizzare il nome riservato default.
  • Deve essere univoco in tutto il deployment.

Distanze dalle sedi

L'elenco location_distance specifica la latenza di rete tra coppie di località. Spanner Omni utilizza queste informazioni per ottimizzare la replica e il routing delle query.

location_distance:
  - src: us-central1
    dest: europe-west2
    latency_ms: 105
  - src: europe-west2
    dest: us-central1
    latency_ms: 110

Ogni oggetto distanza dalla posizione contiene i seguenti campi:

  • src: obbligatorio. Il nome della posizione di origine. Deve corrispondere a una località definita nell'elenco location.
  • dest: obbligatorio. Il nome della località di destinazione. Deve corrispondere a una località definita e non può essere identico a src.
  • latency_ms: la latenza di rete in millisecondi. Deve essere un numero intero non negativo. Se omesso, Spanner Omni presume che la latenza sia trascurabile (inferiore al millisecondo).

La latenza di rete nelle reti fisiche non è sempre simmetrica. Se fornisci sia (src, dest) che (dest, src), Spanner Omni rispetta entrambe le misurazioni. Se fornisci una sola direzione, Spanner Omni presume che la direzione inversa abbia la stessa latenza.

Zone

Una zona è un raggruppamento logico di uno o più server all'interno di una località. Per la replica dei dati, ogni zona rappresenta una replica Paxos. Un deployment deve avere almeno una zona.

zone:
  - name: us-central1-a
    location: us-central1
    single_server: false
    replica_type: READ_WRITE
    root_server:
      - host: rootserver1.example.internal
        port_base: 15000
      - host: rootserver2.example.internal
        port_base: 15000
      - host: rootserver3.example.internal
        port_base: 15000

Ogni oggetto zona supporta i seguenti campi:

Campo Tipo Descrizione
name Stringa Obbligatorio. Il nome della zona. Segue le stesse regole di denominazione dei nomi delle località. Deve essere univoco in tutto il deployment.
location Stringa Il nome della località in cui si trova la zona. Deve corrispondere a una località definita nell'elenco location. Se omessa, Spanner Omni assegna la zona alla località default.
single_server Booleano Facoltativo. Se impostato su true, indica che questa zona ha un solo server (può avere un solo server radice e nessun altro server). Elimina l'overhead di replica dei metadati di zona all'interno della zona. In un deployment multizona, puoi impostare questo valore su true per zone specifiche, ad esempio una zona di replica WITNESS che non memorizza i dati utente, mentre altre zone hanno più server. Il valore predefinito è false.
replica_type Stringa enum Il ruolo di replica della zona nei quorum Paxos. I valori supportati sono READ_WRITE, WITNESS e READ_ONLY. Il valore predefinito è READ_WRITE.
root_server Elenco di oggetti Obbligatorio. L'elenco dei server radice nella zona.

Tipi di replica

Spanner Omni supporta tre tipi di repliche per le zone:

  • READ_WRITE: archivia una copia completa dei dati utente, gestisce le richieste di lettura e vota nei quorum Paxos. Le repliche di lettura/scrittura sono idonee a diventare leader Paxos per proporre scritture.
  • WITNESS: vota nei quorum di Paxos per contribuire a raggiungere il consenso, ma non può diventare leader. Le repliche testimone non archiviano i dati utente e non possono gestire le richieste di lettura. Consentono di raggiungere il quorum senza l'overhead di archiviazione o la latenza di scrittura di una replica completa in località distanti.
  • READ_ONLY: archivia una copia completa dei dati utente replicati in modo asincrono dai leader. Le repliche di sola lettura non possono diventare leader e non votano nei quorum Paxos. Scaricano il traffico di lettura dalle repliche di lettura/scrittura.

Quando configuri i tipi di replica, assicurati che il deployment soddisfi le seguenti regole:

  • Il deployment deve contenere almeno una zona READ_WRITE.
  • Il numero di zone READ_WRITE deve essere strettamente maggiore del numero di zone WITNESS.

Server radice

I server root hanno responsabilità speciali in Spanner Omni. Memorizzano i metadati di zona e gestiscono l'appartenenza per gli altri server della zona. Se un quorum di server radice non è più disponibile, l'intera zona non è più disponibile.

Quando configuri i server root in deployment.yaml, tieni presente le seguenti linee guida:

  • Il numero di server radice per zona deve essere un numero dispari compreso tra 1 e 9, inclusi, per garantire il quorum per la coerenza. Se il numero di server è pari, i deployment potrebbero non riuscire. Quando configuri le zone, designa i server come server radice. Ti consigliamo di utilizzarne una per lo sviluppo o il test e tre per le zone di produzione ad alta disponibilità.
  • Specifica solo i server root nel file deployment.yaml durante la creazione del deployment iniziale. I server non root possono essere aggiunti in un secondo momento per scalare la capacità di calcolo e di archiviazione.

Ogni oggetto server radice supporta i seguenti campi:

  • host: obbligatorio. Il nome host o l'indirizzo IP della macchina che esegue il server.
  • port_base: facoltativo. Il numero di porta iniziale per il server. Il valore predefinito è 15000. Questa porta diventa la porta gRPC pubblica per le connessioni client. Devi riservare le porte nell'intervallo [port_base + 1, port_base + 31] (ad esempio, da 15001 a 15031) per i processi interni di Spanner Omni.

Zone a server singolo

Il campo single_server a livello di zona specifica che una singola zona contiene un solo server. Una zona a server singolo può avere un solo server radice e non è possibile aggiungere altri server in un secondo momento. Questa impostazione elimina l'overhead della replica dei metadati di zona all'interno di quella zona.

A differenza del campo single_server di primo livello, che indica che l'intero deployment è costituito da un singolo server, il campo single_server a livello di zona si applica solo a quella zona specifica.

In un deployment multizona, puoi configurare singole zone come zone a server singolo, mentre altre zone contengono più server. Ad esempio, considera un deployment con due zone di replica READ_WRITE e una zona di replica WITNESS:

  • Le due zone READ_WRITE contengono più server (single_server: false) per fornire alta affidabilità e scalare la capacità di calcolo e di archiviazione per i dati degli utenti.
  • Puoi configurare la zona WITNESS come zona a server singolo o multi-server, a seconda del volume di voti Paxos:
    • Workload di piccole e medie dimensioni: se una singola VM o un singolo server ha una capacità sufficiente per elaborare tutto il traffico di voto Paxos per il deployment, imposta single_server: true. Poiché le repliche di testimoni votano soltanto e non archiviano i dati utente, l'utilizzo di un singolo server elimina il sovraccarico di replica dei metadati all'interno della zona.
    • Deployment su larga scala: se hai una velocità effettiva di scrittura elevata o molti server in ogni zona READ_WRITE (ad esempio, decine o centinaia di nodi), un singolo server può sovraccaricarsi e causare errori di consenso Paxos. Configura la zona WITNESS con più server (single_server: false) per distribuire il carico di lavoro di voto.

Per un esempio di configurazione, consulta Deployment multisede con replica di controllo.

SLA dell'orologio

Spanner Omni si basa sul software TrueTime per fornire una coerenza esterna senza richiedere hardware GPS specializzato o orologi atomici. L'oggetto clock_sladefinisce i limiti di sincronizzazione previsti per gli orologi del server nel deployment:

clock_sla:
  jitter_in_s: 0.005
  rate_error_in_ppm: 200

La configurazione clock_sla include i seguenti campi:

  • jitter_in_s: il jitter di clock massimo previsto in secondi. Deve essere un numero con rappresentazione in virgola mobile non negativo (>= 0).
  • rate_error_in_ppm: l'errore massimo di deriva dell'orologio in parti per milione (ppm). Deve essere un valore compreso tra 0 e 10000.

Per saperne di più sulla sincronizzazione dell'ora, vedi TrueTime e coerenza esterna.

Impostazioni di deployment

L'oggetto deployment_settings configura il comportamento di deployment globale, inclusi la preferenza per la posizione del leader e la sicurezza di rete:

deployment_settings:
  preferred_leader_location: us-central1
  security_settings:
    insecure_mode: false
    authentication_methods:
      - AUTHENTICATION_METHOD_PASSWORD
      - AUTHENTICATION_METHOD_CLIENT_CERTIFICATE
    password_authentication_protocol: PASSWORD_AUTHENTICATION_PROTOCOL_OPAQUE

Località leader preferita

Il campo preferred_leader_location indica una posizione in cui vengono posizionati preferibilmente i leader di Paxos. La scelta di leader vicini al tuo carico di lavoro dell'applicazione principale riduce la latenza di scrittura evitando round trip di rete aggiuntivi.

Quando configuri preferred_leader_location, assicurati di quanto segue:

  • La località specificata deve corrispondere a una località definita nell'elenco location (o default).
  • La posizione designata deve contenere almeno una zona READ_WRITE.

Impostazioni di sicurezza

L'oggetto security_settings configura le modalità di autenticazione e crittografia:

  • insecure_mode: booleano. Se impostato su true, disabilita l'autenticazione e l'autorizzazione per le connessioni in entrata. Questa modalità è destinata solo alla prototipazione e alla valutazione. Il valore predefinito è false.
  • authentication_methods: elenco dei metodi di autenticazione abilitati. Obbligatorio se insecure_mode è false. Valori supportati:
    • AUTHENTICATION_METHOD_PASSWORD: attiva l'autenticazione con nome utente e password.
    • AUTHENTICATION_METHOD_CLIENT_CERTIFICATE: abilita l'autenticazione del certificato client mutual TLS (mTLS).
  • password_authentication_protocol: il protocollo utilizzato per la verifica della password. Obbligatorio se AUTHENTICATION_METHOD_PASSWORD è incluso in authentication_methods. Valore supportato:
    • PASSWORD_AUTHENTICATION_PROTOCOL_OPAQUE: utilizza il protocollo di scambio di chiavi autenticato con password asimmetrica OPAQUE.

Per saperne di più sulla configurazione della crittografia e delle credenziali, consulta Crea un deployment con crittografia TLS sulle VM.

Esempi di configurazione del deployment

Gli esempi seguenti mostrano pattern di deployment comuni.

Deployment multizona regionale

La seguente configurazione crea un deployment regionale ad alta disponibilità in tre zone di una singola località:

name: regional-prod
location:
  - name: us-central1
zone:
  - name: us-central1-a
    location: us-central1
    replica_type: READ_WRITE
    root_server:
      - host: root-a1.example.internal
      - host: root-a2.example.internal
      - host: root-a3.example.internal
  - name: us-central1-b
    location: us-central1
    replica_type: READ_WRITE
    root_server:
      - host: root-b1.example.internal
      - host: root-b2.example.internal
      - host: root-b3.example.internal
  - name: us-central1-c
    location: us-central1
    replica_type: READ_WRITE
    root_server:
      - host: root-c1.example.internal
      - host: root-c2.example.internal
      - host: root-c3.example.internal

Deployment in più località con replica witness

La seguente configurazione crea un deployment multisede che si estende su due data center e un sito di testimonianza, con il posizionamento del leader preferito. L'elenco location_distance specifica latenze di rete realistiche e asimmetriche tra ogni coppia di località. Le due zone READ_WRITE utilizzano ciascuna tre server root per l'alta disponibilità, mentre la zona WITNESS utilizza single_server: true con un singolo server root perché le repliche di controllo non archiviano i dati utente:

name: multi-site-deployment
location:
  - name: datacenter-east
  - name: datacenter-west
  - name: datacenter-central
location_distance:
  - src: datacenter-east
    dest: datacenter-central
    latency_ms: 25
  - src: datacenter-central
    dest: datacenter-east
    latency_ms: 27
  - src: datacenter-central
    dest: datacenter-west
    latency_ms: 30
  - src: datacenter-west
    dest: datacenter-central
    latency_ms: 32
  - src: datacenter-east
    dest: datacenter-west
    latency_ms: 55
  - src: datacenter-west
    dest: datacenter-east
    latency_ms: 58
zone:
  - name: east-zone-1
    location: datacenter-east
    replica_type: READ_WRITE
    root_server:
      - host: east-root-1.example.internal
      - host: east-root-2.example.internal
      - host: east-root-3.example.internal
  - name: west-zone-1
    location: datacenter-west
    replica_type: READ_WRITE
    root_server:
      - host: west-root-1.example.internal
      - host: west-root-2.example.internal
      - host: west-root-3.example.internal
  - name: central-witness-zone
    location: datacenter-central
    single_server: true
    replica_type: WITNESS
    root_server:
      - host: witness-root-1.example.internal
deployment_settings:
  preferred_leader_location: datacenter-east

Deployment sicuro con TLS e autenticazione

La seguente configurazione definisce un deployment con l'autenticazione mTLS e con password abilitata:

name: secure-deployment
location:
  - name: us-central1
zone:
  - name: us-central1-a
    location: us-central1
    replica_type: READ_WRITE
    root_server:
      - host: server-1.example.internal
        port_base: 15000
      - host: server-2.example.internal
        port_base: 15000
      - host: server-3.example.internal
        port_base: 15000
deployment_settings:
  security_settings:
    insecure_mode: false
    authentication_methods:
      - AUTHENTICATION_METHOD_PASSWORD
      - AUTHENTICATION_METHOD_CLIENT_CERTIFICATE
    password_authentication_protocol: PASSWORD_AUTHENTICATION_PROTOCOL_OPAQUE

Passaggi successivi