Zum Inhalt springen

Clusterbetrieb

Die Cloud-Variante läuft als mehrere identische Knoten hinter einem Loadbalancer. Drei Dinge müssen dafür geteilt werden.

Alle Knoten sprechen dieselbe Datenbank. Für den verteilten Betrieb ist das YugabyteDB (PostgreSQL-Protokoll, verteilte Ablage):

Terminal-Fenster
DNSE_DB_DSN=postgres://yugabyte@yb:5433/yugabyte
DNSE_DB_YB=on

Ohne DNSE_DB_YB=on wird die Verbindung als gewöhnliches PostgreSQL behandelt — der YugabyteDB-eigene Treiber bliebe ungenutzt.

Die Schema-Migration läuft beim Start. Sie soll einmal laufen: Beim Hochfahren eines frischen Clusters startet ein Knoten zuerst, die übrigen folgen, sobald er gesund ist.

Alle Knoten brauchen denselben DNSE_ENCRYPTION_KEY. Sonst kann Knoten 2 nicht lesen, was Knoten 1 verschlüsselt geschrieben hat — Provider-Zugangsdaten wären je nach angefragtem Knoten kaputt.

Terminal-Fenster
DNSE_VALKEY_ADDR=valkey:6379
DNSE_VALKEY_PASSWORD=… # optional

Ohne Valkey lägen Sessions im Speicher des jeweiligen Prozesses: Eine Anmeldung auf Knoten 1 wäre auf Knoten 2 unbekannt, und der Benutzer flöge bei jedem Wechsel des Loadbalancers heraus. Mit Valkey gilt eine Session überall — für Mandanten- und Operator-Anmeldungen — und ein Logout wirkt sofort auf allen Knoten.

Valkey wird bewusst nicht gesichert: Sessions bedeuten im schlimmsten Fall eine neue Anmeldung, der dauerhafte Zustand liegt in der Datenbank.

Wie lange eine Anmeldung gilt und wie oft ihre Gültigkeit fortgeschrieben wird, steht in der Region-Konfiguration (session.ttl_hours, session.touch_interval_minutes) — siehe Regionenkatalog.

Mit mehreren Regionen wird aus der einen Instanz ein Cluster, und DNSE_VALKEY_ADDR nennt mehrere Adressen:

Terminal-Fenster
DNSE_VALKEY_ADDR=vk-eu:6379,vk-na:6379,vk-apac:6379
DNSE_REGION=eu-central # bestimmt, wo Anmeldungen dieses Knotens liegen

Jede Sitzung gehört der Region, in der sie entstand. Der Token trägt das sichtbar (eu-central~…), und der Speicherschlüssel bekommt die Region als Hash-Tag:

dnse:session:{eu-central}:eu-central~9f3a…

Alles in geschweiften Klammern bestimmt den Abschnitt (Slot). Damit liegen alle Sitzungen einer Region beisammen — und Schreibvorgänge landen von selbst beim Besitzer, weil der Client die Slot-Karte kennt. Ein Abmelden in einer fremden Region wirkt deshalb sofort und überall; gelesen wird trotzdem ortsnah, weil der Client unter den Knoten eines Slots den nächstgelegenen wählt.

Zwei Betriebsvorgaben gehören dazu, weil der Cluster-Bus hier über das WAN läuft: tls-cluster yes (oder ein Tunnel) — sonst liegen Sitzungen zwischen den Regionen im Klartext — und ein cluster-node-timeout, das an der tatsächlichen Laufzeit zwischen den Regionen gemessen und eher großzügig gesetzt ist. Sonst löst jede Delle in der Leitung eine Übernahme aus.

Bestehende Anmeldungen ohne Regionsmarke laufen unverändert weiter; sie behalten ihren alten Schlüssel und laufen von selbst aus. Eine Wanderung ist nicht nötig.

Drift-Abgleich, Zertifikatsausstellung, Ablauf-Erinnerungen, Backup-Exporte und die Umzugs-Prüfung laufen als geplante Jobs. Jeder Knoten kann sie ausführen; ein Lease sorgt dafür, dass zu einer Zeit nur einer an einem Job arbeitet.

Für lokale Versuche gibt es einen fertigen Vier-Knoten-Aufbau mit YugabyteDB und Valkey: Testcluster.