永中文档在线转换预览双活实现方案

永中文档在线转换预览服务 是永中软件股份有限公司基于十多年核心技术积累、面向移动互联领域推出的 一款文档处理软件。永中采用自主可控核心技术,具备快速技术和服务响应能力,把文档原样输出为 HTML,图片等,即点即得、无需下载、保护文档隐私,快速高效,轻松实现文档在线安全阅读。​

实现目标

  • 通过nginx实现业务fcsserver负载均衡,后端可以动态扩展应用服务器
  • nginx通过keepalived实现高可用,解决单点故障
  • 通过keepalived实现nginx双活配置,解决nginx主备资源使用率50%问题
  • 通过dns轮询解析域名到双活vip,达到负载均衡效果
  • 后期nginx达到瓶颈应考虑lvs+keepalived+nginx架构,动态扩展nginx服务器

环境准备

  • 服务器可以连通外网或者有内网yum源服务器,本次实验服务器可连通外网
  • nginx01和nginx02服务器需要在同一网段的网络内
  • 保证各服务器之前网络互通
  • 保证服务器的防火墙和selinux关闭
  • 必须对外提供域名访问,否则只能使用其中一个vip
  • 内网部署DNS服务器,模拟DNS轮询解析

1、网络架构

2、实验服务器分布

主机 ip 操作系统 软件 端口 vip
nginx01 192.168.56.101 Centos7.6 nginx keepalived 80 192.168.56.200
nginx02 192.168.56.106 Centos7.6 nginx keepalived 80 192.168.56.201
fcs01 192.168.56.101 Centos7.6 tomcat 8080
fcs02 192.168.56.106 Centos7.6 tomcat 8080
共享存储 192.168.56.108 Centos7.6 nfs
缓存 192.168.56.108 Centos7.6 redis 6379
内部DNS 192.168.56.108 Centos7.6 bind 53

3、redis

部署服务器:

192.168.56.108

3.1 配置redis

/etc/redis.conf

# 监听地址
bind 0.0.0.0
# 认证密码
requirepass yozosoft

3.2 启动redis

systemctl enable redis --now && systemctl status redis

4、nfs

4.1 配置nfs

192.168.56.108(服务端)

# 创建存储目录
mkdir -p /opt/yozo/data
# 修改权限
chown -R nfsnobody.nfsnobody /opt/yozo/data
# 修改配置文件
vim /etc/exports/opt/yozo/data 192.168.56.0/24(rw,sync,all_squash)

192.168.56.101/192.168.56.106(客户端)

# 创建挂载点
mkdir -p /opt/yozo/data
# 挂载nfs共享目录
mount -t nfs 192.168.56.108:/opt/yozo/data /opt/yozo/data

4.2 启动nfs

systemctl enable rpcbind nfs --now && systemctl status rpcbind nfs

5、fcsserver

部署服务器:

192.168.56.101(fcsserver01)

192.168.56.106(fcsserver02)

5.1 部署fcs

以tomcat为中间件,本次实验fcs安装目录/opt/yozo/fcsserver/webapps/fcsserver,/opt/yozo/fcsserver为解压后的tomcat

部署项目包

mkdir opt/yozo/fcsserver/webapps/fcsserver -p
unzip fcscloud.war -d opt/yozo/fcsserver/webapps/fcsserver

修改fcsserver配置文件

# /opt/yozo/fcsserver/webapps/fcsserver/WEB-INF/classes/config.properties
inputDir=/opt/yozo/data/fcsdata/input  # 必须指定挂载共享存储目录的
outputDir=/opt/yozo/data/fcsdata/output
# 如果不提供域名,就只能配置其中一个vip;如果配置为域名,则缓存后,通过vip和fcsserver的ip将不能访问转换的缓存文件
viewDomain=http://www.fcsserver.com/fcsserver/
# /opt/yozo/fcsserver/webapps/fcsserver/WEB-INF/classes/application.yml
cache:                            #采用哪种缓存数据方式type: redis                     #local,redis,mysql(local模式只适用于单机,集群部署不支持)redis:enable: true                    #redis开关(预览设置权限时需要使用redis,并发和异步waitting机制使用redis,必开)redis:database: 1 # Redis数据库索引(默认为0)timeout: 10000 #设置客户端超时时间,单位是毫秒,默认为2000password: yozosoft #密码#单机版host: 192.168.56.108port: 6379
# /opt/yozo/fcsserver/webapps/fcsserver/WEB-INF/classes/
<property name="LOG_HOME">../logs</property>

