反饋已提交
網絡繁忙
某个节点出现异常或已经宕掉,无法继续在 Redis 集群中提供服务。
1)登录 Redis 集群,输入cluster nodes检查 Redis 集群状态,如下所示:
./redis-cli -h ip -p 端口 -a 密码 #客户端远程连接某个节点,输入对应的ip、端口、密码
当检查到某个 Redis 节点是宕机(fail)状态,请及时检查该 Redis 节点进程,若进程还在,则 kill 掉进行重启,若进行不在,则直接启动该节点,启动后再次进行检查是否恢复。
2)如果想进一步确认 Redis 集群的可用性,可以连接某个主节点(master)测试是否能够写入 key
正常情况如下所示:
异常情况如下所示:
当检测到 Redis 集群是无法写入(down)的状态时,此种异常较为罕见,建议重启整个 Redis 集群。
节点启动过程会与第一个加入集群的节点对比jar包是否一致,若检测到不一致情况,则前端进行异常展示并给出详细的异常信息。
参照异常提示, 检查各个节点下的 JAR 包并进行调整,调整完毕后重启节点,再观察是否还有报错。
该节点与文件同步基准节点进行文件同步时,出现同步错误或者请求超时,重复尝试 3 次仍然无法成功,则前端进行异常展示。
检查节点间通信、网络状态是否正常,若有异常则及时进行调整。
集群为了便于及时发现并排查问题,针对异常情况也会进行异常通知,通知包括邮件通知、短信通知、消息通知,平台开通集群异常提醒即可收到。
前往集群节点管理界面,看看报脱离的节点是否还存在。
1)如果节点已经消失,在服务器中查看应用进程,若进程还在,则kill掉再进行重启,若进程已经不在了,则直接重启该节点工程
2)如果节点还存在,则前往智能运维-内存管理或者直接进入服务器内查看节点的内存/CPU占用情况,看看是否有飙升现象,如果节点内存/CPU过高,则重启该节点
上面两种方法仅为临时解决方案,造成节点脱离的原因大致有三个:负载过高导致频繁FullGC、线程阻塞导致内存/CPU飙升、节点宕机
检查各个节点的时间是否一致,当节点间系统时间误差超过30s时会进行报错提醒,因为包括登录等基础功能的使用可能会受到时间不一致的影响。
windows系统可以手动将各个节点的系统时间调为一致,Linux系统调整节点间时间可以参考文档:Linux 系统如何配置各个节点的时间一致性?-https://help.fanruan.com/finereport/doc-view-2727.html
如果是启动后发现连接不上文件服务器,工程会自动恢复为节点间自动同步模式,保证工程能够起来,此时我们经过从文件服务器状态,防火墙是否开放端口等角度进行排查。
如果是使用过程中出现了这个报错,则从三个方向进行排查:
1)检查文件服务器的状态,看看是否是文件服务器宕机了
2)检查配置的WEB-INF目录是否还能正常读写
3)检查文件服务器的磁盘空间剩余情况,可能是磁盘满了导致无法读写,若磁盘满需要扩充磁盘空间
设计器远程设计切换到某个节点之后,当服务器断开连接,远程设计没有提示断开连接。
1)现在弹窗触发 是基于Socket.IO 监听 disconnect 事件,但是这个事件断开后需要几秒到几十秒不等才会被响应 (这个时间没法把控 取决于断开的形式:
如果是服务器直接关闭的话,可以很快响应。
如果是 vpn 断开的话 响应较慢,响应后就会弹窗。
2)远程设计有自己的心跳机制,30s 进行一次连接校验。若连续超过3次校验失败,则判断为断开连接,这个目前也有断开的事件 90s+后被响应的情况,时间是可控的可配置的。
并不是远程设计没有断开,而是提示离开集群环境的响应弹窗出现速度比较慢,此问题在后续会进行优化。
且后续产品中远程设计心跳断开也会提供提示。
切换工作目录到远程环境,启用 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 端口正常,各个节点只能看到自己的节点信息。
这种情况一般是两个节点的集群 id 不一致导致,检查两个节点WEB-INF/config/db.properties文件的 hibernate.connection.url 值是否一致(字面意思,要一模一样,不要使用 localhost),如果不一致表示属于不同集群,所以会出现节点看不到对方节点,对于使用 oracle 数据库的,还需要检查 hibernate.default_schema 是否一致。
节点 id 冲突,各个节点只能看到同一个节点的信息(2019.06以前版本)。
1)到每个节点的集群配置/节点管理查看id是否冲突。
2)排查下面的原因:
可能原因:
docker部署
(同镜像同启动顺序时,docker 指定的 mac 地址是一样的),或者使用了桥接模式,没有第三方网络工具的情况下应使用 host 模式,让宿主机和容器共享 ip 和端口。
亚马逊服务器 EC2
(或者类似的虚拟服务器)上部署(和上面类似,没有独立的 mac 地址?)。
cluster.properties
手动在各机器 cluster.properties 指定了一样的节点 id。
问题描述:
集群部署时,状态服务器为 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)然后停止服务,重启各节点即可。
本文档的解决方案适用于 JAR 包 2019-11-08 之前发布的版本,2019-11-08 及以后发布的版本可以直接在前端修改参数:集群参数配置
为了解决一些集群环境单节点故障导致的问题,我们对「集群内部转发逻辑」进行了优化。对于节点之间的请求设置了超时时间,默认的读写超时时间是 90000(单位ms),对于部分用户来说,这个参数会影响模板的访问并会收到异常消息通知,如有此情况可根据本帮助文档自行调整。
报错页面:
异常通知:
可以通过手动在配置数据库 fine_conf_entity 表中插入对应的字段和值来进行调整,如下:
ClusterRedirect
Config.socket
Timeout
含义:
读写超时的时间,如果在超时时间内服务器未返回或收到任何数据,视为超时,超时 5 次会通知管理员检查节点状态。
参数调整建议:
如果没有大数据量计算或导出的模板,则建议配置不超过 90000(单位ms)。如果有大数据量计算或导出的模板,则根据最长耗时的模板时间进行配置。
说明:
这个参数与 nginx 中的参数为 proxy_read_timeout 和 proxy_send_timeout 对应,不能超过nginx 里的这两个参数的值。
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