Discourse HA-Einrichtung in einer isolierten Netzwerkumgebung

Vielen Dank im Voraus.
Ich plane, Discourse mit hoher Verfügbarkeit in einer Produktionsumgebung einzurichten. Unten sind mein Designplan und einige Umgebungsbedingungen aufgeführt.

  1. Einrichtung mit 3 Anwendungsservern und 2 Postgres-DB-Servern. Immer ein PG-Server im Schreibmodus und ein weiterer im schreibgeschützten Modus.

  2. Diese 3 Anwendungsserver werden auf denselben DB-Server zeigen.

  3. Jede DB-Instanz sollte jeweils nur Lese- und Schreibvorgänge bedienen.

  4. Produktionsserver haben keine Internetverbindung, aber ich kann DockerHub-Images herunterladen.

  5. Wir haben unseren eigenen GitLab-Server.

  6. Ist es möglich, ein Docker-Image zu bootstrappen und dieses Image auf mehreren Servern zu verwenden?

Bitte helfen Sie mir bei der Einrichtung. Wenn Sie Links oder Vorschläge haben, senden Sie mir bitte eine private Nachricht.

2 „Gefällt mir“

Nachdem Sie ./launcher bootstrap app irgendwo ausgeführt haben, müssen Sie das resultierende Container-Image speichern (normalerweise durch Hochladen in eine Registry) und es dann auf Ihren drei Anwendungsservern herunterladen und ausführen.

Sie benötigen außerdem einen zentralen Redis-Server (und möglicherweise Replikate dafür). Ihnen fehlt auch ein Load Balancer, um Anfragen an die verschiedenen Anwendungsserver zu leiten.

3 „Gefällt mir“

Danke für die Antwort @Falco

Wir verwenden HAProxy Load Balancer und Nexus Repo zum Speichern von Artefakten.

1 „Gefällt mir“

Hallo @Falco
In meiner Produktionsumgebung habe ich keinen Internetzugang. Daher plane ich, den Bootstrap auf einer internetfähigen Maschine durchzuführen und dieses Bootstrap-Image dann auf die Produktionsserver zu übertragen. Während dieses Vorgangs auf der Produktions-VM kommt der Container nicht hoch, da der Unicorn-Server nach einer übergeordneten Prozess-ID sucht und daher nicht läuft.

Können Sie mir hier bitte helfen? Muss ich das durchgeführte Bootstrap-Verzeichnis /var/discourse auf den Produktionsserver kopieren?

Was ist „dies“? Das Bootstrapping oder das Ausführen des zuvor gebootstrappten Container-Images?

1 „Gefällt mir“

Wenn ich das zuvor gebootstrappte Container-Image ausführe

Wie haben Sie das Bild gespeichert und auf den Produktionsserver exportiert?

Wie genau versuchen Sie, dieses gespeicherte Bild in der Produktion auszuführen?

1 „Gefällt mir“

zuvor erstelltes Image, das in das Nexus-Repository gepusht wird, und aus dem Nexus-Repository, das auf dem Produktionsserver abgerufen wird.

docker run-Befehl, der aus ./launcher start-cmd app generiert wird, und Ausführung desselben Befehls auf dem Produktionsserver.

1 „Gefällt mir“

Können Sie die Fehlerprotokolle beim Starten unter Produktion teilen?

