Primary, Replica und MariaDB-Replikation · Stand September 2026 (Server 1.0.31, Agent 1.0.36)

Hochverfügbarkeit einrichten

Dieses Dokument beschreibt, wie Sie einen zweiten ZeroPortal-Knoten als Replica an einen bestehenden Server anbinden, was die beiden Knoten im Betrieb tun, wie Sie einen Cluster aktualisieren und was bei einem Ausfall zu tun ist. Es setzt einen installierten Server voraus (siehe Administrationshandbuch, Kapitel 3) und vertieft dessen Kapitel 11.


1. Was ist das?

ZeroPortal kennt zwei Rollen. Der Primary ist der Knoten, dessen Datenbank schreibt: Jede Änderung im Portal, jede Registrierung eines Geräts und jede Lizenzbuchung landet hier. Eine Replica hält eine laufend nachgeführte Kopie dieser Datenbank und liefert daraus Pakete und Richtlinien an die Clients. Jeder frisch installierte Knoten ist zunächst ein eigenständiger Primary; eine Replica entsteht, indem ein zweiter Knoten dem ersten mit einem Einladungs-Token beitritt.

Die Kopie entsteht durch die Binlog-Replikation von MariaDB: Der Primary schreibt jede Änderung in sein Binärlog, die Replica liest dieses Log mit und spielt es in ihre eigene Datenbank ein. Drei Dinge bleiben bewusst je Knoten und werden nicht repliziert: die Knotenkonfiguration (Rolle, Knoten-ID, Wartungsmodus, LDAP-Einstellungen), die Liste der registrierten Knoten und die App-V-Reporting-Tabellen. App-V-Reports nimmt daher nur der Primary entgegen; eine Replica reicht sie dorthin weiter.

Eine Replica ist im Alltag voll bedienbar. Lesen geschieht immer aus der lokalen Kopie. Schreibvorgänge leitet der Knoten unbemerkt an den Primary weiter, es gibt keinen Nur-Lesen-Modus und keinen dauerhaften Hinweis. Nur wenn der Primary nicht erreichbar ist, erscheint auf jeder Seite der gelbe Balken Kein Primary erreichbar.

Der Primary prüft alle registrierten Knoten alle 10 Sekunden über deren Health-Endpunkt. Jede Replica meldet sich alle 5 Minuten per Heartbeat beim Primary; schlägt ein Heartbeat fehl, versucht sie es jede Minute erneut. Beides sehen Sie unter Globale Konfiguration → Hochverfügbarkeit.


2. Wozu ist das gut?

Was eine Replica nicht beschleunigt, sind Schreibvorgänge: Sie landen immer beim Primary, die Replica reicht sie nur weiter. Fehlt der Primary, betrifft das vor allem Sie als Administrator: Änderungen im Portal, neu hinzukommende Geräte und Lizenzbuchungen warten, bis er zurück ist oder eine Replica befördert wurde. Die Benutzer merken davon nichts, ihr Abgleich läuft weiter. Die eine Ausnahme ist das App-V-Reporting: Auch die Berichte der Clients sind Schreibvorgänge und warten mit. Einen automatischen Rollenwechsel gibt es nicht.

Ein einzelner Knoten trägt im Übrigen auch große Flotten; die Hinweise zur Dimensionierung stehen im Administrationshandbuch, Kapitel 2. Die Lastverteilung ist ein willkommener Nebeneffekt der Hochverfügbarkeit, kein Grund allein für einen zweiten Knoten.


3. Die Handgriffe in Kurzform

Alles läuft über Globale Konfiguration → Hochverfügbarkeit auf dem jeweils genannten Knoten. Kein SQL, keine Kommandozeile. Ausführlich stehen die Wege in den folgenden Abschnitten.

Zweiten Knoten aufnehmen

  1. Auf dem Primary: Neues Token erzeugen, Token kopieren.
  2. Auf dem neuen Knoten: Als Replica einrichten…, URL des Primary und Token eintragen, Als Replica beitreten.
  3. Auf dem neuen Knoten: Assistent starten…. Er richtet die Datenbankreplikation auf beiden Seiten ein und holt am Ende die vorhandenen Daten.

