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, ogOrderedReadystarteroverleaf-0alene 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_URLper replika. Hver replika deler ut historikklenker med sitt eget navn, slik at git-bridge kan nå dem.
4
git-bridge
75-git-bridge.yaml
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
Hvorfor balance leastconn?
Hvorfor balance leastconn?
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.Kan jeg bruke ingress-kontrolleren min i stedet for HAProxy?
Kan jeg bruke ingress-kontrolleren min i stedet for HAProxy?
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.Hvordan legger jeg til en fjerde replika?
Hvordan legger jeg til en fjerde replika?
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).
