1
Penyimpanan S3
Siapkan tiga bucket dan dua pengguna seperti dijelaskan di S3, dengan layanan S3 Anda atau dengan Garage di dalam kluster, lalu masukkan keempat kunci ke Secret
overleaf-s3. Konfigurasi di bawah ini menggunakan contoh Garage dari halaman tersebut.2
Konfigurasi
ConfigMap ini menggantikan
30-config.yaml. ConfigMap ini menambahkan S3 dan git-bridge serta mengarahkan OVERLEAF_SITE_URL ke load balancer:60-config.yaml
3
Replika
70-overleaf.yaml
- StatefulSet, bukan Deployment. Setiap replika mendapat nama yang stabil (
overleaf-0,overleaf-1, …) yang dirujuk oleh cookie load balancer dan git-bridge, danOrderedReadymemulaioverleaf-0sendirian terlebih dahulu, sehingga hanya satu replika yang menjalankan migrasi database. - Satu replika per node. Setiap replika memulai kompilasinya melalui Docker di node-nya dan menyimpannya di
/srv/overleaf-hapada node-nya. V1_HISTORY_URLper replika. Setiap replika membagikan tautan riwayat dengan namanya sendiri, sehingga git-bridge dapat menjangkaunya.
4
git-bridge
75-git-bridge.yaml
GIT_BRIDGE_HOST berupa alamat IP tetap.5
Load balancer
Konfigurasi HAProxy adalah contoh dari Overleaf dengan lima perubahan:
/project/<id>/mcp dirutekan ke overleaf-0 seperti /git/ (lihat MCP Server), HTTP biasa pada port 8080 (image berjalan sebagai pengguna non-root, yang tidak dapat melakukan bind ke port 80 di bawah containerd), server ditemukan melalui DNS kluster (IP pod berubah setiap kali restart), DaemonSet agar setiap node menjawab, dan balance leastconn sebagai pengganti roundrobin default (lihat Tanya Jawab di bawah).80-haproxy.yaml
externalTrafficPolicy: Local mempertahankan alamat IP pengguna di X-Forwarded-For.6
TLS
Terminasikan HTTPS di HAProxy seperti dijelaskan di Proxy TLS, lalu atur
OVERLEAF_SITE_URL ke alamat https:// dan OVERLEAF_SECURE_COOKIE: "true" di 60-config.yaml.Apa yang dapat diharapkan
Kami menguji tiga replika pada tiga node dengan masing-masing 2 vCPU dan 4 GB, dengan MongoDB, Redis, Garage, git-bridge, dan HAProxy di node yang sama:- 12 pengguna mengompilasi dokumen 600 halaman secara bersamaan: kedua belas pengguna berhasil mengompilasi dan mengambil PDF mereka, 4 pengguna per replika; satu putaran memakan waktu 8 hingga 18 detik. Setiap node tetap memiliki setidaknya 1,3 GB memori yang tersedia.
- Setiap pengguna tetap berada di satu replika (cookie
server-pro-ha), termasuk unduhan PDF yang harus berasal dari replika yang mengompilasinya. Hal yang sama berlaku melalui HTTPS, termasuk WebSocket editor. - Saat sebuah replika berhenti, penggunanya mendapat error selama sekitar 15 hingga 20 detik, hingga HAProxy menandainya sebagai down; kemudian mereka berpindah ke replika lain dan tetap login, karena sesi disimpan di Redis.
Tanya Jawab
Mengapa balance leastconn?
Mengapa balance leastconn?
Jawaban: Dengan contoh dari Overleaf (
roundrobin, satu HAProxy per node), 12 pengguna baru terbagi menjadi 8, 3, dan 1 di ketiga replika dalam pengujian kami, dan replika tersibuk membuat pengguna yang paling lambat menunggu 29 detik. Dengan leastconn, yang mengutamakan replika dengan koneksi terbuka paling sedikit (setiap editor membiarkan WebSocket tetap terbuka), pengujian yang sama menghasilkan 4, 4, dan 4 serta 18 detik. Stickiness tidak berubah: berasal dari cookie.Bisakah saya menggunakan ingress controller saya sebagai pengganti HAProxy?
Bisakah saya menggunakan ingress controller saya sebagai pengganti HAProxy?
Jawaban: Ya, jika ingress controller tersebut merutekan berdasarkan cookie ke replika yang stabil, mendukung WebSocket, mengizinkan waktu permintaan 10 menit dan unggahan 50 MB, menjaga timeout keep-alive di bawah 65 detik, mengirim
X-Forwarded-For dan X-Forwarded-Proto, serta mengirim /git/ dan /project/<id>/mcp ke overleaf-0. Rutekan ke nama masing-masing replika (overleaf-N.overleaf-hl), bukan ke Service yang menyeimbangkan setiap permintaan.Bagaimana cara menambahkan replika keempat?
Bagaimana cara menambahkan replika keempat?
Jawaban: Tambahkan node dengan Docker dan image TeX Live, atur
replicas: 4 di 70-overleaf.yaml, dan tambahkan baris server overleaf-3 ... ke konfigurasi HAProxy (serta naikkan config-hash agar HAProxy di-restart).