Der Primary ist ausgefallen

Nichts überstürzen. Die Clients werden von den Replicas weiter versorgt, Pakete und Richtlinien kommen unverändert an. Nur Änderungen im Portal, neue Geräte, Berichte und Lizenzbuchungen warten. Kommt der Primary bald zurück, holen die Replicas die Lücke von selbst auf.

Eine Replica zum Primary machen

Kommt er nicht zurück, befördern Sie eine Replica. Zwei Klicks, gut eine Minute:

  1. Auf der Replica: Zurücksetzen / zum Primary befördernZum Primary befördern…, bestätigen. Die Daten sind bereits da, es wird nichts kopiert.
  2. Übrige Replicas neu anbinden: Beim Befördern wird die Knotenliste geleert. Auf dem neuen Primary ein Token erzeugen und jede Replica wie oben beitreten lassen.

Die Agenten müssen Sie nicht anfassen, solange die Adresse des neuen Primary in der Serverliste der Gruppenrichtlinie steht. Sie haben längst auf einen erreichbaren Knoten gewechselt.

Den alten Primary zurückholen

Er kommt als Replica zurück: Token auf dem neuen Primary erzeugen, auf dem alten Knoten Als Replica einrichten…, Assistent laufen lassen. Seine veraltete Datenbank wird dabei überschrieben.

Replikation hängt oder ist abgerissen

Auf der Replica: Erweitert / manuelle Einrichtung, Registerkarte Replica, Full Sync vom Primary…. Das ist der Standardweg für jede Abweichung, auch nach längerem Ausfall.

Knoten aktualisieren

Primary zuerst: MSI installieren, danach das Datenbankupdate auf demselben Knoten ausführen. Erst danach die Replicas, eine nach der anderen, jede vorher in den Wartungsmodus. Grund: Schemaänderungen laufen auf dem Primary und erreichen die Replicas über die Replikation; eine zuerst aktualisierte Replica läuft bis dahin einfach mit dem alten Schema weiter.


4. Einrichtung Schritt für Schritt

Alle Schritte laufen im Portal unter Globale Konfiguration → Hochverfügbarkeit; nötig ist im Bereich Hochverfügbarkeit die Stufe Verwalten oder ein Voll-Administrator-Konto (siehe Benutzer, Rechte, Lizenzen und Protokolle).

4.1 Voraussetzungen

Replikationskennwort und MariaDB-Pfade im Konfigurationstool, Schritt 2

4.2 Einladungs-Token auf dem Primary erzeugen

Auf dem Primary: Globale Konfiguration → Hochverfügbarkeit → Abschnitt Einladungs-TokenNeues Token erzeugenKopieren. Dazu die Basis-URL des Primary mit Port notieren, z. B. https://portal1.example.com:8080.

Das Token gilt 24 Stunden und genau für einen Beitritt; ein neues Token macht ein vorhandenes ungültig.

4.3 Den zweiten Knoten beitreten lassen

Auf dem künftigen Replica-Knoten dieselbe Seite öffnen (er zeigt sich noch als Primary):

  1. Als Replica einrichten…Basis-URL des Primary eintragen → Testen. Die Antwort nennt Rolle und Datenbankname des Primary; schlägt der Test fehl, stimmen URL, Port, Zertifikat oder Firewall nicht.
  2. Einladungs-Token einfügen. Die Basis-URL dieses Knotens ist vorbelegt; das ist die Adresse, unter der der Primary diesen Knoten erreicht.
  3. Als Replica beitreten. Unter Dieser Knoten steht jetzt Rolle Replica; auf dem Primary erscheint der Knoten unter Registrierte Knoten mit Replikation: Nicht gestartet. Die Datenbank koppelt erst der nächste Schritt.

4.4 HA Setup Wizard ausführen

