distribute-spacing-horizontal水平扩展

从 3.5.6 版本开始,Server Pro 支持横向扩展。

本文档列出了技术要求并提供了在多个节点上运行 Server Pro 的指南。

triangle-exclamation

设置横向扩展需要大量工作。我们建议在达到一定规模时考虑横向扩展, 例如,一个用于 1000 名总用户的 Server Pro 安装已成功在单台服务器上部署,该服务器配备两个四核处理器和 32GB 系统内存。请参阅 硬件要求 文档以获取建议。

采用横向扩展的 Server Pro 部署涉及一组外部组件,例如负载均衡器和兼容 S3 的存储后端。

我们可以帮助排查可能由错误配置引起的 Server Pro 容器中的错误,并根据本文档提供一般性建议。不幸的是,我们无法提供第三方应用/系统的配置协助。

解决与您的硬件/软件相关的特定技术问题以提供外部组件不在我们的支持条款覆盖范围内。

要求

外部集中式数据存储

Server Pro 中的数据存储可以分为四个数据存储:

  • MongoDB

    • 大多数数据持久化到 MongoDB。

    • 我们支持本地实例或外部实例,例如 MongoDBarrow-up-right Atlas(在 AWS 基础设施中运行的完全托管 MongoDB 服务)。

    注意: 不幸的是,目前没有对兼容 MongoDB 的数据库(例如 CosmoDB/DocumentDB)的官方支持,因为我们尚未使用它们测试 Server Pro。虽然使用兼容数据库部署 Server Pro 可能 是可行的,但我们仅官方支持使用 MongoDB 的部署。

  • Redis

    • Redis 存储临时数据,例如在刷新到 MongoDB 之前的待处理文档更新。

    • Redis 用于在不同服务之间通信文档更新并在给定项目中通知编辑器有关状态更改。

    • Redis 用于存储用户会话。

    • 我们支持本地实例或外部实例。

    注意: 不幸的是,目前没有对兼容 Redis 的键/值存储(例如 KeyDB/Valkey)的官方支持,因为我们尚未使用它们测试 Server Pro。虽然使用兼容存储部署 Server Pro 可能 可能可行,但我们仅官方支持使用 Redis 的部署。

  • 项目文件和历史文件

    • 不可编辑的项目文件存储在 MongoDB 之外。

      新的项目历史系统(Server Pro 3.5 起)也将历史存储在 MongoDB 之外。

    • 对于小型单实例,我们支持本地文件系统(可以由本地 SSD、NFS 或 EBS 提供支持)或 兼容 S3 的数据存储系统.

    • 对于横向扩展,我们 支持兼容 S3 的数据存储系统。

    重要: NFS/Amazon EFS/Amazon EBS 是 不要 支持用于横向扩展的。有关详细信息,请参阅 硬件存储 关于在 Server Pro 中扩展存储的要求部分以获取更多细节。

  • 临时文件

    • LaTeX 编译需要在快速、本地磁盘上运行以获得最佳性能。编译输出不需要持久化或备份。

    • 新文件上传的缓冲和项目 zip 文件的创建也受益于使用本地磁盘。

triangle-exclamation

Git-bridge

circle-info

从 4.0.1 版本开始,Server Pro 提供 Git-bridge。

git 仓库存储在本地磁盘上。没有可用的复制选项。git-bridge 应作为一个 单例。为了获得最佳性能,我们建议为 git-bridge 数据使用本地磁盘。git-bridge 的数据磁盘应定期备份。

对于具有横向扩展的数据存储,您需要:

  • 一个可被所有 Server Pro 实例访问的集中式 MongoDB 实例

  • 一个可被所有 Server Pro 实例访问的集中式 Redis 实例

  • 一个用于项目和历史文件的集中式兼容 S3 的存储后端

  • 每个实例上的用于临时文件的本地磁盘

  • 托管 git-bridge 容器的实例上的用于 git-bridge 数据的本地磁盘

负载均衡器要求

  • 持久路由,例如使用 cookie

    此要求来自以下组件:

    • Server Pro 的实时编辑功能使用 WebSockets,并回退到 XHR 轮询。每个编辑会话在服务器端具有局部状态,给定编辑会话的请求始终需要路由到相同的 Server Pro 实例。协作功能使用 Redis Pub/Subarrow-up-right 在多个 Server Pro 实例之间共享更新。

    • LaTeX 编译将输出和编译缓存保存在本地以提升性能。在向某个 Server Pro 实例发出编译请求后,随后的 PDF/日志下载请求需要路由到相同的 Server Pro 实例。

  • 长请求超时 以支持大规模 LaTeX 文档的编译

  • WebSocket 支持 以获得最佳性能

  • POST 有效负载大小为 50MB

  • Keep-alive 超时 必须低于 Server Pro 的 keep-alive 超时

    Server Pro 中的 keep-alive 超时可以使用环境变量进行配置 NGINX_KEEPALIVE_TIMEOUT。默认值为 65 秒。

    在默认情况下,负载均衡器中 60 秒的 keep-alive 超时可用。

    使用 NGINX_KEEPALIVE_TIMEOUT=120,负载均衡器可以选择 115 秒。

  • 客户端 IP

    设置请求头 X-Forwarded-For 为客户端 IP。

  • 终止 SSL

    负载均衡器需要添加请求头 X-Forwarded-Proto: https.

