1
S3 depolama
Üç bucket’ı ve iki kullanıcıyı S3 sayfasında açıklandığı gibi, kendi S3 hizmetinizle veya kümedeki Garage ile kurun ve dört anahtarı
overleaf-s3 Secret’ına koyun. Aşağıdaki yapılandırma o sayfadaki Garage örneğini kullanır.2
Yapılandırma
Bu ConfigMap,
30-config.yaml dosyasının yerini alır. S3 ve git-bridge ekler ve OVERLEAF_SITE_URL değerini yük dengeleyiciye yönlendirir:60-config.yaml
3
Replikalar
70-overleaf.yaml
- Deployment değil, StatefulSet. Her replika, yük dengeleyici çerezinin ve git-bridge’in başvurduğu sabit bir ad (
overleaf-0,overleaf-1, …) alır veOrderedReadyönce yalnızcaoverleaf-0pod’unu başlatır; böylece veritabanı geçişlerini yalnızca bir replika çalıştırır. - Düğüm başına bir replika. Her replika derlemelerini kendi düğümünün Docker’ı üzerinden başlatır ve bunları kendi düğümünün
/srv/overleaf-hadizininde tutar. - Replika başına
V1_HISTORY_URL. Her replika, git-bridge’in onlara erişebilmesi için geçmiş bağlantılarını kendi adıyla verir.
4
git-bridge
75-git-bridge.yaml
GIT_BRIDGE_HOST değerinin neden sabit bir IP adresi olduğunu öğrenmek için Git entegrasyonu sayfasına bakın.5
Yük dengeleyici
HAProxy yapılandırması, Overleaf’in örneğinin beş değişiklik yapılmış hâlidir:
/git/ gibi overleaf-0’a yönlendirilen /project/<id>/mcp (bkz. MCP Sunucusu), 8080 portunda düz HTTP (imaj root olmayan bir kullanıcı olarak çalışır ve bu kullanıcı containerd altında 80 portuna bağlanamaz), küme DNS’i üzerinden bulunan sunucular (pod IP’leri her yeniden başlatmada değişir), her düğümün yanıt vermesi için bir DaemonSet ve varsayılan roundrobin yerine balance leastconn (aşağıdaki Soru&Cevap bölümüne bakın).80-haproxy.yaml
externalTrafficPolicy: Local, kullanıcıların IP adreslerini X-Forwarded-For içinde korur.6
TLS
HTTPS’i TLS proxy sayfasında açıklandığı gibi HAProxy’de sonlandırın, ardından
60-config.yaml içinde OVERLEAF_SITE_URL değerini https:// adresine ve OVERLEAF_SECURE_COOKIE: "true" olarak ayarlayın.Neler beklenmeli
Her biri 2 vCPU ve 4 GB belleğe sahip üç düğümde, MongoDB, Redis, Garage, git-bridge ve HAProxy aynı düğümlerdeyken üç replikayı test ettik:- Aynı anda 600 sayfalık bir belgeyi derleyen 12 kullanıcı: 12’si de derledi ve PDF’lerini aldı, replika başına 4 kullanıcı; bir tur 8 ila 18 saniye sürdü. Her düğümde en az 1,3 GB kullanılabilir bellek kaldı.
- Her kullanıcı tek bir replikada kalır (
server-pro-haçerezi); derleyen replikadan gelmesi gereken PDF indirmesi de buna dahildir. Aynısı, düzenleyicinin WebSocket’i dahil HTTPS üzerinden de geçerlidir. - Bir replika durduğunda, HAProxy onu devre dışı olarak işaretleyene kadar kullanıcıları yaklaşık 15 ila 20 saniye boyunca hata alır; ardından başka bir replikaya geçerler ve oturumlar Redis’te bulunduğu için oturumları açık kalır.
Soru&Cevap
Neden balance leastconn?
Neden balance leastconn?
Cevap: Overleaf’in örneğiyle (
roundrobin, düğüm başına bir HAProxy), testimizde 12 yeni kullanıcı üç replikaya 8, 3 ve 1 olarak dağıldı ve en yoğun replika en yavaş kullanıcıları 29 saniye bekletti. En az açık bağlantıya sahip replikayı tercih eden leastconn ile (her düzenleyici bir WebSocket’i açık tutar), aynı test 4, 4 ve 4 dağılımını ve 18 saniyeyi verdi. Yapışkanlık değişmez: çerezden gelir.HAProxy yerine kendi ingress denetleyicimi kullanabilir miyim?
HAProxy yerine kendi ingress denetleyicimi kullanabilir miyim?
Cevap: Evet; bir çereze göre sabit bir replikaya yönlendiriyorsa, WebSocket’leri destekliyorsa, 10 dakikalık istek sürelerine ve 50 MB’lık yüklemelere izin veriyorsa, keep-alive zaman aşımını 65 saniyenin altında tutuyorsa,
X-Forwarded-For ve X-Forwarded-Proto gönderiyorsa ve /git/ ile /project/<id>/mcp isteklerini overleaf-0’a gönderiyorsa. Her isteği dengeleyen bir Service’e değil, replikaların kendi adlarına (overleaf-N.overleaf-hl) yönlendirin.Dördüncü bir replikayı nasıl eklerim?
Dördüncü bir replikayı nasıl eklerim?
Cevap: Docker ve TeX Live imajlarına sahip bir düğüm ekleyin,
70-overleaf.yaml içinde replicas: 4 ayarlayın ve HAProxy yapılandırmasına bir server overleaf-3 ... satırı ekleyin (ve HAProxy’nin yeniden başlaması için config-hash değerini artırın).
