OnlyOffice 社区版本身不原生支持集群但通过外部组件和配置可实现高可用和负载均衡。核心在于让多个 Document Server 节点共享状态和数据确保来自同一文档的请求无论被哪个节点处理都能获得一致的环境。架构示意图下面是一个高可用的 OnlyOffice 集群示意图它展示了各个组件如何协同工作集群组件部署模式注意事项OnlyOffice 节点多节点并行所有节点配置应保持一致特别是JWT密钥和存储配置。数据库PostgreSQL 主从集群使用Pgpool-II等工具实现读写分离和故障转移。所有OnlyOffice节点连接至主集群。缓存Redis 集群部署至少三主三从的Redis集群确保高可用。所有OnlyOffice节点连接至此集群。消息队列RabbitMQ 集群部署RabbitMQ集群确保消息不丢失。所有OnlyOffice节点连接至此集群。文件存储对象存储 (推荐)所有OnlyOffice节点配置相同的S3参数桶、区域、密钥指向同一对象存储。网络文件系统 (NFS)所有OnlyOffice节点挂载同一个NFS服务器上的同一共享目录。负载均衡器Nginx / HAProxy配置上游服务器组upstream包含所有OnlyOffice节点的IP和端口并启用健康检查。关键配置详解1. 存储方案 (至关重要)OnlyOffice集群需要所有节点访问相同的文件存储这是实现协作和文档一致性的基础。1.1对象存储 (强烈推荐)OnlyOffice 支持Amazon S3和其他兼容S3协议的对象存储如MinIO、Ceph RGW。这是集群部署的首选因为它天生就是共享、可扩展且高可用的。配置示例 (环境变量):STORAGE_NAMEs3 STORAGE_S3_BUCKETyour-onlyoffice-bucket STORAGE_S3_REGIONus-east-1 STORAGE_S3_ENDPOINThttps://your-minio-cluster:9000 # 若使用MinIO等替代方案 STORAGE_S3_ACCESSKEYyour_access_key STORAGE_S3_SECRETKEYyour_secret_key1.2网络文件系统 (NFS)所有OnlyOffice节点必须挂载同一个NFS服务器上的同一个共享目录 .配置示例 (环境变量):STORAGE_NAMEfilesystem STORAGE_FS_FOLDERPATH/var/lib/onlyoffice/documentserver/App_Data # 此路径应为NFS挂载点注意: NFS可能需要妥善处理文件锁和性能问题。2. 数据库所有OnlyOffice节点必须配置为使用同一个PostgreSQL数据库集群。建议: 配置PostgreSQL主从复制集群并使用Pgpool-II等中间件实现读写分离、连接池和自动故障转移。配置示例 (环境变量):DB_TYPEpostgres DB_HOSTyour_pgpool_host # Pgpool-II的地址或数据库主节点地址 DB_PORT5432 DB_NAMEonlyoffice DB_USERonlyoffice DB_PASSyour_secure_password3. 缓存 (Redis)所有OnlyOffice节点必须连接至同一个Redis集群用于存储会话和临时状态。建议: 部署Redis集群例如三主三从模式以确保高可用。配置示例 (环境变量):REDIS_SERVER_HOSTyour_redis_cluster_host REDIS_SERVER_PORT6379 # REDIS_SERVER_PASSyour_redis_password # 如果设置了密码4. 消息队列 (RabbitMQ)所有OnlyOffice节点必须连接至同一个RabbitMQ集群用于处理节点间的通信和异步任务如文档转换。在国内信创环境下可能会要求RocketMQ目前原生OnlyOffice不支持但是可以通过修改相关配置和代码来支持因涉及的点比较多在此不展开如果想了解这方面可以交流。配置示例 (环境变量)RABBITMQ_URLamqp://your_rabbitmq_user:passwordyour_rabbitmq_cluster_host:5672// # 注意Virtual Host5. 负载均衡器 (Nginx / HAProxy)需要一个反向代理服务器将请求分发到多个OnlyOffice后端节点。此处只是简单的示例如果想各节点的负载更加均衡除了请求量外最重要的是从内存消耗量因为打开的文件大小不同或者内容元素不同所占用的内存也会不同甚至外表看起来相同大小的文件打开之后内存消耗相差比较大可以在Nx中加入自定义的LUA脚本来解决。关键配置:upstream块定义所有OnlyOffice后端节点。WebSocket支持: 必须为 /doc 路径配置代理以支持实时协作。健康检查: 配置 max_fails 和 fail_timeout 参数以自动剔除故障节点。Nginx配置片段示例:upstream onlyoffice_backend { server 192.168.80.165:9000 max_fails3 fail_timeout30s; server 192.168.80.138:9000 max_fails3 fail_timeout30s; # 添加更多节点... keepalive 64; } server { listen 80; server_name onlyoffice.yourdomain.com; location / { proxy_pass http://onlyoffice_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_set_header Connection ; add_header Backend-IP $upstream_addr always; # 便于调试查看被哪个后端处理 } # 至关重要的WebSocket路径 location /doc { proxy_pass http://onlyoffice_backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 3600s; } }6. JWT密钥所有OnlyOffice节点必须配置完全相同的JWT密钥用于生成和验证API请求的令牌。配置示例 (环境变量):JWT_SECRETyour_very_strong_secret_here JWT_ENABLEDtrue部署与验证建议部署顺序先搭建并测试好共享服务PostgreSQL集群、Redis集群、RabbitMQ集群、对象存储。使用相同的配置通过环境变量或配置文件部署多个OnlyOffice Document Server实例。最后部署和配置负载均衡器Nginx将流量引入后端节点。集群验证方法服务可用性: 通过负载均衡器入口多次访问查看响应头或日志确认请求被分发到不同的后端节点。协作功能 (核心测试):这是最关键的一步。同一文档在两个以上浏览器标签页中打开确认操作能实时同步。同时观察浏览器开发者工具中的WebSocket连接通常连接到 /doc 路径看其是否可能连接到不同的后端IP这表明协作消息通过不同的MQ节点处理但最终状态一致。存储一致性: 在一个节点上传文件在另一个节点刷新或查看确认文件立即可见。故障转移: 模拟一个OnlyOffice节点或一个中间件节点如Redis从节点宕机观察服务是否正常体验是否受影响。总结为 OnlyOffice 构建集群核心在于统一所有节点的状态和数据访问入口。利用成熟的中件间集群PostgreSQL, Redis, RabbitMQ和对象存储S3是构建稳健、可扩展集群的基石。希望这些更深入的思路和方案能帮助你更好地设计和实现 OnlyOffice 的集群环境。如果你对特定环节如某个中间件的集群部署有更深入的疑问很乐意提供更多信息。 https://qm.qq.com/q/uMwFyL5Wn0 。相关资源OnlyOffice最新版本镜像https://onlyoffice.moqisoft.com/docs/install/docker中国版本介绍https://onlyoffice.moqisoft.com/docs/product/summary技术交流183026419https://qm.qq.com/q/uMwFyL5Wn0