1
Magazyn S3
Skonfiguruj trzy buckety i dwóch użytkowników zgodnie z opisem w S3, przy użyciu swojej usługi S3 lub Garage w klastrze, i umieść cztery klucze w Secret
overleaf-s3. Poniższa konfiguracja korzysta z przykładu Garage z tamtej strony.2
Konfiguracja
Ten ConfigMap zastępuje
30-config.yaml. Dodaje S3 i git-bridge oraz kieruje OVERLEAF_SITE_URL na load balancer:60-config.yaml
3
Repliki
70-overleaf.yaml
- StatefulSet, a nie Deployment. Każda replika otrzymuje stabilną nazwę (
overleaf-0,overleaf-1, …), do której odwołują się ciasteczko load balancera i git-bridge, aOrderedReadyuruchamia najpierw samodzielnieoverleaf-0, więc migracje bazy danych wykonuje tylko jedna replika. - Jedna replika na węzeł. Każda replika uruchamia swoje kompilacje przez Dockera swojego węzła i przechowuje je w
/srv/overleaf-haswojego węzła. V1_HISTORY_URLdla każdej repliki. Każda replika rozdaje linki do historii z własną nazwą, aby git-bridge mógł się z nimi połączyć.
4
git-bridge
75-git-bridge.yaml
GIT_BRIDGE_HOST jest stałym adresem IP, wyjaśniono w Integracja z Git.5
Load balancer
Konfiguracja HAProxy to przykład Overleaf z pięcioma zmianami:
/project/<id>/mcp kierowane do overleaf-0 tak jak /git/ (zobacz Serwer MCP), zwykłe HTTP na porcie 8080 (obraz działa jako użytkownik inny niż root, który pod containerd nie może powiązać portu 80), serwery wyszukiwane przez DNS klastra (adresy IP podów zmieniają się przy każdym restarcie), DaemonSet, aby odpowiadał każdy węzeł, oraz balance leastconn zamiast domyślnego roundrobin (zobacz Pytania i odpowiedzi poniżej).80-haproxy.yaml
externalTrafficPolicy: Local zachowuje adresy IP użytkowników w X-Forwarded-For.6
TLS
Zakończ HTTPS w HAProxy zgodnie z opisem w Proxy TLS, a następnie ustaw w
60-config.yaml OVERLEAF_SITE_URL na adres https:// oraz OVERLEAF_SECURE_COOKIE: "true".Czego się spodziewać
Przetestowaliśmy trzy repliki na trzech węzłach z 2 vCPU i 4 GB każdy, z MongoDB, Redis, Garage, git-bridge i HAProxy na tych samych węzłach:- 12 użytkowników kompilujących jednocześnie 600-stronicowy dokument: wszystkich 12 skompilowało i pobrało swój PDF, po 4 użytkowników na replikę; jedna runda trwała od 8 do 18 sekund. Na każdym węźle pozostawało dostępne co najmniej 1,3 GB pamięci.
- Każdy użytkownik pozostaje na jednej replice (ciasteczko
server-pro-ha), łącznie z pobieraniem PDF, które musi pochodzić z repliki, która go skompilowała. To samo dotyczy HTTPS, łącznie z WebSocketem edytora. - Gdy replika się zatrzyma, jej użytkownicy otrzymują błędy przez około 15 do 20 sekund, dopóki HAProxy nie oznaczy jej jako niedostępnej; następnie przechodzą na inną replikę i pozostają zalogowani, ponieważ sesje znajdują się w Redis.
Pytania i odpowiedzi
Dlaczego balance leastconn?
Dlaczego balance leastconn?
Odpowiedź: Z przykładem Overleaf (
roundrobin, jeden HAProxy na węzeł) w naszym teście 12 nowych użytkowników rozłożyło się na trzy repliki jako 8, 3 i 1, a najbardziej obciążona replika kazała najwolniejszym użytkownikom czekać 29 sekund. Z leastconn, które preferuje replikę z najmniejszą liczbą otwartych połączeń (każdy edytor utrzymuje otwarty WebSocket), ten sam test dał 4, 4 i 4 oraz 18 sekund. Przywiązanie sesji (stickiness) pozostaje bez zmian: wynika z ciasteczka.Czy mogę użyć mojego kontrolera ingress zamiast HAProxy?
Czy mogę użyć mojego kontrolera ingress zamiast HAProxy?
Odpowiedź: Tak, jeśli kieruje ruch na podstawie ciasteczka do stabilnej repliki, obsługuje WebSockety, dopuszcza czas żądań 10 minut i przesyłanie plików do 50 MB, utrzymuje limit czasu keep-alive poniżej 65 sekund, wysyła
X-Forwarded-For i X-Forwarded-Proto oraz kieruje /git/ i /project/<id>/mcp do overleaf-0. Kieruj ruch na własne nazwy replik (overleaf-N.overleaf-hl), a nie na Service, który rozkłada każde żądanie.Jak dodać czwartą replikę?
Jak dodać czwartą replikę?
Odpowiedź: Dodaj węzeł z Dockerem i obrazami TeX Live, ustaw
replicas: 4 w 70-overleaf.yaml i dodaj linię server overleaf-3 ... do konfiguracji HAProxy (oraz zwiększ config-hash, aby HAProxy się zrestartował).