Der Assistent richtet die MariaDB-Replikation auf beiden Knoten ein (my.ini, Firewall, Neustart des Datenbankdienstes, Kopplung). Sie starten ihn auf der Replica:

  1. Im Abschnitt Replikations-Assistent auf Assistent starten… klicken. Das Fenster HA Setup Wizard zeigt die geplanten Schritte und vier Felder:
Feld Bedeutung
DB-Host des Primary Host oder IP der MariaDB des Primary (vorbelegt aus der Basis-URL)
Port MariaDB-Port des Primary, Standard 3306
Primary-ID server-id des Primary; Konvention 1. Nur anpassen, wenn der Primary kürzlich befördert wurde und in seiner my.ini noch eine andere ID trägt
Server-ID dieses Knotens eindeutiger Wert ≥ 2, aus der Knoten-ID vorgeschlagen; muss sich von der Primary-ID unterscheiden
  1. Assistent starten bestätigen. Der Assistent zeigt jeden seiner Schritte mit Ergebnis. Geht etwas schief, spielt er die my.ini auf beiden Knoten zurück und bricht ab; scheitert nur ein Firewall-Schritt, läuft er weiter.
  2. Fenster schließen. Hatte die Replica noch keine Paketdaten, öffnet sich stattdessen sofort der Full Sync (Abschnitt 4.5).

Während des Assistenten ist der Primary für einige Sekunden ohne Datenbank (Neustart von MariaDB). Planen Sie die Einrichtung in eine ruhige Zeit.

4.5 Full Sync: vorhandene Daten auf die Replica kopieren

Die Replikation überträgt nur Änderungen ab der Binlog-Position, an der sie gestartet wurde. Der Full Sync holt einen vollständigen Dump vom Primary, spielt ihn lokal ein und startet die Replikation ab genau der Position, die zum Dump gehört.

Der gesamte lokale Datenbankinhalt wird ersetzt, das Portal auf diesem Knoten ist kurz nicht erreichbar, und der Vorgang lässt sich nicht rückgängig machen. Knotenkonfiguration, Knotenliste und App-V-Reporting-Tabellen sind vom Dump ausgenommen; die Replica behält Rolle und Knoten-ID.

Ein Full Sync ist später erneut nötig, wenn eine Replica länger als sieben Tage vom Primary getrennt war, aus einem Snapshot zurückgesetzt wurde oder der SQL-Thread wegen abweichender Daten steht (Abschnitt 6.4).

4.6 Ergebnis prüfen


5. Regeln: wann wirkt was

5.1 Was wo geschrieben wird, und wann

Was Regel
Pakete, Richtlinien, Zuweisungen lesen (Agent-Abgleich) lokal auf jedem Knoten
Änderungen im Portal, Registrierung, Lizenzbuchung, Audit, App-V-Reports Replica leitet an den Primary weiter; scheitert nach 5 s, danach 30 s Schnellabbruch, dann neuer Versuch
Rolle, Knoten-ID, Wartungsmodus, LDAP-Einstellungen je Knoten, nicht repliziert
Liste der registrierten Knoten Primary führend; die Seite einer Replica fragt den Primary live
Primary prüft jeden registrierten Knoten alle 10 s; die Anzeige Registrierte Knoten ebenso
Heartbeat der Replica alle 5 min, nach einem Fehlschlag jede Minute; überfällig nach Intervall + 1 min
Einladungs-Token 24 h, einmalig
IO-Thread „Connecting" nach Primary-Neustart bis 10 min toleriert, danach Alarm Database replication stopped
Binärlog auf dem Primary 7 Tage; eine länger fehlende Replica braucht einen Full Sync

Die Umschaltung Schreib-Routing unter Dieser Knoten einer Replica lassen Sie auf Aktiv. Deaktiviert verwirft alle weitergeleiteten Schreibzugriffe stillschweigend; das ist ausschließlich ein Diagnoseschalter.

5.2 Statusanzeigen unter Registrierte Knoten

