前置说明

  • canal版本1.1.4
  • 已有的canal-web中,配置好的server只有一个,一个server下面是多个实例
  • 一个server停止下面的实例全部停止
  • 也可以停止单独一下实例
  • 有正在运行的实例,也有停止的实例
    canal-web上server情况

问题描述

  • 通过canal-web页面操作实例启动或者停止,失效(启动的停止不了,停止的启动不了),但是元数据库中canal_instance_config.status字段状态是可以改变的,只不过页面上的显示的状态不会变
    canal-web操作启动或停止

  • zookeeper中的配置信息只有running这一项,别的都没有(下图是正常的zookeeper中的配置信息)
    canal-web zookeeper异常说明

  • 新建实例也不行能正常启动,但是都没有什么太明显的异常显示

问题分析

  • 可能由于在新增实例完成后(新增一个实例后,会自动启动),直接点停止,导致zookeeper上面的元数据没有创建完成,只有running这一个文件
  • 因为这个running代表着其实是这个实例一直在运行着(但是并不能正常的同步binlog信息),如果删除zookeeper上面的这个实例的元数据信息后,还会自动生成,导致zookeeper上面一直有这个实例的元数据信息
  • 有可能是因为这个实例一直不能正常使用,导致整个canal-web操作都失效
  • 但是这并不影响已经启动并正常同步的实例

尝试操作

  • 首先试过通过canal-web删除相应实例,但是这个删除并不能删除linux上面的实例文件夹,也不能删除zookeeper上面的元数据,只是在canal-web元数据配置表中删除了这一个实例的相关信息,所以在删除后,还是不能恢复正常,再重新建立也不可以,建立实例名不一样的实例也不能成功启动
  • 接着试一下直接删除zookeeper上面的配置信息,结果是删除后,还会自动创建,因为实例还在运行
  • 那就在想,要怎么样能停止实例,单独停止实例是停止不了,那么就只能是把server整个停止

解决办法

  1. 停止server,在停止server的时候,日志中确实打印出来这个异常实例的停止信息了,这回有希望了
  2. 然后去zookeeper上面手动删除异常实例的配置信息,删除成功,并且不会在自己创建了
  3. 这回在启动server,注意,已经在运行的正常实例不用单独关闭,因为server在停止的时候是全停止,在启动的时候,会把之前已经启动的实例,还会启动起来,也就是说server停止前什么样,server重启后还是什么样,因为异常实例在zookeeper已经删除了,所以server重启后异常实例就不会再启动了

zookeeper上的异常实例删除成功后,在重新建立实例,页面显示启动状态,并且别的实例停止、启动操作也都恢复正常了,这回算是可以了


GitHub 加速计划 / ca / canal
28.21 K
7.57 K
下载
alibaba/canal: Canal 是由阿里巴巴开源的分布式数据库同步系统,主要用于实现MySQL数据库的日志解析和实时增量数据订阅与消费,广泛应用于数据库变更消息的捕获、数据迁移、缓存更新等场景。
最近提交(Master分支:2 个月前 )
1e5b8a20 - 2 个月前
ff82fd65 2 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