1
S3-lagring
Konfigurera de tre buckets och två användare som beskrivs i S3, med din S3-tjänst eller med Garage i klustret, och lägg de fyra nycklarna i Secret
overleaf-s3. Konfigurationen nedan använder Garage-exemplet från den sidan.2
Konfiguration
Den här ConfigMap ersätter
30-config.yaml. Den lägger till S3 och git-bridge och pekar OVERLEAF_SITE_URL mot lastbalanseraren:60-config.yaml
3
Repliker
70-overleaf.yaml
- StatefulSet, inte Deployment. Varje replik får ett stabilt namn (
overleaf-0,overleaf-1, …) som lastbalanserarens cookie och git-bridge hänvisar till, ochOrderedReadystartaroverleaf-0ensam först, så att bara en replik kör databasmigreringarna. - En replik per nod. Varje replik startar sina kompileringar via sin nods Docker och sparar dem i sin nods
/srv/overleaf-ha. V1_HISTORY_URLper replik. Varje replik delar ut historiklänkar med sitt eget namn, så att git-bridge kan nå dem.
4
git-bridge
75-git-bridge.yaml
GIT_BRIDGE_HOST är en fast IP-adress.5
Lastbalanserare
HAProxy-konfigurationen är Overleafs exempel med fem ändringar:
/project/<id>/mcp dirigeras till overleaf-0 precis som /git/ (se MCP-server), vanlig HTTP på port 8080 (avbildningen körs som en användare som inte är root, vilken inte kan binda port 80 under containerd), servrar som hittas via kluster-DNS (poddarnas IP-adresser ändras vid varje omstart), en DaemonSet så att varje nod svarar, och balance leastconn i stället för standardvärdet roundrobin (se Frågor och svar nedan).80-haproxy.yaml
externalTrafficPolicy: Local behåller användarnas IP-adresser i X-Forwarded-For.6
TLS
Avsluta HTTPS i HAProxy enligt beskrivningen i TLS-proxy och sätt sedan
OVERLEAF_SITE_URL till https://-adressen och OVERLEAF_SECURE_COOKIE: "true" i 60-config.yaml.Vad du kan förvänta dig
Vi testade tre repliker på tre noder med 2 vCPU:er och 4 GB vardera, med MongoDB, Redis, Garage, git-bridge och HAProxy på samma noder:- 12 användare som kompilerade ett 600-sidigt dokument samtidigt: alla 12 kompilerade och hämtade sin PDF, 4 användare per replik; en omgång tog 8 till 18 sekunder. Varje nod hade minst 1,3 GB minne tillgängligt.
- Varje användare stannar på en replik (cookie
server-pro-ha), inklusive PDF-nedladdningen som måste komma från repliken som kompilerade den. Detsamma gäller över HTTPS, inklusive redigerarens WebSocket. - När en replik stoppas får dess användare fel i ungefär 15 till 20 sekunder, tills HAProxy markerar den som nere; sedan flyttas de till en annan replik och förblir inloggade, eftersom sessionerna finns i Redis.
Frågor och svar
Varför balance leastconn?
Varför balance leastconn?
Svar: Med Overleafs exempel (
roundrobin, en HAProxy per nod) fördelades 12 nya användare som 8, 3 och 1 på de tre replikerna i vårt test, och den mest belastade repliken fick de långsammaste användarna att vänta 29 sekunder. Med leastconn, som föredrar repliken med minst antal öppna anslutningar (varje redigerare håller en WebSocket öppen), gav samma test 4, 4 och 4 och 18 sekunder. Sessionsbindningen (stickiness) är oförändrad: den kommer från cookien.Kan jag använda min ingress-controller i stället för HAProxy?
Kan jag använda min ingress-controller i stället för HAProxy?
Svar: Ja, om den dirigerar via en cookie till en stabil replik, stöder WebSockets, tillåter förfrågningstider på 10 minuter och uppladdningar på 50 MB, håller sin keep-alive-timeout under 65 sekunder, skickar
X-Forwarded-For och X-Forwarded-Proto, och skickar /git/ och /project/<id>/mcp till overleaf-0. Dirigera till replikernas egna namn (overleaf-N.overleaf-hl), inte till en Service som lastbalanserar varje förfrågan.Hur lägger jag till en fjärde replik?
Hur lägger jag till en fjärde replik?
Svar: Lägg till en nod med Docker och TeX Live-avbildningarna, sätt
replicas: 4 i 70-overleaf.yaml och lägg till en rad server overleaf-3 ... i HAProxy-konfigurationen (och öka config-hash så att HAProxy startas om).
