Zum Inhalt springen

Testcluster

Der Aufbau unter test/ startet vier identische Cloud-Knoten gegen eine gemeinsame YugabyteDB und einen Valkey. Damit lässt sich lokal prüfen, was ein Einzelprozess nicht zeigt: geteilte Sessions, konkurrierende Hintergrundjobs, Migration im Verbund.

┌── node1 :8481 ┐
YugabyteDB :5433 ────┼── node2 :8482 ┤ gemeinsamer DNSE_ENCRYPTION_KEY,
(YSQL / PG-Wire) ├── node3 :8483 ┤ gleicher DSN, gemeinsamer Valkey
Valkey :6379 ─────┴── node4 :8484 ┘
  1. test/.env anlegen und den Verschlüsselungsschlüssel setzen:

    Terminal-Fenster
    cp test/.env.example test/.env
    sed -i '' "s/^DNSE_ENCRYPTION_KEY=.*/DNSE_ENCRYPTION_KEY=$(openssl rand -hex 32)/" test/.env
  2. test/gitlab_token.txt — ein Token für gitlab.techeve.de, nur während des Build-Schritts benötigt (privates ORM++-Modul). Eine Zeile, nur das Token:

    Terminal-Fenster
    printf 'protocol=https\nhost=gitlab.techeve.de\n' | git credential fill \
    | sed -n 's/^password=//p' > test/gitlab_token.txt

Beide Dateien sind gitignored.

Aus dem Verzeichnis test/:

Terminal-Fenster
docker compose -f docker-compose.test.yml up --build # starten
docker compose -f docker-compose.test.yml logs -f node1 # Logs eines Knotens
docker compose -f docker-compose.test.yml down -v # stoppen + DB verwerfen

Oder per Makefile eine Ebene höher:

Terminal-Fenster
make test-cluster-up # bauen + starten (detached)
make test-cluster-logs # node1 verfolgen
make test-cluster-down # stoppen, DB-Volume entfernen

Standardmäßig wird der große Demo-Datensatz angelegt (DNSE_DEMO=on): rund zehn Organisationen über alle Tarife und Regionen, ~39 Benutzer, dazu je Organisation Projekte, Zonen mit Record Sets, Sync Groups, Templates, Quellen, DynDNS-Ziele, selbstsignierte Zertifikate, Teams und eine Auswahl an Provider-Accounts (nur der Demo-Provider antwortet; die übrigen zeigen die Kontoliste in den Zuständen Auth-Fehler und nicht erreichbar).

Anmeldungen: admin@<org>.example mit demo-<org>-pw — Organisationen sind acme, globex, initech, umbrella, hooli, piedpiper, wayne, stark, wonka, cyberdyne. Für einen leeren Cluster DNSE_DEMO=off in test/.env setzen.

  • Gleiche Konfiguration auf allen Knoten über einen YAML-Anker; der Verschlüsselungsschlüssel ist identisch, damit verschlüsselte Werte auf jedem Knoten lesbar sind.
  • YugabyteDB-Treiber: DNSE_DB_DSN zeigt auf den YSQL-Endpunkt, DNSE_DB_YB=on wählt den passenden Treiber.
  • Gestaffelter Start: node1 wartet auf eine gesunde Datenbank und führt die Migration aus; node2–4 warten, bis node1 gesund ist.
  • Gemeinsamer Valkey für Sessions — eine Anmeldung auf einem Knoten gilt auf allen.
  • Der Aufbau zeigt Mehrknotenbetrieb gegen die verteilte Datenbank. Echte Multi-Region-Partitionierung ist nicht aktiviert: Die konfigurierten Regionen steuern die System-Seite und die Heimat-Region je Organisation, die Daten liegen aber alle im selben Cluster.
  • Das Image baut ein vollständig statisches Binary (CGO_ENABLED=0) mit eingebetteter CE-Oberfläche aus DNS-Editor-CE/webui/dist. Ist die Oberfläche veraltet, vorher bauen: cd ../../DNS-Editor-CE/ui && npm run build.
  • YugabyteDB läuft mit Standardbenutzer und Trust-Authentifizierung — in Ordnung für einen lokalen Prüfstand, nicht für Produktion.