Der Punkt fasst den Zustand zusammen (Wartung vor Erreichbarkeit vor Replikation), der Tooltip nennt die Ursache: Blau Wartungsmodus; Grün erreichbar, Heartbeat frisch, Rückstand unter 60 s; Gelb vorübergehend (Knoten antwortet nicht, Heartbeat aber frisch; Heartbeat überfällig; Rückstand 60–299 s); Rot Eingriff nötig (nicht erreichbar und Heartbeat überfällig; SQL-Thread gestoppt; Rückstand ab 300 s; auf einer Replica: Primary nicht erreichbar); Grau noch nicht geprüft.

Spalte Replikation: OK: <Datum> oder <n> s: <Datum> = beide Threads laufen, n Sekunden Rückstand; IO gestoppt → Abschnitte 6.3 und 6.4; SQL gestoppt → Wartung beenden bzw. Abschnitt 6.4; Nicht gestartet → HA Setup Wizard (auf der Replica ist der Text ein Link). Nur ein gestoppter SQL-Thread färbt den Punkt rot. Nach einem Neustart des Primary meldet MariaDB den IO-Thread als „Connecting" und verbindet sich von selbst wieder; erst ein echter Fehler (ungültige Binlog-Position 1236, falsches Replikationspasswort, TLS) stoppt ihn.

5.3 Wartungsmodus

Der Wartungsmodus hält auf einer Replica den SQL-Thread an: Änderungen des Primary werden weiter empfangen, aber erst nach dem Beenden eingespielt. Der Punkt wird blau, der Knoten bleibt für Clients erreichbar. Gedacht für Arbeiten an der Replica, bei denen die Datenbank nicht mitlaufen soll (Update der Programmdateien, Wartung von MariaDB).

5.4 Wenn der Primary ausfällt

Replica ohne Primary
Portal auf der Replica antwortet normal; Aufgaben, die den Primary brauchen, werden im Hintergrund wiederholt
Verteilung (MSIX, App-V, Richtlinien) läuft weiter, Lesen ist lokal
Verwaltung, Registrierung, Berichte, Lizenzbuchung warten; jeder Schreibvorgang scheitert nach 5 s, dann 30 s sofort, dann neuer Versuch
Sichtbar Balken Kein Primary erreichbar auf jeder Seite (mit Zeitpunkt); /api/health/status liefert primaryReachable: false; E-Mail Primary not reachable (sent by the replica)
Erkennung beim nächsten Heartbeat oder sofort beim ersten weitergeleiteten Schreibzugriff; danach Heartbeat jede Minute
Rückkehr des Primary von selbst; E-Mail Primary reachable again und Audit-Eintrag Cluster.PrimaryRecovered mit dem Ausfallfenster
Primary kommt nicht zurück Replica befördern, Abschnitt 6.2

Der Primary kann seinen eigenen Ausfall nicht melden; diese eine Meldung schickt die Replica, alle anderen Cluster-Meldungen kommen vom Primary.

Grenzen: genau ein Primary, beliebig viele Replicas mit je eigener Server-ID; kein automatischer Failover, die Beförderung ist ein bewusster Schritt des Administrators; nach mehr als 7 Tagen Trennung oder einem Snapshot-Rollback der Replica ist ein Full Sync nötig.

5.5 Knoten entfernen

In beiden Fällen läuft die MariaDB-Replikation weiter. Soll der Knoten nicht wieder beitreten, danach auf ihm Erweitert / manuelle Einrichtung → Registerkarte ReplicaReplica zurücksetzen (RESET REPLICA ALL) ausführen oder den Beförderungs-Assistenten laufen lassen (Abschnitt 6.2), der zusätzlich die server-id auf 1 setzt.


6. Betrieb und Fehlersuche

6.1 Update im Cluster

Die Schemaänderungen laufen auf dem Primary und erreichen die Replicas über die Replikation; ZDBInstallUpdate läuft trotzdem auf jedem Knoten, weil es dort die knotenlokalen Tabellen abgleicht.

  1. Primary: MSI installieren, danach das Datenbankupdate ausführen: "C:\Program Files\ZeroPortal\ZDBInstallUpdate.exe" "C:\Program Files\ZeroPortal\appsettings.json" --admin-user root --admin-password <Passwort> Dienst ZeroPortal prüfen bzw. starten. Die Replicas laufen mit dem alten Stand weiter.
  2. Replicas, eine nach der anderen: MSI installieren, ZDBInstallUpdate mit derselben Kommandozeile ausführen, Dienst prüfen. Erwartete Meldung dort: Schema migration skipped on this replica (deferred to the Primary) und LOCAL_TABLES: ….
  3. Kontrolle: HA-Seite des Primary, alle Knoten grün, Spalte Replikation OK; Version in der Fußzeile jedes Knotens.

