canal icon indicating copy to clipboard operation
canal copied to clipboard

Canal Admin 修改了配置后,Canal Server不会发生变更,即使重启Canal Server也不行

Open songlongkuan opened this issue 4 years ago • 8 comments

environment

  • canal version: 1.4.1
  • mysql version:5.6

Issue Description

首先我这个是没有部署zk集群,现在是单机部署canal-admin、canal-server

server 管理里面有一个单机实例,并且状态是启动状态,并且在这里操作停止、启动 都是生效的,这个没有问题 QQ20210409-105907@2x

再然后是这个instance管理的问题 1、如果我新增instance的话,新增的instance永远都是停止状态,启动不了,我必须去canal-server手动更改canal.properties文件中的canal.destinations 字段 手动增加instance名,并重启,这个状态才会变成启动,即使我在server管理去修改canal.destinations 字段后重启canal-server 也无效。 2、启动状态的instacne 点停止,提示成功后,并没有成功,即使我重启canal-server后也还是启动状态。 3、停止状态的instance 点启动 ,也是一样提示成功,但是还是停止状态。 4、在canal-admin 修改instance配置并不会生效到canal-server,即使重启canal-server也无效

不知道是不是哪里操作有问题? 而且也没观察到什么错误日志。 QQ20210409-110233@2x




update ------------------------------------------ 刚翻源码看了一下Canal Admin的修改instance配置接口,发现只是更新到数据库,并没有推送到canal-server
update ------------------------------------------ 翻了一下canal-server源码,发现在启动的时候会合并admin的配置和本地配置,admin的配置被本地配置覆盖了 把合并代码注释后,已解决canal.properties本地覆盖远程配置的问题。
update ------------------------------------------ 在canal-server 的parseInstanceConfig方法里,发现从canal.properties 尝试拿取instance的manager地址

String managerAddress = getProperty(properties, CanalConstants.getInstanceManagerAddressKey(destination));

需要在canal.properties 配置一下instance的manager地址。中间的{0}是instance名

canal.instance.{0}.manager.address=xxx

于是我在canal-admin加上instance的manager配置,这样的情况下,canal-admin 在server管理添加destinations后,再去新增instance,这种情况下instance是启动状态了,不再是以前的停止状态。 但是 这个instance没用啊... 客户端监听不到这个instance 而且我观察了下canal-server,conf目录下按照destinations名创建了文件夹,但是里面只有一个h2.xxx的db文件,没有那个meta.log,而且logs目录下也没有destinations的日志


update ------------------------------------------

没有找到canal 去拉取instance的properties代码,救救孩子吧

songlongkuan avatar Apr 09 '21 03:04 songlongkuan

改了一通,最后配置文件是可以同步到canal-server了

CanalLauncher 这个类 注释掉下面这行代码
     // merge local
     managerProperties.putAll(properties);


PlainCanalInstanceGenerator 这个类 注释掉下面这行代码
     // merge local
    properties.putAll(canalConfig);

另外,在canal-admin的server配置里加上 把{0} 替换为instance 的name 有几个instance就加几个instance

canal.instance.{0}.manager.address=xxx

还有记得加destinations,也是有几个加几个,也在canal-admin的server配置里

canal.destinations = xxxx,xxxx

最后一个问题,点instance的停止,没用,停不掉。算逑,先不管了

songlongkuan avatar Apr 09 '21 08:04 songlongkuan

是不是停止维护了,大半年没更新了

RainingNight avatar Apr 09 '21 09:04 RainingNight

是不是停止维护了,大半年没更新了

不知道啊,但是阿里的中间件都不太省心....

songlongkuan avatar Apr 09 '21 09:04 songlongkuan

是不是停止维护了,大半年没更新了

不知道啊,但是阿里的中间件都省心……

admin 坑真的是太多了,我准备自己写一个了

lixindong-youmin avatar May 07 '22 03:05 lixindong-youmin

请问一下,这个问题,后来有结论吗?

shomzhang avatar Mar 29 '23 12:03 shomzhang

某得结论

RainingNight avatar Apr 27 '23 05:04 RainingNight

救救孩子吧

xiaoxiao-heise avatar Jun 26 '23 08:06 xiaoxiao-heise

我是用集群,我的方法是直接把admin上的配置复制到本地的canal.properties下

Eumenides-K avatar Jul 11 '24 03:07 Eumenides-K