Jeder Eintrag der (optionalen) ticketing.toml lässt sich auch als Umgebungsvariable setzen. Die Priorität ist Umgebungsvariable > ticketing.toml > Standardwert, und bei Schlüsseln/Boolean-Werten wird Groß-/Kleinschreibung nicht unterschieden. Das Docker-Image basiert auf scratch, daher ist die Konfiguration per Umgebungsvariable der Standardweg (um stattdessen eine Konfigurationsdatei zu verwenden, diese mounten und den Pfad über CONFIG angeben).
| Umgebungsvariable | Standardwert | Beschreibung |
|---|---|---|
PORT (SERVER_PORT) | 5225 | TCP-Listen-Port. Im Cluster-Modus ignoriert, stattdessen wird der Port von CLUSTER_SELF verwendet |
DEBUG (SERVER_DEBUG) | je nach Build | Bei 1/true Debug-Log |
SOCKET_BIND | 0.0.0.0 | Listen-Adresse |
SOCKET_NODELAY | true | TCP_NODELAY |
SOCKET_READ_BUF_LEN | 4096 | Lesepuffer pro Verbindung (Bytes) |
SOCKET_REPLY_QUEUE | 1024 | Länge der Antwortwarteschlange pro Verbindung |
SOCKET_REPLY_BATCH | 64 | Maximale Anzahl an Antworten, die in einem write gebündelt gesendet werden |
SWEEP_INTERVAL_SECS | 5 | Bereinigungsintervall für abgelaufene Schlüssel (Sekunden) |
CLUSTER_SELF | (keiner) | Angekündigte Adresse dieses Nodes host:port. Falls gesetzt, Cluster-Modus |
CLUSTER_PEERS | (keiner) | Liste der Node-Adressen (kommagetrennt). Reihenfolge = Promote-Priorität, self inbegriffen, mindestens 2 |
CONFIG | ./conf/ticketing.toml | Pfad der Konfigurationsdatei |
[cluster] (bzw. CLUSTER_*) läuft der Server als Single-Node. Am schnellsten, aber beim Neustart entsteht eine kurze Unterbrechung, und der Zustand liegt im Speicher, geht also beim Neustart verloren (lease dient als Sicherheitsnetz).CLUSTER_PEERS (in Prioritätsreihenfolge) und ein auf sich selbst zeigendes CLUSTER_SELF. Von den lebenden Nodes wird der mit der höchsten Priorität zum Active, die übrigen bleiben als Standby und erhalten die Replikation in Echtzeit. Für die Funktionsweise im Detail siehe Funktionsweise und Protokoll — Server ↔ Server.Für die Kubernetes-Cluster-Bereitstellung werden StatefulSet + Headless Service verwendet. Jeder Pod erhält dadurch einen stabilen DNS-Namen (
ticketing-0.ticketing…,ticketing-1.ticketing…); diese Namen werden in Prioritätsreihenfolge inCLUSTER_PEERSeingetragen, undCLUSTER_SELFjedes Pods wird über die Downward API (metadata.name) automatisch injiziert.
Ctrl+C), promotet der Handoff den Standby, und die Clients wechseln über.sarolab/ticketing · Github: saro-lab/ticketing