Dasselbe erledigt das Konfigurationstool in Schritt 4 - Database Install / Update. Eine versehentlich zuerst aktualisierte Replica meldet REPLICA_SCHEMA_DEFERRED=1 (Exit-Code 19) und läuft auf dem alten Schema weiter, bis der Primary nachzieht; die Replikation bleibt intakt. Für ein Update von MariaDB gilt die umgekehrte Reihenfolge (zuerst die Replicas, zuletzt der Primary; Administrationshandbuch, Kapitel 12).

6.2 Primary verloren: Replica befördern

Der Klickweg steht in Abschnitt 3. Drei Dinge, die dort nicht hineinpassen:

Ein DNS-Alias oder Load Balancer, der auf den alten Primary zeigt, muss umgestellt werden. Die Agenten brauchen keine Änderung, solange beide Adressen in der Richtlinie Publishing-Server stehen.

6.3 Nach einem harten Ausfall des Primary

Wurde der Primary ohne sauberes Herunterfahren abgeschaltet, zeigen die Replicas danach manchmal IO gestoppt mit Got fatal error 1236 … start replication from position > file size: Die Replica merkt sich eine Binlog-Position, die es nach dem Neustart nicht mehr gibt. Alle fortsetzen hilft hier nicht; die Abhilfe ist Full Sync vom Primary… auf der betroffenen Replica. Vorbeugen: den Primary sauber herunterfahren oder wenigstens den MariaDB-Dienst vorher stoppen.

6.4 Replikation neu starten oder zurücksetzen

Situation Weg
SQL gestoppt nach Wartung Wartungsmodus beenden (Aus bzw. Alle fortsetzen)
SQL gestoppt oder Gestoppt ohne erkennbaren Grund auf dem Primary Alle fortsetzen oder auf der Replica START REPLICA;
Letzter Fehler Duplicate entry, Can't find record, doesn't exist die Replica hat abweichende Daten (die Registerkarte Replica zeigt Möglicherweise ist ein Full Sync nötig): Full Sync vom Primary…
IO gestoppt mit Access denied Replikationspasswort stimmt auf den Knoten nicht überein: in Schritt 2 des Konfigurationstools auf beiden Knoten gleich setzen, Schritt 4 auf dem Primary ausführen, HA Setup Wizard erneut starten
IO gestoppt mit Fehler 1236 Abschnitt 6.3
Replikation komplett neu aufsetzen Registerkarte ReplicaReplica zurücksetzen (RESET REPLICA ALL), dann HA Setup Wizard

6.5 Sicherungskopie der my.ini

Assistent und Beförderung schreiben in die my.ini von MariaDB (im Ordner data neben bin, alternativ my.cnf) und legen vorher daneben my.ini.zeroportal.bak an; jeder weitere Lauf überschreibt diese Kopie. Den Stand vor der HA-Einrichtung sichern Sie vorher selbst. Zurückspielen: Erweitert / manuelle Einrichtung → Registerkarte my.cnfSicherung zurückspielen, danach Auf diesem Knoten neu starten (MariaDB-Dienst).

6.6 Protokolle und Meldungen

Portal-Log: C:\ProgramData\NickIT\ZPServer\Logs\ZeroPortalLogs.log (ältere Installationen: C:\Windows\Temp\ZeroPortalLogs); Stufe Warning zeigt nur Übergänge und Fehler, Details erst mit Information (Konfigurationstool, Schritt 2, Log level; danach zurückstellen). Cluster-Zeilen beginnen mit NodeReachability:, PrimaryLink:, Heartbeat:, HA:, SetupWizard: und PromoteWizard:. E-Mail-Meldungen (Anhang 7.4) konfigurieren Sie unter Globale Konfiguration → Konfiguration → E-Mail-Benachrichtigungen; jede steht zusätzlich im Audit-Protokoll als Alert.Raised. Für Monitoring ohne Anmeldung: Anhang 7.5.

