目录
- 背景
- 问题记录
- 20230206 发现服务启动失败
- 20230215 有一台worker不执行作业,其它均正常
- 问题解决
- 问题思考
背景
之前分享过海豚调度2.0.5连接星环库使用记录,后来说存储过程又出现了超时的情况,原因是因为调度星环驱动包和生产星环库驱动包不一致,运维人员对调度驱动包进行了升级(inceptor-driver-4.8.3.jar
至 inceptor-driver-6.0.2.jar
),环境重启后,测试通过。
问题记录
20230206 发现服务启动失败
后来排查其它问题时,我发现有两台服务器,上面的服务根本没启动成功。查看日志发现有个类冲突了
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/dolphinscheduler/app/dolphinscheduler/lib/inceptor-driver-6.0.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/dolphinscheduler/app/dolphinscheduler/lib/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
20230215 有一台worker不执行作业,其它均正常
弯路历程:通过jps命令、包括页面中心查看worker服务注册情况,都没有发现问题,接触调度这么久,如果报错的话,worker服务根本不会启动成功,简单看了下最新日志,也没有异常,奇了怪了!折腾了一夜,决定第二天还是找客户拿下全量日志…
The following method did not exist:
com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
The method's class, com.google.common.base.Preconditions, is available from the following locations:
jar:file:/home/dolphinscheduler/app/dolphinscheduler/lib/inceptor-driver-6.0.2.jar!/com/google/common/base/Preconditions.class
jar:file:/home/dolphinscheduler/app/dolphinscheduler/lib/guava-24.1-jre.jar!/com/google/common/base/Preconditions.class
The class hierarchy was loaded from the following locations:
com.google.common.base.Preconditions: file:/home/dolphinscheduler/app/dolphinscheduler/lib/inceptor-driver-6.0.2.jar
问题解决
-
20230206:直接删除
inceptor-driver-6.0.2.jar
中的StaticLoggerBinder.class
-
20230217:直接删除
inceptor-driver-6.0.2.jar
中的Preconditions.class
,本地验证发现,worker可以启动成功,但是api又报类冲突错jar:file:/home/dolphinscheduler/app/dolphinscheduler/lib/inceptor-driver-6.0.2.jar!/com/google/common/collect/Multimaps.class jar:file:/home/dolphinscheduler/app/dolphinscheduler/lib/guava-24.1-jre.jar!/com/google/common/collect/Multimaps.class
直接删除掉
google
整个目录,服务全部启动成功,并且验证通过
问题思考
星环驱动包有内嵌了很多常用jar包,冲突真是家常便饭,目前通过删除jar包中的类或整个目录可以解决
- 假如星环内嵌一个jar包之后,进行了改造,如果通过删除操作,本地应用可以正常启动,但是此时星环可能就不能正常工作了,如何解决?重新开发可以,但是代价太大
- worker启动报错,为什么进程还是启动成功了?
- 关于上线,是否需要一系列繁琐审批流程作为把控?还是直接上线,有问题再继续解决?
之前在银行,审批很严格,修改-测试-打版本-版本验证-申请发布版本....
,最近上线没那么多步骤,很多就是在生产环境直接测试(当然也有一部分原因本地测试环境比较单一,不具备客户的环境条件
好处: 解决问题及时,效率比较高,客户满意;对于那种固定流程的,各种审批,就比较耗时,改问题可能花了半小时,上线可能要三天后,客户可能有意见,对于他来说,你解决这个问题就是花了三天时间
坏处: 容易引发新问题,存在风险,容易引起客户不满意;对于固定流程的,能够有效规避这些问题,保证上线质量,但是缺点还是时间线比较长,尤其很简单的功能,三天后才发布,客户觉得被忽视,还是不满意