1
S3-lager
Opsæt de tre buckets og to brugere som beskrevet i S3 med din S3-tjeneste eller med Garage i clusteret, og læg de fire nøgler i Secret’en
overleaf-s3. Konfigurationen nedenfor bruger Garage-eksemplet fra den side.2
Konfiguration
Denne ConfigMap erstatter
30-config.yaml. Den tilføjer S3 og git-bridge og peger OVERLEAF_SITE_URL på load balanceren:60-config.yaml
3
Replikaer
70-overleaf.yaml
- StatefulSet, ikke Deployment. Hver replika får et stabilt navn (
overleaf-0,overleaf-1, …), som load balancerens cookie og git-bridge henviser til, ogOrderedReadystarter førstoverleaf-0alene, så kun én replika kører databasemigreringerne. - Én replika pr. node. Hver replika starter sine kompileringer via sin nodes Docker og gemmer dem i sin nodes
/srv/overleaf-ha. V1_HISTORY_URLpr. replika. Hver replika udleverer historiklinks med sit eget navn, så git-bridge kan nå dem.
4
git-bridge
75-git-bridge.yaml
GIT_BRIDGE_HOST er en fast IP-adresse.5
Load balancer
HAProxy-konfigurationen er Overleafs eksempel med fem ændringer:
/project/<id>/mcp routes til overleaf-0 ligesom /git/ (se MCP-server), almindelig HTTP på port 8080 (imaget kører som en ikke-root-bruger, der ikke kan binde port 80 under containerd), servere findes via cluster-DNS (pod-IP’er ændres ved hver genstart), et DaemonSet, så hver node svarer, og balance leastconn i stedet for standarden roundrobin (se spørgsmål og svar nedenfor).80-haproxy.yaml
externalTrafficPolicy: Local bevarer brugernes IP-adresser i X-Forwarded-For.6
TLS
Afslut HTTPS i HAProxy som beskrevet i TLS-proxy, og sæt derefter
OVERLEAF_SITE_URL til https://-adressen og OVERLEAF_SECURE_COOKIE: "true" i 60-config.yaml.Hvad du kan forvente
Vi testede tre replikaer på tre noder med hver 2 vCPU’er og 4 GB, med MongoDB, Redis, Garage, git-bridge og HAProxy på de samme noder:- 12 brugere, der kompilerede et dokument på 600 sider samtidig: alle 12 kompilerede og hentede deres PDF, 4 brugere pr. replika; en runde tog 8 til 18 sekunder. Hver node beholdt mindst 1,3 GB ledig hukommelse.
- Hver bruger bliver på én replika (cookie
server-pro-ha), herunder PDF-downloadet, der skal komme fra den replika, der kompilerede det. Det samme gælder over HTTPS, herunder editorens WebSocket. - Når en replika stopper, får dens brugere fejl i omkring 15 til 20 sekunder, indtil HAProxy markerer den som nede; derefter flyttes de til en anden replika og forbliver logget ind, fordi sessioner ligger i Redis.
Spørgsmål og svar
Hvorfor balance leastconn?
Hvorfor balance leastconn?
Svar: Med Overleafs eksempel (
roundrobin, én HAProxy pr. node) endte 12 nye brugere med at fordele sig med 8, 3 og 1 på de tre replikaer i vores test, og den travleste replika fik de langsomste brugere til at vente 29 sekunder. Med leastconn, der foretrækker replikaen med færrest åbne forbindelser (hver editor holder en WebSocket åben), gav den samme test 4, 4 og 4 og 18 sekunder. Stickiness er uændret: den kommer fra cookien.Kan jeg bruge min ingress-controller i stedet for HAProxy?
Kan jeg bruge min ingress-controller i stedet for HAProxy?
Svar: Ja, hvis den router via en cookie til en stabil replika, understøtter WebSockets, tillader forespørgselstider på 10 minutter og uploads på 50 MB, holder sin keep-alive-timeout under 65 sekunder, sender
X-Forwarded-For og X-Forwarded-Proto og sender /git/ og /project/<id>/mcp til overleaf-0. Route til replikaernes egne navne (overleaf-N.overleaf-hl), ikke til en Service, der fordeler hver forespørgsel.Hvordan tilføjer jeg en fjerde replika?
Hvordan tilføjer jeg en fjerde replika?
Svar: Tilføj en node med Docker og TeX Live-imagesene, sæt
replicas: 4 i 70-overleaf.yaml, og tilføj en linje server overleaf-3 ... til HAProxy-konfigurationen (og forøg config-hash, så HAProxy genstarter).
