开发者社区> 问答> 正文

canal 发生 HA后,部分任务在新的canal-server启动失败

环境信息

1.1.4 5.8

问题描述

部署俩台canal-server,A和B,

基于SpringCanalInstanceGenerator启动,position上传到zk, A先启动,然后启动B,B相当于做A的上任务的standby节点, A上配置了39个destination复制binlog的任务 当stop A 进程,通过canal的HA机制任务被B接管,但是部分的任务出现了异常(39个出现了5个异常),异常如下

期待结果

正常启动

实际执行情况

部分任务启动失败

2021-04-13 11:13:14.340 [pool-34-thread-1] WARN c.a.o.canal.instance.spring.SpringCanalInstanceGenerator - 1. SpringCanalInstanceGenerator generate real destination : xxxxx 2021-04-13 11:13:14.383 [pool-34-thread-1] INFO c.a.o.c.i.spring.support.PropertyPlaceholderConfigurer - Loading properties file from class path resource [canal.properties] 2021-04-13 11:13:14.383 [pool-34-thread-1] INFO c.a.o.c.i.spring.support.PropertyPlaceholderConfigurer - Loading properties file from class path resource [instance.properties] 2021-04-13 11:13:14.384 [pool-34-thread-1] WARN c.a.o.c.i.spring.support.PropertyPlaceholderConfigurer - Could not load properties from class path resource [instance.properties]: class path resource [instance.properties] cannot be opened because it does not exist

推测原因

个别${canal.instance.destination}的值没有被spring初始化时获取,导致到destination为空,无法找到{destination}/instance.properties

....... 通过查看canal的代码发现以下的点可能会导致这种case发生

AbstractMysqlEventParser.start方法中 synchronized (CanalEventParser.class) { System.setProperty("canal.instance.destination", destination);

} finally{ System.setProperty("canal.instance.destination", ""); }

SpringCanalInstanceGenerator.generate方法中 synchronized (CanalEventParser.class) { System.setProperty("canal.instance.destination", destination); } finally{ System.setProperty("canal.instance.destination", ""); }

以上逻辑觉得存在并发修改{canal.instance.destinatio}情况,因为这个俩个都是在不同线程执行的,但是他们之间都是用各自的类锁的同步,应该持有同一把锁才能将canal.instance.destination设置和清除进行同步

解决办法:

将AbstractMysqlEventParser和SpringCanalInstanceGenerator 中synchronized(配置相同的类锁)

原提问者GitHub用户yangzhongj

展开
收起
山海行 2023-04-27 18:25:44 90 0
1 条回答
写回答
取消 提交回答
  • 判断是正确的,需要基于相同锁避免进行并发修改

    原回答者GitHub用户agapple

    2023-04-28 13:27:40
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载