5.2 配置fcs系统服务

配置fcsserver.service

# cat /usr/lib/systemd/system/fcsserver.service
[Unit]
Description=fcsserver Service.
After=network.target[Service]
Type=forking
Environment="PATH=/opt/yozo/jdk-8u251-amd64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
WorkingDirectory=/opt/yozo/fcsserver/bin
ExecStart=/opt/yozo/fcsserver/bin/startup.sh
Restart=always
PrivateTmp=true
# 可以指定相关用户启动fcsserver
# User=yozo
# Group=yozo
LimitNOFILE=65536[Install]
WantedBy=multi-user.target

如果以普通用户启动,需要将tomcat目录属主属组设置成相应账户

# 此次实验以yozo用户启动
chown -R yozo. /opt/yozo/fcsserver

5.3 启动fcs

systemctl enable fcsserver --now && systemctl status fcsserver

6、nginx

部署服务器:

192.168.56.101(nginx01)

192.168.56.106(nginx02)

6.1 配置nginx

/etc/nginx/conf.d/fcsserver.conf配置

server {....location ~ /fcsserver {add_header Cache-Control private,no-store,max-age=0,no-cache,must-revalidate,post-check=0,pre-check=0;proxy_redirect off;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded_Proto "http";proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_request_buffering off;proxy_read_timeout 7200;proxy_send_timeout 7200;proxy_pass http://fcsserver;}....
}upstream fcsserver {server 192.168.56.101:8080 fail_timeout=60s;server 192.168.56.106:8080 fail_timeout=60s;keepalive 256;
}

6.2 启动nginx

systemctl enable nginx --now && systemctl status nginx

7、keepalived

部署服务器:

192.168.56.101(nginx01)

192.168.56.106(nginx02)

7.1 配置keepalived

7.1.1 nginx01配置

/etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {router_id proxy1
}
vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh"interval 2weight 20fall 3rise 2
}
vrrp_instance VI_1 {state MASTERinterface enp0s3virtual_router_id 51priority 100                           advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.56.200                     }track_script {chk_nginx}
}
vrrp_instance VI_2 {state BACKUPinterface enp0s3virtual_router_id 52priority 90                            advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.56.201                     }track_script {chk_nginx}
}

7.1.2 nginx02配置

# 备份keepalived.conf
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.confbak

/etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {router_id proxy2
}
vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh"interval 2weight 20fall 3rise 2
}
vrrp_instance VI_1 {state BACKUPinterface enp0s8virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.56.200}track_script {chk_nginx}
}
vrrp_instance VI_2 {state MASTERinterface enp0s8virtual_router_id 52priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.56.201}track_script {chk_nginx}
}

双机/etc/keepalived/check_nginx.sh

#!/bin/bash
#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
#计算nginx进程数量
n=`ps -C nginx --no-heading|wc -l`
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if [ $n -eq "0" ]; then/etc/init.d/nginx startn2=`ps -C nginx --no-heading|wc -l`if [ $n2 -eq "0"  ]; thenecho "$d nginx down,keepalived will stop" >> /var/log/check_ng.logsystemctl stop keepalivedfi
fi

7.2 启动keepalived

systemctl enable keepalived --now && systemctl status keepalived


nginx01


nginx02

7.3 模拟故障

7.3.1 nginx01手动关闭nginx

nginx故障后,keepalived会自动启动nginx

7.3.2 nginx01手动关闭keepalived

