Umschaltung
Switchover ändert die Richtung zwischen Primär und Standby ohne Datenverlust. Verwenden Sie dies, wenn der aktuelle primäre Cluster noch erreichbar ist oder wenn Sie den Datenverkehr zu Wartungszwecken umleiten müssen.
In diesem Leitfaden wird von der aktuellen Topologie ausgegangen:
cluster-a (primary) -> cluster-b (standby)
Nach dem Switchover sieht die Topologie folgendermaßen aus:
cluster-b (primary) -> cluster-a (standby)
Wann Sie Switchover verwenden sollten
Verwenden Sie Switchover, wenn:
- Sie Wartungsarbeiten am aktuellen Primärserver durchführen.
- Der Primärserver ist teilweise beeinträchtigt, kann aber noch auf Anfragen reagieren.
- Sie benötigen RPO = 0 und können keinen Datenverlust akzeptieren.
Verwenden Sie die Umschaltung nicht, wenn der primäre Server nicht mehr verfügbar ist. Verwenden Sie in diesem Fall Failover.
Bevor Sie beginnen
Überprüfen Sie Folgendes, bevor Sie beginnen:
- Beide Cluster sind erreichbar.
- Die CDC-Replikation ist in Ordnung.
- Die CDC-Verzögerung ist niedrig genug für die angestrebte Wiederherstellungszeit.
- Die Schreibvorgänge der Anwendung können während des Rollenwechsels angehalten oder erneut versucht werden.
- Sie haben die neue Topologiekonfiguration vorbereitet.
Die Umschaltung garantiert keinen Datenverlust, aber die Betriebszeit hängt davon ab, wie viele Daten noch repliziert werden müssen.
Erstellen Sie die neue Topologie
Erstellen Sie eine vollständige Ersetzungskonfiguration, bei der cluster-b die Quelle und cluster-a das Ziel wird.
# 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,
}
],
}
Anwenden der neuen Topologie
Wenden Sie die gleiche Konfiguration auf beide Cluster an. Senden Sie die Anforderung zuerst an den aktuellen primären und dann an den Standby-Cluster. Wenn Sie später zurückwechseln, kehren Sie die Reihenfolge um, da cluster-b der aktuelle Primärserver ist.
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()
Der alte Primärserver wird zum Standby-Server degradiert und lehnt neue Schreibvorgänge ab. Der alte Standby-Server wartet auf die verbleibenden replizierten Daten, stuft sich selbst zum primären Server herauf und nimmt dann Schreibvorgänge an.
Wenn die Anforderung aufgrund eines vorübergehenden Netzwerk- oder Dienstfehlers fehlschlägt, versuchen Sie es erneut mit derselben Konfiguration.
Umleitung des Anwendungsverkehrs
Nachdem cluster-b primär geworden ist:
- Leiten Sie den Schreibverkehr auf
cluster-bum. - Bestätigen Sie, dass Lese- und Schreibvorgänge auf
cluster-berfolgreich sind. - Vergewissern Sie sich, dass
cluster-akeine Schreibzugriffe von Anwendungen mehr empfängt. - Überwachen Sie weiterhin die Replikation von
cluster-bzurück zucluster-a.
Überprüfen Sie das Ergebnis
Vergewissern Sie sich, dass cluster-b als neuer Primärserver fungiert und die Daten konsistent bleiben. Zu den üblichen Überprüfungen gehören:
- Vergleichen Sie die Zeilenzahlen für wichtige Collections.
- Abfrage bekannter Primärschlüssel aus beiden Clustern.
- Führen Sie eine repräsentative Suche auf dem neuen primären und dem alten Standby-Server durch.
- Führen Sie einen kleinen Schreibvorgang auf
cluster-baus und bestätigen Sie, dass er aufcluster-arepliziert wird.
Zurückwechseln
Um später zurückzuschalten, wenden Sie die ursprüngliche Topologie erneut an:
cluster-a -> cluster-b
Verwenden Sie denselben Umschaltvorgang. Vergewissern Sie sich vor dem Zurückschalten, dass der aktuelle Primärserver erreichbar und die Replikation in Ordnung ist.
HÄUFIG GESTELLTE FRAGEN
Gehen beim Switchover Daten verloren?
Nein. Beim Switchover wird gewartet, bis die verbleibenden Daten repliziert sind, bevor der Standby-Server zum Primärserver wird.
Muss ich die Schreibvorgänge der Anwendung stoppen?
Während des Rollenwechsels sollten Sie Schreibvorgänge unterbrechen oder die Wiederholung von Schreibvorgängen ermöglichen. Schreibvorgänge, die an den alten Primärserver gesendet werden, nachdem er degradiert wurde, werden zurückgewiesen.
Warum dauert die Umstellung länger als erwartet?
Der häufigste Grund ist die CDC-Verzögerung. Der neue Primärserver muss die verbleibenden Daten erhalten, bevor er sicher mit RPO = 0 übernehmen kann.
Kann ich eine fehlgeschlagene Umschaltanforderung wiederholen?
Ja. Wiederholen Sie den Vorgang mit derselben Zieltopologie.
Was passiert mit dem alten Primärserver?
Der alte Primärserver wird zum Standby-Server. Sie sollte keine Schreibzugriffe von Anwendungen mehr erhalten.