1
S3-Speicher
Richten Sie die drei Buckets und zwei Benutzer wie unter S3 beschrieben ein, mit Ihrem S3-Dienst oder mit Garage im Cluster, und tragen Sie die vier Schlüssel in das Secret
overleaf-s3 ein. Die folgende Konfiguration verwendet das Garage-Beispiel von dieser Seite.2
Konfiguration
Diese ConfigMap ersetzt
30-config.yaml. Sie fügt S3 und git-bridge hinzu und richtet OVERLEAF_SITE_URL auf den Load Balancer:60-config.yaml
3
Replikate
70-overleaf.yaml
- StatefulSet, nicht Deployment. Jedes Replikat erhält einen stabilen Namen (
overleaf-0,overleaf-1, …), auf den sich das Load-Balancer-Cookie und git-bridge beziehen, undOrderedReadystartet zuerstoverleaf-0allein, sodass nur ein Replikat die Datenbankmigrationen ausführt. - Ein Replikat pro Knoten. Jedes Replikat startet seine Kompilierungen über das Docker seines Knotens und speichert sie in
/srv/overleaf-haseines Knotens. V1_HISTORY_URLpro Replikat. Jedes Replikat gibt Verlaufslinks mit seinem eigenen Namen aus, damit git-bridge sie erreichen kann.
4
git-bridge
75-git-bridge.yaml
GIT_BRIDGE_HOST eine feste IP-Adresse ist.5
Load Balancer
Die HAProxy-Konfiguration ist Overleafs Beispiel mit fünf Änderungen:
/project/<id>/mcp wird wie /git/ an overleaf-0 geleitet (siehe MCP-Server), einfaches HTTP auf Port 8080 (das Image läuft als Nicht-Root-Benutzer, der unter containerd Port 80 nicht binden kann), Server werden über das Cluster-DNS gefunden (Pod-IPs ändern sich bei jedem Neustart), ein DaemonSet, damit jeder Knoten antwortet, und balance leastconn statt des Standards roundrobin (siehe Q&A unten).80-haproxy.yaml
externalTrafficPolicy: Local behält die IP-Adressen der Benutzer in X-Forwarded-For bei.6
TLS
Terminieren Sie HTTPS in HAProxy wie unter TLS-Proxy beschrieben und setzen Sie dann in
60-config.yaml OVERLEAF_SITE_URL auf die https://-Adresse sowie OVERLEAF_SECURE_COOKIE: "true".Was Sie erwarten können
Wir haben drei Replikate auf drei Knoten mit jeweils 2 vCPUs und 4 GB getestet, mit MongoDB, Redis, Garage, git-bridge und HAProxy auf denselben Knoten:- 12 Benutzer, die gleichzeitig ein 600-seitiges Dokument kompilieren: Alle 12 kompilierten und luden ihr PDF ab, 4 Benutzer pro Replikat; eine Runde dauerte 8 bis 18 Sekunden. Auf jedem Knoten blieben mindestens 1,3 GB Arbeitsspeicher verfügbar.
- Jeder Benutzer bleibt auf einem Replikat (Cookie
server-pro-ha), einschließlich des PDF-Downloads, der von dem Replikat kommen muss, das kompiliert hat. Dasselbe gilt über HTTPS, einschließlich des WebSockets des Editors. - Wenn ein Replikat stoppt, erhalten seine Benutzer etwa 15 bis 20 Sekunden lang Fehler, bis HAProxy es als ausgefallen markiert; dann wechseln sie zu einem anderen Replikat und bleiben angemeldet, da die Sitzungen in Redis liegen.
Q&A
Warum balance leastconn?
Warum balance leastconn?
Antwort: Mit Overleafs Beispiel (
roundrobin, ein HAProxy pro Knoten) verteilten sich in unserem Test 12 neue Benutzer mit 8, 3 und 1 auf die drei Replikate, und das am stärksten ausgelastete Replikat ließ die langsamsten Benutzer 29 Sekunden warten. Mit leastconn, das das Replikat mit den wenigsten offenen Verbindungen bevorzugt (jeder Editor hält einen WebSocket offen), ergab derselbe Test 4, 4 und 4 sowie 18 Sekunden. Die Sticky Sessions bleiben unverändert: Sie beruhen auf dem Cookie.Kann ich statt HAProxy meinen Ingress-Controller verwenden?
Kann ich statt HAProxy meinen Ingress-Controller verwenden?
Antwort: Ja, sofern er per Cookie an ein stabiles Replikat routet, WebSockets unterstützt, Anfragezeiten von 10 Minuten und Uploads von 50 MB erlaubt, sein Keep-Alive-Timeout unter 65 Sekunden hält,
X-Forwarded-For und X-Forwarded-Proto sendet und /git/ sowie /project/<id>/mcp an overleaf-0 leitet. Routen Sie zu den eigenen Namen der Replikate (overleaf-N.overleaf-hl), nicht zu einem Service, der jede Anfrage verteilt.Wie füge ich ein viertes Replikat hinzu?
Wie füge ich ein viertes Replikat hinzu?
Antwort: Fügen Sie einen Knoten mit Docker und den TeX-Live-Images hinzu, setzen Sie
replicas: 4 in 70-overleaf.yaml und fügen Sie der HAProxy-Konfiguration eine Zeile server overleaf-3 ... hinzu (und erhöhen Sie config-hash, damit HAProxy neu startet).
