Skip to main content
Én replika bruker CPU-en til én node for hver kompilering: på testnodene våre med 2 vCPU-er tok seks samtidige kompileringer tre ganger så lang tid som én, mens de andre nodene sto ubrukt. Flere replikaer fordeler brukerne, og kompileringene deres, over nodene. Dette følger Overleafs design for Horisontal skalering, oversatt til Kubernetes:
Planlegg S3 fra starten. En instans som allerede lagrer filer på volumet sitt, trenger først S3-migreringen. Dette oppsettet erstatter Deployment-en fra trinn 5: slett den (kubectl delete -f 40-overleaf.yaml) før du bruker StatefulSet-en.
1

S3-lagring

Sett opp de tre bøttene og de to brukerne som beskrevet i S3, med din S3-tjeneste eller med Garage i klyngen, og legg de fire nøklene inn i Secret-en overleaf-s3. Konfigurasjonen nedenfor bruker Garage-eksemplet fra den siden.
2

Konfigurasjon

Denne ConfigMap-en erstatter 30-config.yaml. Den legger til S3 og git-bridge og peker OVERLEAF_SITE_URL mot lastbalansereren:
60-config.yaml
3

Replikaer

70-overleaf.yaml
  • StatefulSet, ikke Deployment. Hver replika får et stabilt navn (overleaf-0, overleaf-1, …) som lastbalanserer-informasjonskapselen og git-bridge henviser til, og OrderedReady starter overleaf-0 alene først, slik at bare én replika kjører databasemigreringene.
  • Én replika per node. Hver replika starter kompileringene sine via nodens Docker og holder dem i nodens /srv/overleaf-ha.
  • V1_HISTORY_URL per replika. Hver replika deler ut historikklenker med sitt eget navn, slik at git-bridge kan nå dem.
4

git-bridge

75-git-bridge.yaml
Se Git-integrasjon for hvorfor GIT_BRIDGE_HOST er en fast IP-adresse.
5

Lastbalanserer

HAProxy-konfigurasjonen er Overleafs eksempel med fem endringer: /project/<id>/mcp rutet til overleaf-0 som /git/ (se MCP-server), vanlig HTTP på port 8080 (imaget kjører som en ikke-root-bruker, som ikke kan binde port 80 under containerd), servere funnet via klynge-DNS (pod-IP-er endres ved hver omstart), en DaemonSet slik at hver node svarer, og balance leastconn i stedet for standarden roundrobin (se Q&A nedenfor).
80-haproxy.yaml
externalTrafficPolicy: Local beholder brukernes IP-adresser i X-Forwarded-For.
6

TLS

Terminer HTTPS i HAProxy som beskrevet i TLS-proxy, og sett deretter OVERLEAF_SITE_URL til https://-adressen og OVERLEAF_SECURE_COOKIE: "true" i 60-config.yaml.

Hva du kan forvente

Vi testet tre replikaer på tre noder med 2 vCPU-er og 4 GB hver, med MongoDB, Redis, Garage, git-bridge og HAProxy på de samme nodene:
  • 12 brukere som kompilerte et dokument på 600 sider samtidig: alle 12 kompilerte og hentet PDF-en sin, 4 brukere per replika; en runde tok 8 til 18 sekunder. Hver node beholdt minst 1,3 GB tilgjengelig minne.
  • Hver bruker blir på én replika (informasjonskapselen server-pro-ha), inkludert PDF-nedlastingen som må komme fra replikaen som kompilerte den. Det samme gjelder over HTTPS, inkludert editorens WebSocket.
  • Når en replika stopper, får brukerne dens feil i omtrent 15 til 20 sekunder, til HAProxy markerer den som nede; deretter flyttes de til en annen replika og forblir innlogget, fordi sesjonene ligger i Redis.

Q&A

Svar: Med Overleafs eksempel (roundrobin, én HAProxy per node) endte 12 nye brukere opp fordelt 8, 3 og 1 på de tre replikaene i testen vår, og den travleste replikaen fikk de tregeste brukerne til å vente i 29 sekunder. Med leastconn, som foretrekker replikaen med færrest åpne tilkoblinger (hver editor holder en WebSocket åpen), ga den samme testen 4, 4 og 4 og 18 sekunder. Sticky-oppførselen er uendret: den kommer fra informasjonskapselen.
Svar: Ja, hvis den ruter etter en informasjonskapsel til en stabil replika, støtter WebSockets, tillater forespørselstider på 10 minutter og opplastinger på 50 MB, holder keep-alive-tidsavbruddet under 65 sekunder, sender X-Forwarded-For og X-Forwarded-Proto, og sender /git/ og /project/<id>/mcp til overleaf-0. Rut til replikaenes egne navn (overleaf-N.overleaf-hl), ikke til en Service som lastbalanserer hver forespørsel.
Svar: Legg til en node med Docker og TeX Live-imagene, sett replicas: 4 i 70-overleaf.yaml, og legg til en server overleaf-3 ...-linje i HAProxy-konfigurasjonen (og øk config-hash slik at HAProxy starter på nytt).
Sist endret 2. november 2026