Ayakaleaf Pro obsługuje skalowanie poziome. Przetestowaliśmy i zweryfikowaliśmy jego poprawne działanie z wieloma replikami.
Począwszy od Server CE/Server Pro
5.0.3 zmienne środowiskowe zmieniły nazwy z SHARELATEX_* na OVERLEAF_*.Jeśli używasz wersji 4.x (lub wcześniejszej), upewnij się, że zmienne mają odpowiedni prefiks (np. SHARELATEX_SITE_URL zamiast OVERLEAF_SITE_URL)Wymagania

Zewnętrzne, centralne przechowywanie danych
Przechowywanie danych w Server Pro można podzielić na cztery magazyny danych:-
MongoDB
- Większość danych jest utrwalana w MongoDB.
- Obsługujemy zarówno instancję lokalną, jak i zewnętrzną, taką jak MongoDB Atlas (w pełni zarządzana usługa MongoDB działająca w infrastrukturze AWS).
-
Redis
- Redis przechowuje dane tymczasowe, takie jak oczekujące aktualizacje dokumentów przed ich zapisaniem do MongoDB.
- Redis służy do przekazywania aktualizacji dokumentów między różnymi usługami oraz powiadamiania edytora o zmianach stanu w danym projekcie.
- Redis służy do przechowywania sesji użytkowników.
- Obsługujemy zarówno instancję lokalną, jak i zewnętrzną.
-
Pliki projektów i pliki historii
- Nieedytowalne pliki projektów są przechowywane poza MongoDB. Nowy system historii projektów (od Server Pro 3.5) również przechowuje historię poza MongoDB.
- W przypadku małych pojedynczych instancji obsługujemy lokalny system plików (oparty np. na lokalnym dysku SSD, NFS lub EBS) albo system przechowywania danych zgodny z S3.
-
W przypadku skalowania poziomego obsługujemy wyłącznie systemy przechowywania danych zgodne z S3.
-
Pliki tymczasowe
- Kompilacje LaTeX powinny działać na szybkich dyskach lokalnych, aby zapewnić optymalną wydajność. Wynik kompilacji nie musi być utrwalany ani objęty kopią zapasową.
- Buforowanie nowo przesyłanych plików i tworzenie plików zip projektów również korzysta na użyciu dysku lokalnego.
Zdecydowanie zalecamy używanie dysku lokalnego. Użycie jakiegokolwiek dysku sieciowego (takiego jak NFS lub EBS) może powodować nieoczekiwane błędy kompilacji i inne problemy z wydajnością.
Git-bridge
Git-bridge jest dostępny w Server Pro od wersji 4.0.1.
- centralnej instancji MongoDB dostępnej ze wszystkich instancji Server Pro
- centralnej instancji Redis dostępnej ze wszystkich instancji Server Pro
- centralnego backendu pamięci masowej zgodnej z S3 dla plików projektów i historii
- dysku lokalnego na każdej instancji dla plików tymczasowych
- dysku lokalnego na instancji hostującej kontener git-bridge dla danych git-bridge
Wymagania dotyczące load balancera
-
Trwałe routowanie (sticky sessions), np. za pomocą pliku cookie
To wymaganie wynika z następujących komponentów:
- Funkcja edycji w czasie rzeczywistym w Server Pro korzysta z WebSockets z mechanizmem awaryjnym w postaci odpytywania XHR. Każda sesja edycji ma lokalny stan po stronie serwera, a żądania danej sesji edycji muszą być zawsze kierowane do tej samej instancji Server Pro. Funkcja współpracy używa mechanizmu Redis Pub/Sub do udostępniania aktualizacji między wieloma instancjami Server Pro.
- Kompilacja LaTeX przechowuje wynik i pamięć podręczną kompilacji lokalnie w celu zwiększenia wydajności. Po wysłaniu żądania kompilacji do jednej instancji Server Pro kolejne żądania pobrania PDF/dziennika muszą być kierowane do tej samej instancji Server Pro.
- Długie limity czasu żądań, aby obsłużyć kompilację dużych dokumentów LaTeX
- Obsługa WebSocket dla optymalnej wydajności
- Rozmiar ładunku POST wynoszący 50MB
-
Limit czasu keep-alive musi być niższy niż limit czasu keep-alive w Server Pro
Limit czasu keep-alive w Server Pro można skonfigurować za pomocą zmiennej środowiskowej
NGINX_KEEPALIVE_TIMEOUT. Wartość domyślna to 65s. Przy wartości domyślnej sprawdzi się limit czasu keep-alive w load balancerze wynoszący 60s. PrzyNGINX_KEEPALIVE_TIMEOUT=120load balancer mógłby użyć wartości 115s. -
Adresy IP klientów
Ustaw nagłówek żądania
X-Forwarded-Forna adres IP klienta. -
Przy terminowaniu SSL
Load balancer musi dodawać nagłówek żądania
X-Forwarded-Proto: https.
Przykładowa konfiguracja HAProxy
Przykładowa konfiguracja HAProxy
Konfiguracja Server Pro
Sekrety Instancje Server Pro muszą korzystać ze wspólnych sekretów:WEB_API_PASSWORD(uwierzytelnianie web api)STAGING_PASSWORDiV1_HISTORY_PASSWORDo tej samej wartości (uwierzytelnianie historii)CRYPTO_RANDOM(dla pliku cookie sesji)OT_JWT_AUTH_KEY(uwierzytelnianie historii)
/dev/urandom (256 losowych bitów).
OVERLEAF_MONGO_URL (SHARELATEX_MONGO_URL w wersjach 4.x i wcześniejszych) na centralną instancję MongoDB.
Redis
Skieruj OVERLEAF_REDIS_HOST (SHARELATEX_REDIS_HOST w wersjach 4.x i wcześniejszych) oraz REDIS_HOST na centralną instancję Redis.
Pamięć masowa zgodna z S3 dla plików projektów i historii
Szczegóły znajdziesz w dokumentacji pamięci masowej zgodnej z S3.
Pliki tymczasowe
Wystarczy domyślne montowanie typu bind lokalnego dysku SSD w /var/lib/overleaf (/var/lib/sharelatex w wersjach 4.x i wcześniejszych). Pamiętaj, aby skierować SANDBOXED_COMPILES_HOST_DIR na punkt montowania na hoście.
Zdecydowanie zalecamy używanie dysku lokalnego. Użycie jakiegokolwiek dysku sieciowego (takiego jak NFS lub EBS) może powodować nieoczekiwane błędy kompilacji i inne problemy z wydajnością.
- Ustaw
OVERLEAF_BEHIND_PROXY=true(SHARELATEX_BEHIND_PROXYw wersjach4.xi wcześniejszych), aby uzyskać prawidłowe adresy IP klientów. - Ustaw
TRUSTED_PROXY_IPSna adres IP load balancera (można podać wiele zakresów CIDR, rozdzielonych przecinkami).
Git-bridge jest dostępny w Server Pro od wersji 4.0.1.
-
Ustaw
GIT_BRIDGE_ENABLEDna'true' -
Ustaw
GIT_BRIDGE_HOSTna<git-bridge container name>, np.git-bridge -
Ustaw
GIT_BRIDGE_PORTna8000 -
Ustaw
V1_HISTORY_URLnahttp://<server-pro sibling container name>:3100/api. Uwaga: jest to konieczne tylko w kontenerze towarzyszącym kontenerowi git-bridge. Pozostałe instancje mogą używać adresu URL localhost, który jest wartością domyślną.
- Ustaw
GIT_BRIDGE_API_BASE_URLnahttp://<server-pro sibling container name>/api/v0, np.http://server-pro-ha-1/api/v0 - Ustaw
GIT_BRIDGE_OAUTH2_SERVERnahttp://<server-pro sibling container name>, np.http://server-pro-ha-1 - Ustaw
GIT_BRIDGE_POSTBACK_BASE_URLnahttp://<git-bridge container name>:8000, np.http://git-bridge:8000 - Ustaw
GIT_BRIDGE_ROOT_DIRna zamontowany (bind mount) dysk z danymi git-bridge, np./data/git-bridge
Przykładowa konfiguracja docker-compose.yml
Przykładowa konfiguracja docker-compose.yml
Poniższa konfiguracja przedstawia samodzielne środowisko. Aby demonstracja działała, musisz dostarczyć prawidłowy klucz/certyfikat SSL i dostosować
OVERLEAF_SITE_URL (SHARELATEX_SITE_URL w wersjach 4.x i wcześniejszych). W rzeczywistym wdrożeniu musisz zastąpić przykładowe sekrety prawdziwymi, zgodnie z komentarzami w kodzie. W rzeczywistym wdrożeniu musisz też przenieść poszczególne kontenery na dedykowane węzły i dostosować adresy IP do konfiguracji sieci lokalnej.Sprzęt
Zalecamy stosowanie tej samej specyfikacji sprzętowej dla wszystkich instancji Server Pro biorących udział w skalowaniu poziomym. Obowiązują ogólne zalecenia dotyczące specyfikacji sprzętowej instancji Server Pro.Aktualizacja Server Pro
W ramach procesu aktualizacji Server Pro automatycznie uruchamia migracje bazy danych. Migracje te nie są przeznaczone do równoległego uruchamiania z wielu instancji. Migracje muszą się zakończyć przed uruchomieniem właściwej aplikacji internetowej. Możesz sprawdzić w dziennikach wpisFinished migrations lub poczekać, aż aplikacja zacznie przyjmować ruch.
Procedura aktualizacji wygląda następująco:
- Zaplanuj okno serwisowe
- Zatrzymaj wszystkie instancje Server Pro
- Wykonaj spójną kopię zapasową zgodnie z opisem w dokumentacji
- Uruchom pojedynczą instancję Server Pro w nowej wersji
- Sprawdź, czy nowa instancja działa zgodnie z oczekiwaniami
- Uruchom pozostałe instancje w nowej wersji