run-parts: /etc/runit/1.d/00-ensure-links wird ausgeführt
run-parts: /etc/runit/1.d/00-fix-var-logs wird ausgeführt
run-parts: /etc/runit/1.d/01-cleanup-web-pids wird ausgeführt
run-parts: /etc/runit/1.d/anacron wird ausgeführt
run-parts: /etc/runit/1.d/cleanup-pids wird ausgeführt
Bereinige veraltete PID-Dateien
run-parts: /etc/runit/1.d/copy-env wird ausgeführt
runsvdir gestartet, PID ist 42
chgrp: ungültige Gruppe: „syslog“
ok: run: redis: (pid 51) 0s
ok: run: postgres: (pid 56) 0s
supervisor-PID: 53 unicorn-PID: 75
config/unicorn_launcher: Zeile 71: kill: (75) – Kein solcher Prozess
config/unicorn_launcher: Zeile 15: kill: (75) – Kein solcher Prozess
(53) wird beendet
ok: run: redis: (pid 51) 7s
ok: run: postgres: (pid 101) 0s
supervisor-PID: 96 unicorn-PID: 103
config/unicorn_launcher: Zeile 71: kill: (103) – Kein solcher Prozess
config/unicorn_launcher: Zeile 15: kill: (103) – Kein solcher Prozess
(96) wird beendet
ok: run: redis: (pid 51) 14s
ok: run: postgres: (pid 127) 0s
supervisor-PID: 120 unicorn-PID: 129
config/unicorn_launcher: Zeile 71: kill: (129) – Kein solcher Prozess
config/unicorn_launcher: Zeile 15: kill: (129) – Kein solcher Prozess
(120) wird beendet
ok: run: redis: (pid 51) 22s
timeout: down: postgres: 0s, normalerweise up, want up
ok: run: redis: (pid 51) 30s
timeout: down: postgres: 1s, normalerweise up, want up
ok: run: redis: (pid 51) 37s
ok: run: postgres: (pid 174) 0s
supervisor-PID: 165 unicorn-PID: 176
config/unicorn_launcher: Zeile 71: kill: (176) – Kein solcher Prozess
config/unicorn_launcher: Zeile 15: kill: (176) – Kein solcher Prozess
(165) wird beendet
ok: run: redis: (pid 51) 48s
ok: run: postgres: (pid 196) 1s
supervisor-PID: 191 unicorn-PID: 198
config/unicorn_launcher: Zeile 71: kill: (198) – Kein solcher Prozess
config/unicorn_launcher: Zeile 15: kill: (198) – Kein solcher Prozess
(191) wird beendet
ok: run: redis: (pid 51) 54s
timeout: down: postgres: 1s, normalerweise up, want up

Verwenden Sie eine externe PostgreSQL-, Redis- und Objektspeicherlösung? Dies ist für Hochverfügbarkeit (HA) zu erwarten, und sowohl Ihre Produktionsserver als auch die Build-Server müssen Zugriff auf diese externen Dienste haben.

Nur zum Testen des Szenarios, Bootstrap auf einem Server und Ausführen eines bootstrapped Container-Images auf einem anderen Server mit Standalone-Setup.

Das ist ein sicherer Weg, der nicht funktionieren wird.

Gibt es einen Grund, Objektspeicher zu erwähnen? Können wir nicht den internen Speicher des Servers verwenden?

Muss im HA-Setup das Discourse-Bootstrap-Verzeichnis auf allen App-Servern kopiert werden?

Wie werden Sie mehrere App-Server und Benutzer-Uploads handhaben? Ein gemeinsam genutztes Netzwerklaufwerk zwischen allen Servern? Das mag funktionieren, aber unsere offizielle Lösung dafür ist Object Storage mit der S3-API.

Das ist nicht nötig, solange Sie

Ja, ich verwende einen externen Postgres-Server und einen Redis-Cluster

3 App-Server, die für den Redis-Cluster zusammen mit der Anwendung verwendet werden.

Ich muss also ein gemeinsames Verzeichnis/Speicher für das Discourse-Build-Verzeichnis verwenden. Danke @Falco, jetzt ist es für mich klar.

Entschuldigung, dass ich Sie belästige, @Falco, ich habe noch eine letzte Frage.

Beeinflusst die Wiederherstellung vorhandene Daten in der Postgres-Datenbank? Wenn ja, wie kann damit umgegangen werden?

Ja, es gibt Migrationen, die während eines Rebuilds ausgeführt werden und sowohl Daten als auch Strukturen ändern.

In einer HA-Umgebung müssen Sie die hier gegebenen Anleitungen befolgen: Introducing Post Deployment Migration

1 „Gefällt mir“

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.