canal 学习笔记 —— canal admin

今天决定引入 canal admin 来管理 canal server, 关于 canal server 的笔记在我之前写的文章中 https://www.jianshu.com/p/23ae08609e2d, https://www.jianshu.com/p/2f3000c6410f

1. 准备 canal admin

  1. 下载 https://github.com/alibaba/canal/releases/tag/canal-1.1.4 里面的 canal.admin-1.1.4.tar.gz 文件
  2. 解压到指定目录
mkdir canal.admin-1.1.4
tar -xvzf canal.admin-1.1.4.tar.gz -C canal.admin-1.1.4
  1. 修改 bin/restart.sh
#!/bin/bash
SCRIPT_DIR=$(cd "$(dirname "$0")"; pwd)
sh $SCRIPT_DIR/stop.sh
sh $SCRIPT_DIR/startup.sh
  1. 修改 conf/application.yml
address: 127.0.0.1:3307
username: root
password: 123456
  1. 初始化数据库
source conf/canal_manager.sql

2. 使用 canal admin

1. 启动 canal admin
canal.admin-1.1.4/bin/startup.sh
2. 启动 canal server

这里要加启动参数 local, 以最小配置文件 conf/canal_local.properties 启动 canal server, conf/canal_local.properties 只提供了与 canal admin 通信所需要的相关配置,除此之外的 destination/mq 等等配置信息都没有,canal server 运行需要的更多配置信息全都由 canal admin 提供,也就是 canal_manager.canal_config 表的数据

canal.deployer-1.1.4/bin/startup.sh local
3. 登录 canal admin
  • canal_manager.canal_admin 是 canal admin 的用户表,初始化的时候会创建一个用户 admin:123456, 可以用这个用户登录系统,登录之后可以看到已经存在一个 canal server, 这就是我们之前启动的那个
  • 在 canal admin 上创建 cluster, server, instance 非常简单方便,这里不再赘述操作过程,可以参考官方文档 https://github.com/alibaba/canal/wiki/Canal-Admin-Guide,这些操作的数据最终会保存在 canal_manager 数据库中

3. 分析 canal admin

1. 引入 canal admin 之后 canal server 的数据存储
  • 配置信息 (canal.properties/instance.properties) 全部存储在 canal_manager 数据库中
  • 日志信息 (instance.log/meta.log/canal.log/canal_stdout.log) 仍然像引入 canal admin 之前一样,存储在 canal.deployer-1.1.4/logs 目录
  • 缓存信息 (h2.mv.db/meta.dat) 也是像引入 canal admin 之前一样,存储在 canal.deployer-1.1.4/conf/instance 目录
2. canal admin 的数据库 canal_manager
  • canal_user: 用户表,用于保存登录 canal admin 的用户, 密码生成方式 select password('xxxxxx')
  • canal_cluster: cluster 表,用于保存 canal cluster 的基本信息
  • canal_node_server: server 表,用于保存 canal server 的基本信息
  • canal_config: 全局配置表,用于保存 cluster 和 server 的配置信息,相当于 canal.properties 文件
  • canal_instance_config: instance 表,用于保存 instance 的基本信息和配置信息,相当于 instance.properties 文件
3. canal server 与 canal admin 的认证机制
  • canal admin 的 conf/application.yml 里面定义了账号密码明文 canal.adminUser:canal.adminPasswd
  • canal server 的 conf/canal_local.properties 里面定义了账号密码密文 canal.admin.user:canal.admin.passwd
  • 密文的生成方式: select password('xxxxxx');
  • 双向认证: canal server 向 canal admin 注册的时候会以密码密文做认证, canal admin 对 canal server 做连通性测试的时候也会将密码明文加密之后做认证 (连通性测试失败的时候,canal admin web 会显示对应的 canal server 处于 "断开" 状态)
4. instance 动态加载机制
  • 在引入 canal admin 之前,可以通过修改 conf/canal.properties 文件设置 canal.auto.scan = true 来达到动态加载 instance 的目的,canal server 会主动查询 canal.conf.dir = ../conf 目录来增删 instance
  • 在引入 canal admin 之后,之前在 conf/canal.properties 文件里面的 destinations 相关的配置不再起作用。instance 必须和 canal server 绑定,canal server 运行过程中会根据绑定关系动态加载 instance
5. 疑惑
  • canal admin 有一个新功能 : 启动/停止 instance, 这是之前的裸奔 canal server 不具有的功能,但是在使用过程中发现了一些问题
  • 在集群模式下通过 canal admin 启动/停止某一个 instance 是起作用的,canal_manager.canal_instance_config 表里面的数据会更新状态 status = 0, 然后 canal admin 会与 canal server 通信并关闭进程
  • 但是在单机模式下通过 canal admin 启动/停止某一个 instance, 只会更新 canal_manager.canal_instance_config 表的数据,并不会真的停止 instance 的对外服务,如果有 binlog 更新仍然会写到 Kafka
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容