6.7 Häufige Fehler

Symptom Ursache Abhilfe
Testen beim Beitritt schlägt fehl; Punkt gelb mit SSL certificate validation failed URL, Port, Portal-Port in der Firewall oder nicht akzeptiertes Zertifikat URL mit Port prüfen; SslSettings:IgnoreSslErrors in der appsettings.json auf true (Standard) oder vertrauenswürdiges Zertifikat
Beitritt: Database name mismatch Datenbankname auf beiden Knoten verschieden Datenbank auf der Replica mit demselben Namen anlegen (Konfigurationstool, Schritt 2 und 4)
Beitritt: No valid invitation token / Invalid invitation token Token abgelaufen (24 h), bereits benutzt oder falsch kopiert auf dem Primary Neues Token erzeugen
Beitritt: Beitritt zu sich selbst nicht möglich die Primary-URL zeigt auf diesen Knoten URL des anderen Servers eintragen
Wizard: my.cnf not found; nach Beförderung bleibt server_id alt Bin Path fehlt in der appsettings.json oder MariaDB wurde verschoben Konfigurationstool, Schritt 2, Auto-detect, speichern, Dienst neu starten; notfalls server-id = 1 von Hand setzen und MariaDB neu starten
Wizard: Timeout bei Wait for Primary MariaDB; IO läuft: No mit error connecting Port 3306 zum Primary blockiert oder bind-address = 127.0.0.1 Test-NetConnection <primary> -Port 3306; Registerkarte my.cnf auf dem Primary prüfen; DB-Host im Wizard prüfen
Wizard: Server-ID conflict beide Knoten haben dieselbe server-id im Wizard eine andere Server-ID dieses Knotens wählen
Wizard: Could not fetch binlog position log_bin auf dem Primary aus, meist weil MariaDB nach dem Schreiben der my.ini nicht neu gestartet wurde Registerkarte my.cnfAuf dem Primary neu starten
IO läuft: No mit Access denied; SQL gestoppt mit Duplicate entry; Fehler 1236 siehe Abschnitt 6.4 Abschnitt 6.4
Punkt gelb, Tooltip Heartbeat overdue Replica hat sich länger als Intervall + 1 min nicht gemeldet Dienst und Netz der Replica prüfen; nach einem Primary-Neustart verschwindet es binnen einer Minute
Dienst startet auf einer Replica nach dem Update nicht, Log Unknown column ZDBInstallUpdate wurde auf der Replica nicht ausgeführt Abschnitt 6.1
Manuell: Binlog-Position vom Primary holen meldet Access denied der Button nutzt die lokalen App-Zugangsdaten; auf dem Primary ist das Passwort ein anderes oder dem Benutzer fehlt BINLOG MONITOR HA Setup Wizard verwenden (er nutzt zeroportal_repl), sonst Schritt 4 des Konfigurationstools auf dem Primary ausführen. Der Fehlertext nennt zeroportal_app; gemeint ist der App-Benutzer aus der Verbindungszeichenfolge, standardmäßig zeroportal_dbuser
Balken Kein Primary erreichbar auf der Replica Primary aus, Netz oder Portal-Port Abschnitt 5.4; bleibt der Primary weg: Abschnitt 6.2

7. Anhang: Technische Referenz

7.1 Einträge in der appsettings.json

