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:
- Crea un deployment sulle VM
- Crea un deployment sicuro sulle VM
- Crea un deployment su Kubernetes
- Crea un deployment sicuro su Kubernetes
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_serverdi primo livello si applica all'intero deployment. - Il campo a livello di zona
single_serversi 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-east1oonprem: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'elencolocation.dest: obbligatorio. Il nome della località di destinazione. Deve corrispondere a una località definita e non può essere identico asrc.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_WRITEdeve essere strettamente maggiore del numero di zoneWITNESS.
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.yamldurante 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, da15001a15031) 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_WRITEcontengono 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
WITNESScome 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 zonaWITNESScon più server (single_server: false) per distribuire il carico di lavoro di voto.
- 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
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 tra0e10000.
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(odefault). - 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 sutrue, 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 seinsecure_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 seAUTHENTICATION_METHOD_PASSWORDè incluso inauthentication_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
- Crea un deployment sulle VM
- Crea un deployment con crittografia TLS sulle VM
- Scalare un deployment di VM
- Mantenere un deployment