概述
--- 集群前端报错 ---
该Redis节点无法正常使用,请及时检查该节点状态
问题描述:
节点管理报错:该Redis节点无法正常使用,请及时检查该节点状态,如下图所示:
原因分析:
某个节点出现异常或已经宕掉,无法继续在 Redis 集群中提供服务。
解决方案:
1)登录 Redis 集群,输入cluster nodes检查 Redis 集群状态,如下所示:
./redis-cli -h ip -p 端口 -a 密码 #客户端远程连接某个节点,输入对应的ip、端口、密码
当检查到某个 Redis 节点是宕机(fail)状态,请及时检查该 Redis 节点进程,若进程还在,则 kill 掉进行重启,若进程不在,则直接启动该节点,启动后再次进行检查是否恢复。
2)如果想进一步确认 Redis 集群的可用性,可以连接某个主节点(master)测试是否能够写入 key
正常情况如下所示:
异常情况如下所示:
当检测到 Redis 集群是无法写入(down)的状态时,此种异常较为罕见,建议重启整个 Redis 集群。
该节点与XXX节点的JAR包不一致
问题描述:
节点管理报错:该节点与XXX节点的jar包不一致,请及时更新jar包并重启该节点,如下图所示:
原因分析:
节点启动过程会与第一个加入集群的节点对比jar包是否一致,若检测到不一致情况,则前端进行异常展示并给出详细的异常信息。
解决方案:
参照异常提示, 检查各个节点下的 JAR 包并进行调整,调整完毕后重启节点,再观察是否还有报错。
集群节点XXX与基准节点存在不一致文件
问题描述:
节点管理报错:集群节点XXX与基准节点存在不一致文件,且无法自动同步,请检查该节点状态,如下图所示:
原因分析:
该节点与文件同步基准节点进行文件同步时,出现同步错误或者请求超时,重复尝试 3 次仍然无法成功,则前端进行异常展示。
解决方案:
检查节点间通信、网络状态是否正常,若有异常则及时进行调整。
异常模块:CLUSTER_MEMBER_MODULE
问题描述:
集群节点页面标红,报错为:该节点存在异常的模块,暂无法正常提供服务,异常模块:CLUSTER_MEMBER_MODULE,如下图所示:
排查步骤及解决方案:
可参考:集群节点标红异常模块CLUSTER_MEMBER_MODULE
Could not get a resource from the pool
问题描述:
报表界面访问的时候,报错:Could not get a resource from the pool 如需访问请联系管理员,如下图所示:
原因分析:
Redis 宕机
网络异常
工程运行时修改了 Redis密码
解决方案:
如果是 Redis 宕机或网络异常,正常排查和解决即可
如果是 Redis 修改了密码需重启 Tomcat 工程,重启工程后进入平台页面重新配置 Redis 密码即可
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)然后停止服务,重启各节点即可。
--- 远程设计 ---
服务器断开连接后远程设计没有提示断开
问题描述:
设计器远程设计切换到某个节点之后,当服务器断开连接,远程设计没有提示断开连接。
原因分析:
1)现在弹窗触发 是基于Socket.IO 监听 disconnect 事件,但是这个事件断开后需要几秒到几十秒不等才会被响应 (这个时间没法把控 取决于断开的形式:
如果是服务器直接关闭的话,可以很快响应。
如果是 vpn 断开的话 响应较慢,响应后就会弹窗。
2)远程设计有自己的心跳机制,30s 进行一次连接校验。若连续超过3次校验失败,则判断为断开连接,这个目前也有断开的事件 90s+后被响应的情况,时间是可控的可配置的。
解决方案:
并不是远程设计没有断开,而是提示离开集群环境的响应弹窗出现速度比较慢,此问题在后续会进行优化。且后续产品中远程设计心跳断开也会提供提示。
启用 https 远程设计报错
问题描述:
切换工作目录到远程环境,启用 https,服务器关掉之后,页面不会有提示。后台日志有报错;此时点击模板,会提示模板不存在。如下图所示:
原因分析:
现有的远程设计 websocket 不支持 https,目前仅支持 http,而远程连接断开提醒是基于 websocket 实现,所以不支持页面不会有提示。
解决方法:
使用 http 模式即可。
--- 集群启动后各节点只能看到自身节点信息 ---
集群间无法通信
问题描述:
集群间无法通信,各个节点只能看到自己的节点信息。
解决方案:
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。
节点启动后互相 telnet 78xx 端口正常
问题描述:
节点启动后互相 telnet 78xx 端口正常,各个节点只能看到自己的节点信息。
解决方案:
这种情况一般是两个节点的集群 id 不一致导致,检查两个节点WEB-INF/config/db.properties文件的 hibernate.connection.url 值是否一致(字面意思,要一模一样,不要使用 localhost),如果不一致表示属于不同集群,所以会出现节点看不到对方节点,对于使用 oracle 数据库的,还需要检查 hibernate.default_schema 是否一致。
节点 id 冲突
问题描述:
节点 id 冲突,各个节点只能看到同一个节点的信息(2019.06以前版本)。
排查步骤:
1)到每个节点的集群配置/节点管理查看id是否冲突。
2)排查下面的原因:
docker部署
(同镜像同启动顺序时,docker 指定的 mac 地址是一样的),或者使用了桥接模式,没有第三方网络工具的情况下应使用 host 模式,让宿主机和容器共享 ip 和端口。
亚马逊服务器 EC2
(或者类似的虚拟服务器)上部署(和上面类似,没有独立的 mac 地址?)。
cluster.properties
手动在各机器 cluster.properties 指定了一样的节点 id。
--- 其他 ---
文件解析失败
问题描述:
在集群迁移前后环境的 JAR 包版本一致的前提下,集群迁移时,导入附件 resource.zip 出错,报错如下图所示:
原因分析:
配置 Nginx 的集群环境,Nginx 默认限制只能上传小于 1M 的文件,当资源迁移的resource.zip过大时会上传失败。
注:单机无上传限制
解决方案:
打开/nginx/nginx.conf,修改 Nginx 的配置文件,增大 Nginx 上传文件大小限制。如下图所示:
图中的 8M 可自行根据需求修改大小,代码如下所示:
client_max_body_size 8M; client_body_buffer_size 128k;
修改完成后,重新加载配置文件,即可重新成功上传。