反馈已提交

网络繁忙

当前为10.0版本文档,只有最新版本的文档支持在线编辑修改,如果想创建/编辑文档,请移步至 最新版帮助文档

集群常见报错及解决方案

  • 文档创建者:Vic.zhang
  • 历史版本:28
  • 最近更新:Leo.Tsai 于 2022-10-18
  • 1. 集群前端报错

    1.1 Redis 集群节点异常

    1.1.1 问题现象

    1573107910501965.png

    1.1.2 报错原因

    某个节点出现异常或已经宕掉,无法继续在 Redis 集群中提供服务。

    1.1.3 解决方案

    1)登录 Redis 集群,输入cluster nodes检查 Redis 集群状态,如下所示:

    ./redis-cli -h ip -p 端口 -a 密码 #客户端远程连接某个节点,输入对应的ip、端口、密码

    1573108051423684.png

    当检查到某个 Redis 节点是宕机(fail)状态,请及时检查该 Redis 节点进程,若进程还在,则 kill 掉进行重启,若进程不在,则直接启动该节点,启动后再次进行检查是否恢复。

    2)如果想进一步确认 Redis 集群的可用性,可以连接某个主节点(master)测试是否能够写入 key

    正常情况如下所示:

    1573107999604414.png

    异常情况如下所示:

    1573108006707753.png

    当检测到 Redis 集群是无法写入(down)的状态时,此种异常较为罕见,建议重启整个 Redis 集群。

    1.2 节点间 JAR 包不一致报错

    1.2.1 问题现象

    1573107984398622.png

    1.2.2 报错原因

    节点启动过程会与第一个加入集群的节点对比jar包是否一致,若检测到不一致情况,则前端进行异常展示并给出详细的异常信息。

    1.2.3 解决方案

    参照异常提示, 检查各个节点下的 JAR 包并进行调整,调整完毕后重启节点,再观察是否还有报错。

    1.3 同步失败报错

    1.3.1 问题现象

    1573107972391888.png

    1.3.2 报错原因

    该节点与文件同步基准节点进行文件同步时,出现同步错误或者请求超时,重复尝试 3 次仍然无法成功,则前端进行异常展示。

    1.3.3 解决方案

    检查节点间通信、网络状态是否正常,若有异常则及时进行调整。

    1.4 平台无法连接到Redis

    报表界面访问的时候,报错:Could not get a resource from the pool 如需访问请联系管理员,如下图所示:

    可能的原因: 

    • Redis 宕机

    • 网络异常

    • 工程运行时修改了 Redis密码

    解决方案:

    • 如果是 Redis 宕机或网络异常,正常排查和解决即可

    • 如果是 Redis 修改了密码需重启 Tomcat 工程,10.0.5 之前版本,需要手动修改数据库中的密码再重启工程,可以用下面的密码加密工具,将明文转为密文保存到数据库,字段为RedisConfig.password;10.0.5 及之后版本重启工程后进入平台页面重新配置 Redis 密码即可

    2. 平台异常通知

    集群为了便于及时发现并排查问题,针对异常情况也会进行异常通知,通知包括邮件通知、短信通知、消息通知,平台开通集群异常提醒即可收到。

    异常原因通知内容解决方案
    JAR 包不一致节点#nodename#与节点#nodename#的 JAR 包不一致,将影响集群工程的稳定性,请前往集群节点管理页面查看详细异常信息,并及时处理1.2 节中已给出
    节点脱离集群提醒节点#nodename#已脱离集群环境,可能原因为:节点FullGC、节点宕机、节点间通信不畅、节点负载过高、其他异常。为避免影响用户使用,请及时检查该节点状态,若该节点长时间无法自行恢复,则建议重启该节点

    前往集群节点管理界面,看看报脱离的节点是否还存在。

    1)如果节点已经消失,在服务器中查看应用进程,若进程还在,则kill掉再进行重启,若进程已经不在了,则直接重启该节点工程

    2)如果节点还存在,则前往智能运维-内存管理或者直接进入服务器内查看节点的内存/CPU占用情况,看看是否有飙升现象,如果节点内存/CPU过高,则重启该节点

    上面两种方法仅为临时解决方案,造成节点脱离的原因大致有三个:负载过高导致频繁FullGC、线程阻塞导致内存/CPU飙升、节点宕机

    节点间时间不一致节点#nodename#与节点#nodename#系统时间相差超过XX秒,为避免影响用户使用,请及时调整使各节点时间保持一致

    检查各个节点的时间是否一致,当节点间系统时间误差超过30s时会进行报错提醒,因为包括登录等基础功能的使用可能会受到时间不一致的影响。

    windows系统可以手动将各个节点的系统时间调为一致,Linux系统调整节点间时间可以参考文档:Linux 系统如何配置各个节点的时间一致性?-https://help.fanruan.com/finereport10.0/doc-view-2727.html

    Redis集群节点异常Redis集群#ip:port#节点已无法正常使用,可能原因为:节点宕机、内存已满、其他异常。为避免影响用户使用,请前往状态服务器配置页面查看详情,并及时处理1.1 节中已给出
    文件服务器宕机文件服务器出现无法正常读写的情况,可能原因为:文件服务器宕机、磁盘已满、其他异常。为避免影响用户使用,请及时检查文件服务器状态

    如果是启动后发现连接不上文件服务器,工程会自动恢复为节点间自动同步模式,保证工程能够起来,此时我们经过从文件服务器状态,防火墙是否开放端口等角度进行排查。


    如果是使用过程中出现了这个报错,则从三个方向进行排查:

    1)检查文件服务器的状态,看看是否是文件服务器宕机了

    2)检查配置的WEB-INF目录是否还能正常读写

    3)检查文件服务器的磁盘空间剩余情况,可能是磁盘满了导致无法读写,若磁盘满需要扩充磁盘空间

    文件同步失败提醒集群节点#nodename#与基准节点存在不一致文件,且无法自动同步。请检测该节点状态1.3 节中已给出

    3. 远程设计

    3.1 服务器断开连接后远程设计没有提示断开

    3.1.1 问题现象

    设计器远程设计切换到某个节点之后,当服务器断开连接,远程设计没有提示断开连接。

    3.1.2 原因分析

    1)现在弹窗触发 是基于Socket.IO 监听 disconnect 事件,但是这个事件断开后需要几秒到几十秒不等才会被响应 (这个时间没法把控  取决于断开的形式:

    • 如果是服务器直接关闭的话,可以很快响应。

    • 如果是 vpn 断开的话 响应较慢,响应后就会弹窗。

    2)远程设计有自己的心跳机制,30s 进行一次连接校验。若连续超过3次校验失败,则判断为断开连接,这个目前也有断开的事件  90s+后被响应的情况,时间是可控的可配置的。

    3.1.3 解决方案

    并不是远程设计没有断开,而是提示离开集群环境的响应弹窗出现速度比较慢,此问题在后续会进行优化。

    且后续产品中远程设计心跳断开也会提供提示。

    3.2 启用 https 远程设计报错

    3.2.1 问题现象

    切换工作目录到远程环境,启用 https,服务器关掉之后,页面不会有提示。后台日志有报错;此时点击模板,会提示模板不存在。如下图所示:

    1.png

    3.2.2 原因分析

    现有的远程设计 websocket 不支持 https,目前仅支持 http,而远程连接断开提醒是基于 websocket 实现,所以不支持页面不会有提示。

    3.2.3 解决方法

    使用 http 模式即可。

    4. 集群启动后各节点只能看到自身节点信息

    4.1 集群间无法通信

    4.1.1 问题描述

    集群间无法通信,各个节点只能看到自己的节点信息。

    4.1.2 原因及解决方案

    1)网络不允许 UDP 组播

    如果网络不允许组波,而通信协议选择的是 UDP,需要改用 TCP。

    2)防火墙未开放集群通信端口

    • 对于 TCP,节点之间需要互相开放 7800, 7810, 7820, 7830, 7840, 7850, 7860, 7870 这八个端口;

    • 对于 UDP,需要随机开放 45588~65536 端口中的一个,满足 UDP 访问。

    • IP 互相 ping 不通(网段和 IP 选择不当)

    容器化部署web集群的时候使用的是bridge模式默认,导致不是同一台宿主机上面的节点不能 ping 通。

    解决方案容器启动镜像的时候采用--net=host采用host模式

    4)启动报错java.net.UnknownHostException: XXXX: XXXX: 未知的名称或服务

    每个节点执行一下,以把 hostname 加到 /etc/hosts 的 127.0.0.1 记录中

    sudo sed -i -e '/127.0.0.1/ s/\(localhost\)/'$(hostname)' \1/' /etc/hosts

    5)ip 显示的不对,需要手动选择服务器实际的ip。

    4.2 节点启动后互相 telnet 78xx 端口正常

    4.2.1 问题描述

    节点启动后互相 telnet 78xx 端口正常,各个节点只能看到自己的节点信息。

    4.2.2 原因及解决方案

    这种情况一般是两个节点的集群 id 不一致导致,检查两个节点WEB-INF/config/db.properties文件的 hibernate.connection.url 值是否一致(字面意思,要一模一样,不要使用 localhost),如果不一致表示属于不同集群,所以会出现节点看不到对方节点,对于使用 oracle 数据库的,还需要检查 hibernate.default_schema 是否一致。

    4.3 节点 id 冲突

    4.3.1 问题描述:

    节点 id 冲突,各个节点只能看到同一个节点的信息(2019.06以前版本)。

    4.3.2 原因及解决方案

    1)到每个节点的集群配置/节点管理查看id是否冲突。

    2)排查下面的原因:

    1573801918832848.png

    可能原因:

    • docker部署

    (同镜像同启动顺序时,docker 指定的 mac 地址是一样的),或者使用了桥接模式,没有第三方网络工具的情况下应使用 host 模式,让宿主机和容器共享 ip 和端口。

    • 亚马逊服务器 EC2

    (或者类似的虚拟服务器)上部署(和上面类似,没有独立的 mac 地址?)。

    • cluster.properties

    手动在各机器 cluster.properties 指定了一样的节点 id。

    5. Redis由单机模式变为集群模式无法登录

    问题描述:

    集群部署时,状态服务器为 Redis,Redis 是单机非集群模式。

    突然无法访问,访问报表登录http://ip:port/webroot/decision页面时,提示 Redis 的错误。无法登录,也无法修改状态服务器模式。

    原因分析:

    主要是状态服务器 Redis 的模式改变造成无法访问。Redis 模式由单机改为集群,状态服务器的模型由单机改为集群。

    解决方案:

    1)登录 MySQL 数据库,修改数据库表信息,SQL 语句如下:

    update fine_conf_entity set value='false' where id='StateServerConfig.clusterMode';

    update fine_conf_entity set value='false' where id='FineClusterConfig.params.cluster';

    2)把各节点下的WEB-INF/config/cluster.config删除。

    3)然后停止服务,重启各节点即可。

    6. 11300016 服务器服务响应时间过长

    本文档的解决方案适用于 JAR 包 2019-11-08 之前发布的版本,2019-11-08 及以后发布的版本可以直接在前端修改参数:集群参数配置

    为了解决一些集群环境单节点故障导致的问题,我们对「集群内部转发逻辑」进行了优化。对于节点之间的请求设置了超时时间,默认的读写超时时间是 90000(单位ms),对于部分用户来说,这个参数会影响模板的访问并会收到异常消息通知,如有此情况可根据本帮助文档自行调整。

    问题描述:

    报错页面:

    12.png

    异常通知:

    13.png

    解决方案:

    可以通过手动在配置数据库 fine_conf_entity 表中插入对应的字段和值来进行调整,如下:

    字段自定义值(单位:ms)注释

    ClusterRedirect

    Config.socket

    Timeout

    90000

    含义:

    读写超时的时间,如果在超时时间内服务器未返回或收到任何数据,视为超时,超时 5 次会通知管理员检查节点状态。

    参数调整建议:

    如果没有大数据量计算或导出的模板,则建议配置不超过 90000(单位ms)。如果有大数据量计算或导出的模板,则根据最长耗时的模板时间进行配置。

    说明:

    这个参数与 nginx 中的参数为 proxy_read_timeout 和 proxy_send_timeout 对应,不能超过nginx 里的这两个参数的值。


    附件列表


    主题: 部署集成
    已经是第一篇
    已经是最后一篇
    • 有帮助
    • 没帮助
    • 只是浏览

    售前咨询电话

    400-811-8890转1

    在线技术支持

    请前往「服务平台」,选择「在线支持」

    热线电话:400-811-8890转2

    总裁办24H投诉

    热线电话:173-1278-1526