当前位置: 首页 > news >正文

OnlyOffice的高可用方案如何做

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_NAME=s3STORAGE_S3_BUCKET=your-onlyoffice-bucketSTORAGE_S3_REGION=us-east-1STORAGE_S3_ENDPOINT=https://your-minio-cluster:9000 # 若使用MinIO等替代方案STORAGE_S3_ACCESSKEY=your_access_keySTORAGE_S3_SECRETKEY=your_secret_key

1.2网络文件系统 (NFS)

所有OnlyOffice节点必须挂载同一个NFS服务器上的同一个共享目录 .

配置示例 (环境变量):

STORAGE_NAME=filesystemSTORAGE_FS_FOLDERPATH=/var/lib/onlyoffice/documentserver/App_Data # 此路径应为NFS挂载点

    注意: NFS可能需要妥善处理文件锁和性能问题。

    2. 数据库

    所有OnlyOffice节点必须配置为使用同一个PostgreSQL数据库集

    • 建议: 配置PostgreSQL主从复制集群,并使用Pgpool-II等中间件实现读写分离、连接池和自动故障转移 。

    配置示例 (环境变量):

    DB_TYPE=postgresDB_HOST=your_pgpool_host # Pgpool-II的地址或数据库主节点地址DB_PORT=5432DB_NAME=onlyofficeDB_USER=onlyofficeDB_PASS=your_secure_password

      3. 缓存 (Redis)

      所有OnlyOffice节点必须连接至同一个Redis集群,用于存储会话和临时状态。

      • 建议: 部署Redis集群(例如三主三从模式)以确保高可用。

      配置示例 (环境变量):

      REDIS_SERVER_HOST=your_redis_cluster_hostREDIS_SERVER_PORT=6379# REDIS_SERVER_PASS=your_redis_password # 如果设置了密码

        4. 消息队列 (RabbitMQ)

        所有OnlyOffice节点必须连接至同一个RabbitMQ集群,用于处理节点间的通信和异步任务(如文档转换)。在国内信创环境下可能会要求RocketMQ,目前原生OnlyOffice不支持,但是可以通过修改相关配置和代码来支持,因涉及的点比较多,在此不展开,如果想了解这方面,可以交流。

        配置示例 (环境变量)

        RABBITMQ_URL=amqp://your_rabbitmq_user:password@your_rabbitmq_cluster_host:5672// # 注意Virtual Host

        5. 负载均衡器 (Nginx / HAProxy)

        需要一个反向代理服务器将请求分发到多个OnlyOffice后端节点。此处只是简单的示例,如果想各节点的负载更加均衡(除了请求量外,最重要的是从内存消耗量,因为打开的文件大小不同或者内容元素不同,所占用的内存也会不同,甚至外表看起来相同大小的文件,打开之后内存消耗相差比较大),可以在Nx中加入自定义的LUA脚本来解决。

        关键配置:

        •  upstream  块定义所有OnlyOffice后端节点。
        • WebSocket支持: 必须为  /doc  路径配置代理,以支持实时协作。
        • 健康检查: 配置  max_fails  和  fail_timeout  参数以自动剔除故障节点。

        Nginx配置片段示例:

        upstream onlyoffice_backend {server 192.168.80.165:9000 max_fails=3 fail_timeout=30s;server 192.168.80.138:9000 max_fails=3 fail_timeout=30s;# 添加更多节点...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_SECRET=your_very_strong_secret_hereJWT_ENABLED=true

        部署与验证建议


        部署顺序

        1. 先搭建并测试好共享服务(PostgreSQL集群、Redis集群、RabbitMQ集群、对象存储)。
        2. 使用相同的配置(通过环境变量或配置文件)部署多个OnlyOffice Document Server实例。
        3. 最后部署和配置负载均衡器(Nginx),将流量引入后端节点。

        集群验证方法

        • 服务可用性: 通过负载均衡器入口多次访问,查看响应头或日志,确认请求被分发到不同的后端节点。
        • 协作功能 (核心测试): 这是最关键的一步。同一文档在两个以上浏览器标签页中打开,确认操作能实时同步。同时观察浏览器开发者工具中的WebSocket连接(通常连接到  /doc  路径),看其是否可能连接到不同的后端IP(这表明协作消息通过不同的MQ节点处理,但最终状态一致)。
        • 存储一致性: 在一个节点上传文件,在另一个节点刷新或查看,确认文件立即可见。
        • 故障转移: 模拟一个OnlyOffice节点或一个中间件节点(如Redis从节点)宕机,观察服务是否正常,体验是否受影响。

        总结


        为 OnlyOffice 构建集群,核心在于统一所有节点的状态和数据访问入口。利用成熟的中件间集群(PostgreSQL, Redis, RabbitMQ)和对象存储(S3),是构建稳健、可扩展集群的基石。

        希望这些更深入的思路和方案能帮助你更好地设计和实现 OnlyOffice 的集群环境。如果你对特定环节(如某个中间件的集群部署)有更深入的疑问,很乐意提供更多信息。

        ( https://qm.qq.com/q/uMwFyL5Wn0 )。

        相关资源


        文曲Office相关介绍: 文曲Office 

        另想下载OnlyOffice最新版本镜像,可访问:  OnlyOffice9.0  

        版本介绍:  documentserver 中国版 


        文章转载自:

        http://zcsBLUiQ.zynjt.cn
        http://OKwBG07h.zynjt.cn
        http://wEGk3jVx.zynjt.cn
        http://LRvXW9f9.zynjt.cn
        http://BSIKyPwo.zynjt.cn
        http://yMTmNAsx.zynjt.cn
        http://C9nzksz6.zynjt.cn
        http://uzpStt1B.zynjt.cn
        http://qyqwolJG.zynjt.cn
        http://327KL90S.zynjt.cn
        http://blqwFbiJ.zynjt.cn
        http://IywRHevq.zynjt.cn
        http://lqq0pZrc.zynjt.cn
        http://CCGSVfT7.zynjt.cn
        http://jru5Dsis.zynjt.cn
        http://sO9Txq2F.zynjt.cn
        http://9tDWuuVU.zynjt.cn
        http://XT9ige82.zynjt.cn
        http://oITPFQu7.zynjt.cn
        http://uVSTAHSf.zynjt.cn
        http://REWZrskG.zynjt.cn
        http://GKjVlxGh.zynjt.cn
        http://BOIaeHpC.zynjt.cn
        http://xk9BbR9e.zynjt.cn
        http://RwybZ6c8.zynjt.cn
        http://8QHJpsau.zynjt.cn
        http://zzqpmYx0.zynjt.cn
        http://vK47iNPj.zynjt.cn
        http://thjNcYwk.zynjt.cn
        http://No3X1zgl.zynjt.cn
        http://www.dtcms.com/a/373169.html

        相关文章:

      1. 苍穹外卖前端Day1 | vue基础、Axios、路由vue-router、状态管理vuex、TypeScript
      2. 【RabbitMQ】----RabbitMQ 的7种工作模式
      3. CN2 GIA线路深度解析:阿里云/腾讯云选哪个?(附三网评测)
      4. 冰火岛 Tech 传:Apple Foundation Models 心法解密(下集)
      5. Gamma AI:高效制作PPT的智能生成工具
      6. 云计算学习笔记——HTTP服务、NFS服务篇
      7. unity入门:按钮控制横向滚动视窗显示最左最右
      8. 大模型为什么会有幻觉?-Why Language Models Hallucinate
      9. 数据结构造神计划第三天---数据类型
      10. MYSQL集群高可用架构之MHA高可用架构
      11. 小麦矩阵系统:让短视频分发实现抖音快手小红书全覆盖
      12. 智能高低压地埋线走向探测器如何在多条电缆中查找特定电缆?
      13. 【Docker】常见操作
      14. Python/JS/Go/Java同步学习(第七篇)四语言“字符串类型验证“对照表: 运维“雏田“白眼审核凭证上传崩溃(附源码/截图/参数表/避坑指南)
      15. 深入解析网通核心器件:光模块、巴伦(Balun)与LTCC及其关键参数
      16. 将 maven 集成到 idea 后出现 向项目创建模块时出错:null 的问题
      17. 4.1Vue基本使用
      18. 温补晶振(TCXO)
      19. 应用层————HTTPS协议
      20. 内存越界引发线程函数调用堆栈回溯异常以及INT 3软中断实战分析案例分享
      21. stm32——单总线,DHT11
      22. WAF(Web应用防火墙)重要域名接入方案 - 操作笔记
      23. [网络入侵AI检测] 纯卷积神经网络(CNN)模型 | CNN处理数据
      24. Embedding 层(tf.keras.layers.Embedding)文档翻译
      25. 人工智能学习:Transformer结构(文本嵌入及其位置编码器)
      26. 计算机视觉——光流法
      27. VMware 如何创建链接克隆虚拟机
      28. Excel处理控件Aspose.Cells教程:使用 Python 将 Pandas DataFrame 转换为 Excel
      29. 【回眸】Tessy 基础操作指南
      30. 更智能的零售终端设备管理:合规、安全与高效