FineReport集群部署·Nginx部分踩坑整理
【部署版本】FineReport 11.0
【Linux服务器】CentOS 7.9
————————————————————————————————————————
【帆软应用服务器】JDK + Tomcat + webroot
【FineDB服务器】MySQL
【负载均衡服务器】Keepalived + Nginx
【状态服务器】Redis
【文件服务器】NAS
————————————————————————————————————————
【部署背景】
2台帆软应用服务器(主备),2台FineDB服务器(主备),2台负载均衡服务器(主备),6台状态服务器(三主三从),1台文件服务器
内网所有服务器防火墙均已关闭,内网与办公设备的防火墙开通需提前申请
用户准许使用全root用户部署
————————————————————————————————————————
【参考帮助文档】FineReport文档 > 部署集成 > 集成部署 > Linux系统手动配置高可用集群
————————————————————————————————————————
【部署过程中遇到的问题及原因】
----------------------------------------------------------------------------------------------------
1. 帆软应用服务器
(1) 使用服务器部署包进行部署,执行失败。原因为错装成了Linux版FR设计器的安装包
(2) 单节点部署完成后,使用浏览器访问工程登录页报错。原因为该浏览器所在设备的IP未开通与内网服务器的防火墙
(3) 使用浏览器访问工程登录页,报错“fontconfig不存在”。原因为服务器部署包由于版权原因没有部分字体,在Linux服务器中使用“yum install fontconfig”命令下载即可
(4) 根据帮助文档配置的Tomcat自启动未生效。原因为帮助文档中描述配置文件的java环境变量时多了个“/”;另外Tomcat服务启动日志打印中有不少警告信息,使用“systemctl daemon-reload”命令重启系统服务管理器,使修改生效
(5) 配置FineDB外置库MySQL报错:“Table 'finedb.fine_conf_entity' doesn't exist”。原因为MySQL新建finedb数据库时,字符集编码设置为了“utf8mb4”和“uft8mb4_bin”,FineDB外置MySQL数据库时,不支持太新的字符集编码,应修改为“utf8mb3”和“utf8_bin”
----------------------------------------------------------------------------------------------------
2. 负载均衡服务器
(1) Nginx编译安装后,在Nginx安装目录的sbin目录下启动./nginx,报错:“OPENSSL_init_ssl() failed”。原因推测为openssl-1.1.1a组件太老,与Nginx-1.26.2不适配
(2) 输入“make”进行Nginx预编译时报错:“Can't locate IPC/Cmd.pm in @INC (@INC contains: /路径 /路径)”。原因为缺少相应的组件或环境,输入命令“yum install perl-IPC-Cmd”即可解决
(3) 根据帮助文档操作,到指定路径那一步报错:“error: the HTTP rewrite module requires the PCRE library”。原因为缺少对应的库,通过yum命令安装即可
(4) Nginx编译安装后,在Nginx安装目录的sbin目录下启动./nginx,报了6行相同的错:“nginx: bind() to 0.0.0.0:80 failed (98:Address already in use)”。原因为80端口被占用了,使用kill命令干掉占用的进程
(5) 重新部署Nginx并按照帮助文档编译安装后,Nginx安装目录下却没有新增sbin、conf等配置文件夹。原因为缺少相应的组件或环境,使用“yum install -y make gcc autoconf automake libtool pkg-config zlib-devel perl bison flex openssl-devel perl-IPC-Cmd Perl-CPAN”命令下载所有用到的东西
(6) 使用网上找到的最新版本的健康检查补丁,启动Nginx时总是报错:“nginx: unknown directive "healthcheck_status" in /路径/nginx.conf :59。个人猜测是新版本健康补丁的部分组件名称发生变化,帮助文档中的配置文件还是老版本的,所以配置不成功(于是健康检查补丁暂时改为帮助文档提供的老版本)
注意:如果是用“yum”命令下载的Nginx相关依赖包,可以先查看以下版本号。以openssl组件为例,“openssl -version”,如果想卸载,直接使用“yum remove openssl”命令即可卸载
注意:如果之前安装了健康检查补丁,现在想卸载掉,直接在原安装命令中加“-R”即可干净卸载,例如:
patch -p1 -R < /data/nginx/ngx_healthcheck_module-master/nginx_healthcheck_for_nginx_1.14+.patch
(7) 按照帮助文档配置Keepalived后,浏览器访问发现配置的虚拟IP并未生效,查看keepalived启动日志,报错:“VRRP_Instance(VI_1) ignoring received advertisment...(VI_1):ip address associated wiith VRID 33 not present in MASTER advert:192.168.101.200;bogus VRRP packet received on eth0 !!!”。原因为配置文件中的【virtual_router_id】参数和已有局域网中的VID配置重复(冲突)了,换一个0~255之间的其他数字即可
----------------------------------------------------------------------------------------------------
3. 最终集群部署
(1) 复制主节点的webroot工程到从节点,启动从节点,在浏览器中访问FR登录页,直接报错:
“抱歉,您无法访问该页面 cannot find store device 请联系管理员”。
原因为:我在将主节点的webroot工程复制到从节点时操作有问题,我是直接删除从节点的webroot工程,然后放上主节点的webroot工程,这样会有一定问题,应当严格采用覆盖的方式;
而且从节点自始至终就不应该启动,我之前启动了从节点,还配置了外置库,这也可能是报错的原因;
另外可能是NAS挂载路径的原因,我在主节点新建了挂载路径/data/nfs,从节点没有新建,这也可能是报错的原因
(2) 集群完全部署成功后,上传注册信息license报错:“请检查ftp路径是否有写文件权限,请检查工程环境网络,请检查集群工程各节点与文件服务器的连接状态。”我逐一检查发现都没有问题,后来重启了一下Linux系统就好了,原因不明