nginx01的vip将会绑定到nginx02上面,nginx02将会出现2个vip,2个vip均可以访问fcsserver




8、DNS服务器部署

用于模拟公网DNS轮询解析,实际使用中是在域名提供商处配置指向映射外网ip

8.1 配置dns

/etc/named.conf

zone "fcsserver.com" IN {type master;file "fcsserver.com.zone";
};zone "56.168.192.in-addr.arpa" IN {type master;file "192.168.56.zone";
};

/var/named/fcsserver.com.zone


$TTL    86400
@               IN SOA  tom jerry (                     ; tom & jerry 这两个参数本应是主机名和邮件地址,这里随便填写,没有问题42              ; serial (d. adams)3H              ; refresh15M             ; retry1W              ; expiry1D )            ; minimumIN NS           ns.fcsserver.com.            ; notice : don't forget the dot in the endIN MX 10        mail.fcsserver.com.
www             IN A            192.168.56.200
www             IN A            192.168.56.201
ns              IN A            192.168.56.108
mail            IN A            192.168.56.108

/var/named/192.168.56.zone

$TTL    86400
@       IN      SOA     ns.fcsserver.com. root (1997022700 ; Serial28800      ; Refresh14400      ; Retry3600000    ; Expire86400 )    ; MinimumIN      NS      ns.fcsserver.com.
200     IN      PTR     www.fcsserver.com.
201     IN      PTR     www.fcsserver.com.
108     IN      PTR     mail.fcsserver.com.
108     IN      PTR     ns.fcsserver.com.

修改权限

chown named. /var/named/ -R

8.2 启动dns服务

systemctl enable named --now && systemctl status named

9、验证

目标:本次实验有2个vip 192.168.56.200 和 192.168.56.201,需要验证www.fcsserver.com分别解析到2个vip上,并确认每个vip后端服务正常可用

9.1 客户端dns配置

测试期间,禁用其他网卡,只留虚拟机网卡

添加DNS


9.2 DNS缓存清理


9.3 域名访问测试

测试之前需要确认此次DNS解析是否指向所需测试的VIP,如果不是请刷新DNS缓存

需要测试www.fcsserver.com --> 192.168.56.200和www.fcsserver.com --> 192.168.56.201

文件转换测试

转换文件访问测试

注:fcsserver的配置文件中viewDomain配置为域名,故转换文件预览连接只能通过www.fcsserver.com可以正常访问,通过vip、nginx ip、fcsserver ip均不可以访问