Schlüssel Bedeutung
ReplicationSettings:ReplPassword Kennwort des Replikationsbenutzers zeroportal_repl; auf allen Knoten gleich (Konfigurationstool, Schritt 2, Repl. Password)
MySqlSettings:BinPath Ordner mit mysql.exe/mysqldump.exe; die my.ini wird relativ dazu gesucht (Schritt 2, Bin Path)
MySqlSettings:DataPath Datenverzeichnis von MariaDB (Schritt 2, Data Path)
SslSettings:IgnoreSslErrors true (Standard): Knoten akzeptieren untereinander selbstsignierte Zertifikate
Logging:Console:LogLevel:System.Net.Http.HttpClient.HaClient Warning: keine Zeile je Heartbeat im Log; bei älteren Installationen nachtragen, wenn das Log durch Start processing HTTP request wächst

Suchreihenfolge der my.ini, ausgehend vom übergeordneten Ordner von Bin Path: data\my.cnf, data\my.ini, my.cnf, my.ini.

7.2 Firewall und Dienst

Regelname MariaDB HA Replication (ZeroPortal) :3306, angelegt nur, wenn sie fehlt:

New-NetFirewallRule -DisplayName "MariaDB HA Replication (ZeroPortal) :3306" -Direction Inbound -Protocol TCP -LocalPort 3306 -Action Allow -Profile Domain,Private

Dienstneustart: Dienstnamen MariaDB, MySQL, mariadbd in dieser Reihenfolge, Restart-Service -Force.

7.3 ZDBInstallUpdate

"C:\Program Files\ZeroPortal\ZDBInstallUpdate.exe" "<Pfad>\appsettings.json" --admin-user <user> --admin-password <pw> [--create-app-user] [--repl-password <pw>] [--check] [--force-migrate]
Ausgabe / Exit-Code Bedeutung
NODE_ROLE=Primary / Proxy erkannte Rolle des Knotens
REPLICA_SCHEMA_DEFERRED=1, Exit 19 Replica: ausstehende Schemaänderungen kommen vom Primary; nur knotenlokale Tabellen wurden abgeglichen
LOCAL_TABLES: … Abgleich der knotenlokalen Tabellen
Exit 0 erfolgreich bzw. mit --check auf dem Stand
Exit 13 (nur --check) Schemaänderungen oder Abgleich stehen aus
Exit 18 Schema aktualisiert, aber eine knotenlokale Tabelle konnte nicht abgeglichen werden
--force-migrate Schemaänderungen trotz Replica-Rolle lokal anwenden (nur wenn der Primary verloren ist); danach ist ein Full Sync nötig

7.4 Meldungen und Audit

Meldung Absender Auslöser
Cluster node unreachable / Cluster node reachable again Primary Health-Endpunkt eines Knotens antwortet nicht mehr bzw. wieder
Database replication stopped Primary IO- oder SQL-Thread einer Replica gestoppt, oder IO-Thread länger als 10 min in „Connecting"
Primary not reachable (sent by the replica) / Primary reachable again (sent by the replica) Replica Heartbeat oder weitergeleiteter Schreibvorgang scheitert bzw. gelingt wieder
Failover: this node became Primary beförderter Knoten Beförderung zum Primary

Audit-Einträge: Alert.Raised für jede versandte Meldung, Cluster.PrimaryRecovered mit dem Ausfallfenster.

7.5 PowerShell-Modul und API

Cmdlet Zweck
Get-ZeroPortalHealth [-TargetUrl <url>] Rolle, Knoten-ID, primaryReachable eines Knotens
Get-ZeroPortalReplicationStatus [-TargetUrl <url>] IO/SQL-Zustand, Rückstand, letzter Fehler einer Replica
Get-ZeroPortalClusterNode [-Name <muster>] Knotenliste des verbundenen Knotens
Remove-ZeroPortalClusterNode -NodeId <guid> oder -Name <name> Eintrag aus der Knotenliste entfernen (wie das Papierkorb-Symbol)

Aliasse: Get-ZPClusterNode, Remove-ZPClusterNode. Die Basis-URL setzen Sie vorher mit Set-AppvZeroPortalCmdLetConfiguration.

Route Anmeldung Inhalt
GET /api/health/status keine Rolle, Knoten-ID, primaryReachable (nur Replica)
GET /api/health/replication keine ioRunning, ioConnecting, sqlRunning, lagSeconds, lastError, lastIoError