1
S3-opslag
Richt de drie buckets en twee gebruikers in zoals beschreven in S3, met je eigen S3-service of met Garage in het cluster, en zet de vier sleutels in de Secret
overleaf-s3. De configuratie hieronder gebruikt het Garage-voorbeeld van die pagina.2
Configuratie
Deze ConfigMap vervangt
30-config.yaml. Hij voegt S3 en git-bridge toe en laat OVERLEAF_SITE_URL naar de load balancer verwijzen:60-config.yaml
3
Replica's
70-overleaf.yaml
- StatefulSet, geen Deployment. Elke replica krijgt een stabiele naam (
overleaf-0,overleaf-1, …) waarnaar de cookie van de load balancer en git-bridge verwijzen, enOrderedReadystart eerstoverleaf-0alleen, zodat slechts één replica de databasemigraties uitvoert. - Eén replica per node. Elke replica start zijn compilaties via de Docker van zijn node en bewaart ze in
/srv/overleaf-havan zijn node. V1_HISTORY_URLper replica. Elke replica deelt geschiedenislinks uit met zijn eigen naam, zodat git-bridge ze kan bereiken.
4
git-bridge
75-git-bridge.yaml
GIT_BRIDGE_HOST een vast IP-adres is.5
Load balancer
De HAProxy-configuratie is het voorbeeld van Overleaf met vijf wijzigingen:
/project/<id>/mcp wordt net als /git/ naar overleaf-0 gerouteerd (zie MCP-server), gewone HTTP op poort 8080 (de image draait als niet-rootgebruiker, die onder containerd poort 80 niet kan binden), servers worden gevonden via cluster-DNS (pod-IP’s veranderen bij elke herstart), een DaemonSet zodat elke node antwoordt, en balance leastconn in plaats van de standaard roundrobin (zie de vragen en antwoorden hieronder).80-haproxy.yaml
externalTrafficPolicy: Local behoudt de IP-adressen van de gebruikers in X-Forwarded-For.6
TLS
Beëindig HTTPS in HAProxy zoals beschreven in TLS-proxy, en stel daarna in
60-config.yaml OVERLEAF_SITE_URL in op het https://-adres en OVERLEAF_SECURE_COOKIE: "true".Wat je kunt verwachten
We hebben drie replica’s getest op drie nodes met elk 2 vCPU’s en 4 GB, met MongoDB, Redis, Garage, git-bridge en HAProxy op dezelfde nodes:- 12 gebruikers die tegelijkertijd een document van 600 pagina’s compileren: alle 12 compileerden en haalden hun pdf op, 4 gebruikers per replica; een ronde duurde 8 tot 18 seconden. Elke node hield ten minste 1,3 GB geheugen beschikbaar.
- Elke gebruiker blijft op één replica (cookie
server-pro-ha), inclusief de pdf-download die moet komen van de replica die hem heeft gecompileerd. Hetzelfde geldt via HTTPS, inclusief de WebSocket van de editor. - Wanneer een replica stopt, krijgen zijn gebruikers ongeveer 15 tot 20 seconden lang fouten, totdat HAProxy hem als down markeert; daarna gaan ze naar een andere replica en blijven ze ingelogd, omdat sessies in Redis staan.
Vragen en antwoorden
Waarom balance leastconn?
Waarom balance leastconn?
Antwoord: Met het voorbeeld van Overleaf (
roundrobin, één HAProxy per node) kwamen 12 nieuwe gebruikers in onze test terecht als 8, 3 en 1 op de drie replica’s, en liet de drukste replica de traagste gebruikers 29 seconden wachten. Met leastconn, dat de replica met de minste open verbindingen verkiest (elke editor houdt een WebSocket open), gaf dezelfde test 4, 4 en 4 en 18 seconden. De stickiness blijft ongewijzigd: die komt van de cookie.Kan ik mijn ingress-controller gebruiken in plaats van HAProxy?
Kan ik mijn ingress-controller gebruiken in plaats van HAProxy?
Antwoord: Ja, als deze op basis van een cookie naar een stabiele replica routeert, WebSockets ondersteunt, verzoektijden van 10 minuten en uploads van 50 MB toestaat, de keep-alive-time-out onder 65 seconden houdt,
X-Forwarded-For en X-Forwarded-Proto meestuurt, en /git/ en /project/<id>/mcp naar overleaf-0 stuurt. Routeer naar de eigen namen van de replica’s (overleaf-N.overleaf-hl), niet naar een Service die elk verzoek verdeelt.Hoe voeg ik een vierde replica toe?
Hoe voeg ik een vierde replica toe?
Antwoord: Voeg een node toe met Docker en de TeX Live-images, stel
replicas: 4 in in 70-overleaf.yaml, en voeg een regel server overleaf-3 ... toe aan de HAProxy-configuratie (en verhoog config-hash zodat HAProxy herstart).
