Commutazione
Lo switchover cambia la direzione primario-standby senza perdita di dati. Si usa quando il cluster primario attuale è ancora raggiungibile o quando è necessario spostare il traffico per la manutenzione.
Questa guida presuppone che la topologia corrente sia:
cluster-a (primary) -> cluster-b (standby)
Dopo lo switchover, la topologia diventa:
cluster-b (primary) -> cluster-a (standby)
Quando usare lo switchover
Usare lo switchover quando:
- Si sta eseguendo la manutenzione del primario corrente.
- Il primario è parzialmente degradato ma può ancora rispondere alle richieste.
- È necessario un RPO = 0 e non si può accettare una perdita di dati.
Non utilizzare lo switchover se il primario è completamente indisponibile. In tal caso, utilizzare il Failover.
Prima di iniziare
Prima di iniziare, verificare quanto segue:
- Entrambi i cluster sono raggiungibili.
- La replica CDC è sana.
- Il ritardo di CDC è sufficientemente basso per il tempo di ripristino desiderato.
- Le scritture delle applicazioni possono essere messe in pausa o ritentate durante il cambio di ruolo.
- È stata preparata la configurazione della nuova topologia.
Il passaggio al ruolo garantisce l'assenza di perdita di dati, ma il tempo di funzionamento dipende dalla quantità di dati ancora da replicare.
Creare la nuova topologia
Creare una configurazione di sostituzione completa in cui cluster-b diventa l'origine e cluster-a diventa la destinazione.
# If you followed Set Up CDC Replication, cluster A is the original source cluster,
# and cluster B is the original target cluster.
cluster_a_id = source_cluster_id
cluster_a_addr = source_cluster_addr
cluster_a_client_addr = source_client_addr
cluster_a_token = source_cluster_token
cluster_a_pchannels = source_cluster_pchannels
cluster_b_id = target_cluster_id
cluster_b_addr = target_cluster_addr
cluster_b_client_addr = target_client_addr
cluster_b_token = target_cluster_token
cluster_b_pchannels = target_cluster_pchannels
switchover_config = {
"clusters": [
{
"cluster_id": cluster_a_id,
"connection_param": {
"uri": cluster_a_addr,
"token": cluster_a_token,
},
"pchannels": cluster_a_pchannels,
},
{
"cluster_id": cluster_b_id,
"connection_param": {
"uri": cluster_b_addr,
"token": cluster_b_token,
},
"pchannels": cluster_b_pchannels,
},
],
"cross_cluster_topology": [
{
"source_cluster_id": cluster_b_id,
"target_cluster_id": cluster_a_id,
}
],
}
Applicare la nuova topologia
Applicare la stessa configurazione a entrambi i cluster. Inviare la richiesta prima al primario corrente e poi allo standby. Se in seguito si torna indietro, invertire l'ordine perché cluster-b è il primario corrente.
from pymilvus import MilvusClient
client_a = MilvusClient(uri=cluster_a_client_addr, token=cluster_a_token)
client_b = MilvusClient(uri=cluster_b_client_addr, token=cluster_b_token)
try:
client_a.update_replicate_configuration(**switchover_config)
client_b.update_replicate_configuration(**switchover_config)
finally:
client_a.close()
client_b.close()
Il vecchio primario viene declassato a standby e rifiuta le nuove scritture. Il vecchio standby attende i dati replicati rimanenti, si promuove a primario e accetta le scritture.
Se la richiesta fallisce a causa di un errore transitorio di rete o di servizio, riprovare con la stessa configurazione.
Reindirizzare il traffico delle applicazioni
Dopo che cluster-b è diventato primario:
- Indirizzare il traffico di scrittura su
cluster-b. - Confermare che le letture e le scritture hanno successo su
cluster-b. - Verificare che
cluster-anon riceva più le scritture delle applicazioni. - Continuare a monitorare la replica da
cluster-bacluster-a.
Verifica del risultato
Verificare che cluster-b sia il nuovo primario e che i dati siano coerenti. I controlli più comuni includono:
- Confrontare i conteggi delle righe per le collezioni importanti.
- Eseguire una query sulle chiavi primarie note di entrambi i cluster.
- Eseguire una ricerca rappresentativa sul nuovo primario e sul vecchio standby.
- Eseguire una piccola scrittura su
cluster-be verificare che venga replicata sucluster-a.
Tornare indietro
Per tornare indietro in un secondo momento, applicare nuovamente la topologia originale:
cluster-a -> cluster-b
Utilizzare lo stesso flusso di switchover. Assicurarsi che il primario attuale sia raggiungibile e che la replica sia sana prima di tornare indietro.
DOMANDE FREQUENTI
Lo switchover fa perdere dati?
No. Lo switchover attende che i dati rimanenti siano replicati prima che lo standby diventi primario.
È necessario interrompere le scritture dell'applicazione?
Durante il cambio di ruolo è necessario sospendere le scritture o renderle ripetibili. Le scritture inviate al vecchio primario dopo il declassamento vengono rifiutate.
Perché lo switchover richiede più tempo del previsto?
Il motivo più comune è il ritardo del CDC. Il nuovo primario deve ricevere i dati rimanenti prima di poter subentrare con sicurezza con RPO = 0.
È possibile riprovare una richiesta di switchover fallita?
Sì. Riprovare con la stessa topologia di destinazione.
Cosa succede al vecchio primario?
Il vecchio primario diventa uno standby. Non dovrebbe più ricevere le scritture dell'applicazione.