chevron-rightHAProxy 示例配置hashtag

Server Pro 配置

密钥/秘密

Server Pro 实例需要就共享密钥达成一致:

  • WEB_API_PASSWORD (Web API 认证)

  • STAGING_PASSWORDV1_HISTORY_PASSWORD 相同的值(历史认证)

  • CRYPTO_RANDOM (用于会话 cookie)

  • OT_JWT_AUTH_KEY (历史认证)

所有这些密钥需要用各自唯一的值配置并在实例之间共享。

如果未配置且用户请求被路由到不同的 Server Pro 实例,他们的请求将无法通过认证检查,用户可能会频繁被重定向到登录页面或其在 UI 中的操作会以意外方式失败。

如果未配置,Server Pro 会基于来自 /dev/urandom 的 32 字节随机数为每个密钥使用新的随机值(256 位随机数)。

MongoDB

指向 OVERLEAF_MONGO_URL (如果您正在使用 对于 版本 重新命名为 及更早版本)指向集中式 MongoDB 实例。

Redis

指向 OVERLEAF_REDIS_HOST (SHARELATEX_REDIS_HOST 对于 版本 重新命名为 及更早)和 REDIS_HOST 指向集中式 Redis 实例。

用于项目和历史文件的兼容 S3 存储

请参阅有关 兼容 S3 的存储 的文档以获取详细信息。

临时文件

默认将本地 SSD 绑定挂载到 /var/lib/overleaf (/var/lib/sharelatex 对于 版本 重新命名为 及更早)将足够。请确保将 DOCKER_RUNNER 指向主机上的挂载点。

triangle-exclamation

代理配置

  • 设置 OVERLEAF_BEHIND_PROXY=true (SHARELATEX_BEHIND_PROXY 对于 版本 重新命名为 及更早)以获取准确的客户端 IP。

  • 设置 TRUSTED_PROXY_IPS 为负载均衡器的 IP(可以指定多个 CIDR,逗号分隔)。

Git-bridge 集成

circle-info

从 4.0.1 版本开始,Server Pro 提供 Git-bridge。

git-bridge 容器需要一个同级的 Server Pro 容器来处理传入的 git 请求。该同级容器也可以处理常规用户流量。在示例配置中,第一个实例作为 git-bridge 的同级容器,但实际上任何实例都可以充当该角色。

为什么需要将一个 Server Pro 容器指定为 git-bridge 的同级?Server Pro 会为历史服务向 git-bridge 提供下载 URL。我们需要将这些历史 URL 配置为 git-bridge 容器可访问。

Server Pro 容器配置:

  • 设置 GIT_BRIDGE_ENABLED 直接升级到 ‘true’

  • 设置 GIT_BRIDGE_HOST 直接升级到 <git-bridge 容器名称> 例如, git-bridge

  • 设置 GIT_BRIDGE_PORT 直接升级到 8000

  • 设置 V1_HISTORY_URL 直接升级到 http://<server-pro 同级容器名称>:3100/api.

    注意:这只需要在作为 git-bridge 同级容器的实例上配置。其他实例可以使用本地主机 URL,这也是默认值。

git-bridge 容器配置:

  • 设置 GIT_BRIDGE_API_BASE_URL 直接升级到 http://<server-pro 同级容器名称>/api/v0中的值,例如 http://server-pro-ha-1/api/v0

  • 设置 GIT_BRIDGE_OAUTH2_SERVER 直接升级到 http://<server-pro 同级容器名称>中的值,例如 http://server-pro-ha-1

  • 设置 GIT_BRIDGE_POSTBACK_BASE_URL 直接升级到 http://<git-bridge 容器名称>:8000中的值,例如 http://git-bridge:8000

  • 设置 GIT_BRIDGE_ROOT_DIR 指向绑定挂载的 git-bridge 数据磁盘,例如, /data/git-bridge

chevron-right示例 docker-compose.yml 配置hashtag

以下配置展示了一个自包含的设置。要使演示工作,您需要提供有效的 SSL 密钥/证书并调整 OVERLEAF_SITE_URL (SHARELATEX_SITE_URL 对于 版本 重新命名为 及更早)。对于实际部署,您必须将示例中的虚拟密钥替换为实际密钥。如用于实际部署,您需要将各个容器移到专用节点并根据本地网络设置调整 IP 地址。

硬件

我们建议对参与横向扩展的所有 Server Pro 实例使用相同的硬件规格。

有关通用建议的 硬件规格 适用于 Server Pro 实例。

升级 Server Pro

作为升级过程的一部分,Server Pro 会自动运行数据库迁移。这些迁移被 不要 设计为可以从多个实例并行运行。

迁移需要在实际 Web 应用启动之前完成。您可以检查日志中是否有一条 已完成迁移 的条目,或等待应用接受流量。

升级过程如下:

  1. 安排维护窗口

  2. 停止所有 Server Pro 实例

  3. 启动一个带有新版本的单个 Server Pro 实例

  4. 验证新实例按预期工作

  5. 以新版本启动其他实例

最后更新于