Skip to main content
Jedna replika využívá pro každou kompilaci CPU jednoho uzlu: na našich testovacích uzlech se 2 vCPU trvalo šest souběžných kompilací třikrát déle než jedna, zatímco ostatní uzly zůstaly nevyužité. Více replik rozkládá uživatele a jejich kompilace mezi uzly. Vychází to z návrhu horizontálního škálování Overleafu, převedeného na Kubernetes:
S3 plánujte od začátku. Instance, která už uchovává soubory na svém svazku, potřebuje nejprve migraci na S3. Toto nastavení nahrazuje Deployment z kroku 5: před aplikací StatefulSetu ho smažte (kubectl delete -f 40-overleaf.yaml).
1

Úložiště S3

Nastavte tři buckety a dva uživatele podle stránky S3, s vaší službou S3 nebo s Garage v clusteru, a čtyři klíče vložte do Secretu overleaf-s3. Konfigurace níže používá příklad s Garage z této stránky.
2

Konfigurace

Tato ConfigMapa nahrazuje 30-config.yaml. Přidává S3 a git-bridge a nasměruje OVERLEAF_SITE_URL na load balancer:
60-config.yaml
3

Repliky

70-overleaf.yaml
  • StatefulSet, ne Deployment. Každá replika dostane stabilní název (overleaf-0, overleaf-1, …), na který odkazuje cookie load balanceru i git-bridge, a OrderedReady nejprve spustí samotný overleaf-0, takže migrace databáze provádí pouze jedna replika.
  • Jedna replika na uzel. Každá replika spouští své kompilace přes Docker svého uzlu a uchovává je v /srv/overleaf-ha svého uzlu.
  • V1_HISTORY_URL pro každou repliku. Každá replika rozdává odkazy na historii se svým vlastním názvem, aby na ně git-bridge mohl dosáhnout.
4

git-bridge

75-git-bridge.yaml
Proč je GIT_BRIDGE_HOST pevná IP adresa, vysvětluje stránka Integrace s Gitem.
5

Load balancer

Konfigurace HAProxy je ukázka Overleafu s pěti změnami: /project/<id>/mcp směrované na overleaf-0 stejně jako /git/ (viz MCP server), prosté HTTP na portu 8080 (image běží jako uživatel bez práv root, který pod containerd nemůže otevřít port 80), servery nalezené přes DNS clusteru (IP adresy podů se mění při každém restartu), DaemonSet, aby odpovídal každý uzel, a balance leastconn místo výchozího roundrobin (viz Otázky a odpovědi níže).
80-haproxy.yaml
externalTrafficPolicy: Local zachovává IP adresy uživatelů v X-Forwarded-For.
6

TLS

Ukončete HTTPS v HAProxy podle stránky TLS proxy a poté v 60-config.yaml nastavte OVERLEAF_SITE_URL na adresu https:// a OVERLEAF_SECURE_COOKIE: "true".

Co očekávat

Testovali jsme tři repliky na třech uzlech, každý se 2 vCPU a 4 GB, s MongoDB, Redisem, Garage, git-bridge a HAProxy na stejných uzlech:
  • 12 uživatelů současně kompilujících 600stránkový dokument: všech 12 zkompilovalo a stáhlo své PDF, 4 uživatelé na repliku; jedno kolo trvalo 8 až 18 sekund. Každému uzlu zůstalo k dispozici nejméně 1,3 GB paměti.
  • Každý uživatel zůstává na jedné replice (cookie server-pro-ha), včetně stahování PDF, které musí pocházet z repliky, jež ho zkompilovala. Totéž platí přes HTTPS, včetně WebSocketu editoru.
  • Když se replika zastaví, její uživatelé dostávají chyby přibližně 15 až 20 sekund, dokud ji HAProxy neoznačí jako nedostupnou; poté přejdou na jinou repliku a zůstanou přihlášeni, protože relace jsou uloženy v Redisu.

Otázky a odpovědi

Odpověď: S ukázkou Overleafu (roundrobin, jedna HAProxy na uzel) se v našem testu 12 nových uživatelů rozdělilo na tři repliky v poměru 8, 3 a 1 a nejvytíženější replika nechala nejpomalejší uživatele čekat 29 sekund. S leastconn, který upřednostňuje repliku s nejmenším počtem otevřených spojení (každý editor drží otevřený WebSocket), dal stejný test 4, 4 a 4 a 18 sekund. Přilepení k replice se nemění: zajišťuje ho cookie.
Odpověď: Ano, pokud směruje podle cookie na stabilní repliku, podporuje WebSockety, povoluje dobu požadavku 10 minut a nahrávání 50 MB, udržuje keep-alive timeout pod 65 sekundami, posílá X-Forwarded-For a X-Forwarded-Proto a posílá /git/ a /project/<id>/mcp na overleaf-0. Směrujte na vlastní názvy replik (overleaf-N.overleaf-hl), nikoli na Service, která rozkládá každý požadavek.
Odpověď: Přidejte uzel s Dockerem a image TeX Live, nastavte replicas: 4 v 70-overleaf.yaml a přidejte do konfigurace HAProxy řádek server overleaf-3 ... (a zvyšte config-hash, aby se HAProxy restartovala).
Naposledy změněno 2. listopadu 2026