永中文档在线转换预览双活实现方案相关推荐

  1. 用JAVA如何实现word文档在线编辑预览的功能?

    免费方案: ①采用dsoframer. dsoframer是微软提供一款开源的用于在线编辑.调用Word. Excel .PowerPoint等的ActiveX控件.缺点:只支持IE浏览器,由于dso ...

  2. 使用永中文档实现java在线预览Word,Excel,Pptx,Pdf

    使用永中文档实现java在线预览Word,Excel,Pptx,Pdf 永中文档提供了在线预览的功能 永中开发者文档 如果需要直接运行,请直接修改代码中的两个参数 转换类型在下方,根据传入以及输出类型 ...

  3. 基于java的格式转换,word 转 pdf、word 转图片、office 格式转换、在线文件预览

    一.项目简介 不管你是java程序员.c++程序员,python程序员,在开发项目中肯定遇到过格式转换的问题,如何轻松搞定格式转换的问题呢?当然是百度啦!面向百度编程已经成为当下程序员的日常操作. 基 ...

  4. 智能媒体管理产品文档转换/预览功能介绍(4)--快速搭建

    摘要: 智能媒体管理提供了 Cloud Native 架构的文档转换/预览服务,本文介绍快速搭建的示例,让您用 DIY 的体验方式实现文档预览功能. 一.导语 智能媒体管理 提供了 Cloud Nat ...

  5. 智能媒体管理产品文档转换/预览功能介绍(1)---Cloud Native架构

    一.导语 办公文档是每个人日常频繁使用的工具,ppt.word.xls.wps.pdf等为我们工作和生活带来了很多的便利,本文介绍在云计算和智能手机时代,基于 智能媒体管理 的新型Cloud Nati ...

  6. 厉害了,手把手教你搭建一个代码在线编辑预览工具

    点击下方"前端开发博客",选择"设为星标" 回复"2"加入前端群 简介 大家好,我是一个闲着没事热衷于重复造轮子的不知名前端,今天给大家带来 ...

  7. 手把手教你快速搭建一个代码在线编辑预览工具

    简介 大家好,今天我跟大家分享的是一个代码在线编辑预览工具的实现教程,手把手教你完成这样一个项目. 目前这类工具使用很广泛,常见于各种文档网站及代码分享场景,相关工具也比较多,如codepen.jsr ...

  8. 最近很火的在线文件预览txt、doc、ppt、pdf、excel、jpg、png、zip、tar.gz等各种文件及压缩文件在线解压和预览,包括前后端设计和源码,编写搜索引擎多关键词检索名称和内容(四)

    最近很火的在线文件预览txt.doc.ppt.pdf.excel.jpg.mp4.png.zip.tar.gz等各种文件及压缩文件在线解压和预览,包括前后端设计和源码,编写一个文件搜索引擎实现多关键词 ...

  9. 最近很火的在线文件预览txt、doc、ppt、pdf、excel、jpg、png、zip、tar.gz等各种文件及压缩文件在线解压和预览,包括前后端设计和源码,编写搜索引擎多关键词检索名称和内容(五)

    最近很火的在线文件预览txt.doc.ppt.pdf.excel.jpg.mp4.png.zip.tar.gz等各种文件及压缩文件在线解压和预览,包括前后端设计和源码,编写一个文件搜索引擎实现多关键词 ...

最新文章

  1. Android开发常用框架汇总
  2. 基于 Docker 的 MySQL 导入导出数据
  3. 【paddlepaddle速成】paddlepaddle图像分类从模型自定义到测试
  4. storm 简介及单机版安装指南
  5. Spring MVC原理及配置详解
  6. php中用户验证的方式,在php中进行用户身份验证的最佳方式是什么?
  7. 吉林考生多少分能考上东南大学计算机专业,吉林多少分能上985大学?附吉林高考985录取分数线(2021年参考)...
  8. 奇淫技巧之整形数组偏移量
  9. SPOJ PGCD (mobius反演 + 分块)
  10. freescale 基于arm m0的单片机
  11. 【语言去噪】基于matlab GUI IIR+FIR滤波器语音去噪【含Matlab源码 1027期】
  12. MPLS流量工程(TE)
  13. 自动驾驶汽车也要驾考了,能否上路在此一举,老司机看了考试内容惊呆了!
  14. 微信小程序支付错误提示“商户号mch_id或sub_mch_id不存在”
  15. (转)WAVE PCM 声音文件格式
  16. 欧式距离和曼哈顿距离的比较
  17. 算法(Algorithm)
  18. abaqus script提取应力应变位移 odb学习 addData
  19. Hspice-重要的入门仿真语句
  20. 一个简单漂亮的网址导航HTML5源码

热门文章

  1. 如何保证企业服务器安全-MCK主机加固解决方案
  2. DriverStudio开发PCI设备DMA数据传输
  3. post_thumbnail_html,使用WordPress函数the_post_thumbnail_url()获取特色图片缩略图URL
  4. 数据分析与挖掘实战-电子商务网站用户行为分析及服务推荐
  5. DBIDBD::mysql安装
  6. 山东大学数据库实验一、二、三、四、五、六、七、八、九答案(大集合)
  7. 【转载】CPU散热器详解
  8. 快狗打车重新定义同城货运,迟早抢滴滴饭碗?
  9. MATLAB 基础知识 数据类型 表 创建和使用表
  10. 【深入UCSC Genome Brower】写在前面