onlyoffice双机热备有五种方案:一、postgresql主从+redis集群实现无状态双节点;二、nfs+keepalived vip主备切换;三、k8s statefulset+headless service;四、haproxy tcp健康检查主动-被动模式;五、minio对象存储+jwt统一鉴权无共享架构。

如果您正在为OnlyOffice Document Server构建双机热备系统,以避免单点故障导致文档服务中断,则必须确保两个节点能共享状态、同步数据并实现请求自动切换。以下是实现OnlyOffice高可用架构的多种可行方案:
一、基于PostgreSQL主从+Redis集群的双节点部署
该方案通过外部有状态组件解耦OnlyOffice节点的状态依赖,使两台Document Server完全无状态运行,任一节点宕机不影响服务连续性。PostgreSQL主从保障元数据高可用,Redis集群保障会话与缓存一致性。
1、部署PostgreSQL主从集群,使用Patroni或pgpool-II实现自动故障转移,并配置OnlyOffice所有节点连接至虚拟IP或负载均衡后的主库地址。
2、部署三主三从Redis集群,所有OnlyOffice节点配置相同的redis_host、redis_port及密码,启用redis_sentinels参数指向哨兵列表。
3、在两台服务器上分别启动OnlyOffice容器,环境变量中强制指定相同JWT_SECRET、STORAGE_S3_BUCKET及S3密钥,确保签名与存储行为一致。
4、配置Nginx upstream模块,将两个节点IP加入server列表,启用health_check指令,超时3秒、失败2次即剔除节点。
二、基于NFS共享存储+Keepalived VIP的双机热备
该方案适用于无对象存储条件的中小环境,通过NFS统一挂载文档数据目录,配合Keepalived实现虚拟IP漂移,使客户端始终访问同一入口地址,后端由主节点提供服务,备节点待命监听。
1、搭建高可用NFS服务器(建议使用两节点DRBD+Heartbeat或Corosync+Pacemaker),导出/var/lib/onlyoffice/documentserver/App_Data目录。
2、在两台OnlyOffice服务器上执行mount -t nfs -o hard,intr,rsize=65536,wsize=65536,nolock,proto=tcp,port=2049 192.168.10.100:/onlyoffice /var/lib/onlyoffice/documentserver/App_Data。
3、安装Keepalived,在主节点配置priority 100、备节点priority 90,vrrp_script检测onlyoffice服务端口80/443是否响应。
4、配置virtual_ipaddress绑定192.168.10.101,所有客户端DNS解析指向该VIP,主节点宕机后VIP自动迁移至备节点。
三、基于Kubernetes StatefulSet+Headless Service的双Pod热备
该方案利用K8s原生调度能力与服务发现机制,将两个OnlyOffice Pod部署为StatefulSet副本,通过Headless Service暴露独立网络标识,并结合外部PostgreSQL与Redis实现状态外置,满足生产级双机热备要求。
1、创建StatefulSet,replicas设为2,volumeClaimTemplates声明共享PVC,挂载至/var/www/onlyoffice/Data路径。
2、定义Headless Service,clusterIP: None,selector匹配OnlyOffice Pod标签,启用publishNotReadyAddresses: true确保Pod就绪前仍可被探测。
3、配置initContainer运行脚本,检查PostgreSQL连接、Redis连通性及S3凭证有效性,任一失败则阻断主容器启动。
4、部署Prometheus+Alertmanager监控Pod存活状态,触发webhook调用K8s API强制驱逐异常Pod,由控制器自动重建。
四、基于HAProxy TCP层健康检查的双节点主动-被动模式
该方案不依赖共享存储,而是采用主动-被动(Active-Passive)模式,仅允许一个节点处理HTTP/HTTPS流量,另一节点实时同步配置与证书,通过HAProxy的TCP健康检查与failover机制实现毫秒级切换。
1、在两台服务器上部署相同版本OnlyOffice镜像,使用docker run --name onlyoffice --restart=always -v /etc/onlyoffice:/etc/onlyoffice -v /var/log/onlyoffice:/var/log/onlyoffice启动。
2、配置rsync定时任务,每5分钟同步/etc/onlyoffice及其子目录至备节点,排除临时文件与日志目录。
3、在HAProxy配置中定义tcp-check send line "GET /health HTTP/1.0\r\n\r\n",接收HTTP 200响应视为健康,否则触发backup server切换。
4、设置option httpchk GET /health,balance source,确保同一客户端IP始终路由至同一节点,维持WebSocket会话稳定。
五、基于MinIO对象存储+JWT统一鉴权的双节点无共享架构
该方案彻底消除对本地磁盘和NFS的依赖,所有文档内容、缩略图、转换中间件均存于MinIO集群,两节点仅运行计算逻辑,通过统一JWT密钥与时间窗口校验实现身份与操作一致性。
1、部署三节点MinIO集群,启用纠删码与分布式锁,配置STORAGE_NAME=s3、STORAGE_S3_ENDPOINT=https://minio-cluster:9000、STORAGE_S3_BUCKET=onlyoffice-prod。
2、生成强随机JWT_SECRET,长度不少于32字节,通过ConfigMap注入两个OnlyOffice Pod的环境变量中。
3、在Nginx Ingress Controller中配置auth_request模块,将所有/api/请求转发至内部认证服务,验证JWT payload中的exp与iss字段。
4、启用nginx的proxy_cache_valid 200 302 10m,缓存静态资源与字体文件,降低双节点重复拉取S3对象的开销。











