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)。这是集群部署的首选,因为它天生就是共享、可扩展且高可用的。

配置示例 (环境变量) :

ini 复制代码
STORAGE_NAME=s3

STORAGE_S3_BUCKET=your-onlyoffice-bucket

STORAGE_S3_REGION=us-east-1

STORAGE_S3_ENDPOINT=https://your-minio-cluster:9000 # 若使用MinIO等替代方案

STORAGE_S3_ACCESSKEY=your_access_key

STORAGE_S3_SECRETKEY=your_secret_key

1.2网络文件系统 (NFS)

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

配置示例 (环境变量) :

ini 复制代码
STORAGE_NAME=filesystem

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

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

2. 数据库

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

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

配置示例 (环境变量) :

ini 复制代码
DB_TYPE=postgres

DB_HOST=your_pgpool_host # Pgpool-II的地址或数据库主节点地址

DB_PORT=5432

DB_NAME=onlyoffice

DB_USER=onlyoffice

DB_PASS=your_secure_password

3. 缓存 (Redis)

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

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

配置示例 (环境变量) :

ini 复制代码
REDIS_SERVER_HOST=your_redis_cluster_host

REDIS_SERVER_PORT=6379

# REDIS_SERVER_PASS=your_redis_password # 如果设置了密码

4. 消息队列 (RabbitMQ)

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

配置示例 (环境变量)

ini 复制代码
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配置片段示例:

ini 复制代码
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请求的令牌。

配置示例 (环境变量) :

ini 复制代码
JWT_SECRET=your_very_strong_secret_here

JWT_ENABLED=true

部署与验证建议

部署顺序

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

集群验证方法

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

总结

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

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

qm.qq.com/q/uMwFyL5Wn...)。

相关资源

文曲Office相关介绍: 文曲Office

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

版本介绍: documentserver 中国版

相关推荐
Linux运维技术栈7 小时前
Terraform 从入门到实战:历史、原理、功能与阿里云/Azure 上手指南
运维·阿里云·kubernetes·azure·terraform
wdfk_prog7 小时前
[Linux]学习笔记系列 -- lib/dump_stack.c 栈回溯打印(Stack Trace Dumping) 内核调试与错误诊断的基石
linux·运维·服务器·c语言·笔记·学习
不可能的是8 小时前
Docker与Ubuntu环境下apt-get报错完全解决指南
运维
薛定谔的算法8 小时前
手写React:从Dideact理解前端框架的核心原理
前端·react.js·架构
掘金-我是哪吒8 小时前
分布式微服务系统架构第170集:Kafka消费者并发-多节点消费-可扩展性
分布式·微服务·架构·kafka·系统架构
雨季西柚8 小时前
Docker网络模式解析
linux·运维·kubernetes
荣光波比8 小时前
Nginx 实战系列(四)—— Nginx反向代理与负载均衡实战指南
运维·nginx·云计算·负载均衡
syty20209 小时前
elastic search 是如何做sum操作的
运维·jenkins
运维成长记9 小时前
linux 100个问答81~101 主要是k8s相关
linux·运维·服务器