1.背景
canal-admin设计为canal组件提供了配置管理、节点运维等功能的WebUI操作界面,方便用户快速操作。
2.前期准备
先到官网https://github.com/alibaba/canal/releases/下载个canal.admin组件:
也可以输入shell脚本下载:
# 远程下载canal.admin
wget https://github.com/alibaba/canal/releases/download/canal-1.1.6/canal.admin-1.1.6.tar.gz
我是手动下载通过xftp等工具把二进制包上传到服务器目录/root/package中。java环境在上一个章节已经部署。
3.部署canal-admin管理后台
解压安装部署shell脚本命令如下:
# 新建canal.admin目录
mkdir /root/canal/canal.admin
# 切换到安装包目录
cd /root/package
# 解压canal.admin安装包到其目录
tar zxvf canal.admin-1.1.6.tar.gz -C /root/canal/canal.admin
# 可以先登录mysql使用命令或者手动创建初始化canal.admin管理后台相关表结构
# 登录mysql
mysql –u root –p
# 初始化canal.admin管理后台相关表结构
source /root/canal/canal.admin/conf/canal_manager.sql
# 编辑canal.admin配置
vi /root/canal/canal.admin/conf/application.yml
# 插入
i
{
# canal.admin管理后台数据库地址
address: 192.168.18.230:3306
# canal.admin管理后台数据库
database: ebs_material_dev
# 数据库登录用户名
username: root
# 数据库登录用户密码
password: Qwer.1234
}
# 保存退出
:wq
# 停止canal.admin组件
sh /root/canal/canal.admin/bin/stop.sh
# 启动canal.admin组件
sh /root/canal/canal.admin/bin/startup.sh
# 重启canal.admin组件
sh /root/canal/canal.admin/bin/restart.sh
# 关于canal.admin.passwd密码配置的说明,针对canal.admin.passwd,默认做了密码加密处理,这里的passwd是一个密文和canal-admin里application.yml里的密码原文做对应。密文的生成方式,请登录mysql,执行如下密文生成sql即可(记得去掉第一个首字母的星号)
select password('admin')
# 编辑canal.deployer的local配置文件,如果使用后台管理canal最后编辑该本地配置文件模板
vi /root/canal/canal.deployer/conf/canal_local.properties
# 插入
i
{
# 注册IP,指向当前canal.deployer组件IP,对应不同canal.deployer节点IP地址
canal.register.ip = 192.168.18.200
# canal管理后台地址
canal.admin.manager = 192.168.18.200:8089
# canal管理后台端口
canal.admin.port = 11110
# canal管理后台登录用户名
canal.admin.user = admin
# canal管理后台登录密码,经过密文的生成方式生成
canal.admin.passwd = 4ACFE3202A5FF5CF467898FC58AAB1D615029441
# 后台自动注册
canal.admin.register.auto = true
# canal后台配置的集群名称
canal.admin.register.cluster = DataSyncCluster
}
# 保存退出
:wq
# 如果防火墙有IP端口限制,请设置端口允许外部访问
firewall-cmd --permanent --zone=public --add-port=8089/tcp
firewall-cmd --permanent --zone=public --add-port=11110/tcp
firewall-cmd --permanent --zone=public --add-port=11112/tcp
# 防火墙重启
firewall-cmd --reload
# 查看端口是否允许外部访问
firewall-cmd --permanent --zone=public --query-port=8089/tcp
firewall-cmd --permanent --zone=public --query-port=11110/tcp
firewall-cmd --permanent --zone=public --query-port=11112/tcp
# 查看防火墙所有端口
firewall-cmd --zone=public --list-ports
# 停止canal.deployer组件
sh /root/canal/canal.deployer/bin/stop.sh local
# 启动canal.deployer组件
sh /root/canal/canal.deployer/bin/startup.sh local
# 重启canal.deployer组件
sh /root/canal/canal.deployer/bin/restart.sh local
# 命令用于连接文件并打印到标准输出设备上
cat /root/canal/canal.deployer/conf/canal_local.properties |grep canal.register.ip
# 如果想修改时序数据库H2更换成mysql数据库记录,可以执行如下脚本
# 创建元数据快照表
CREATE TABLE `meta_snapshot` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`gmt_create` datetime NOT NULL COMMENT '创建时间',
`gmt_modified` datetime NOT NULL COMMENT '修改时间',
`destination` varchar(128) DEFAULT NULL COMMENT '通道名称',
`binlog_file` varchar(64) DEFAULT NULL COMMENT 'binlog文件名',
`binlog_offest` bigint(20) DEFAULT NULL COMMENT 'binlog偏移量',
`binlog_master_id` varchar(64) DEFAULT NULL COMMENT 'binlog节点id',
`binlog_timestamp` bigint(20) DEFAULT NULL COMMENT 'binlog应用的时间戳',
`data` longtext COMMENT '表结构数据',
`extra` text COMMENT '额外的扩展信息',
PRIMARY KEY (`id`),
UNIQUE KEY `binlog_file_offest` (`destination`,`binlog_master_id`,`binlog_file`,`binlog_offest`),
KEY `destination` (`destination`),
KEY `destination_timestamp` (`destination`,`binlog_timestamp`),
KEY `gmt_modified` (`gmt_modified`)
) COMMENT='表结构记录表快照表';
# 创建元数据历史表
CREATE TABLE `meta_history` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`gmt_create` datetime NOT NULL COMMENT '创建时间',
`gmt_modified` datetime NOT NULL COMMENT '修改时间',
`destination` varchar(128) DEFAULT NULL COMMENT '通道名称',
`binlog_file` varchar(64) DEFAULT NULL COMMENT 'binlog文件名',
`binlog_offest` bigint(20) DEFAULT NULL COMMENT 'binlog偏移量',
`binlog_master_id` varchar(64) DEFAULT NULL COMMENT 'binlog节点id',
`binlog_timestamp` bigint(20) DEFAULT NULL COMMENT 'binlog应用的时间戳',
`use_schema` varchar(1024) DEFAULT NULL COMMENT '执行sql时对应的schema',
`sql_schema` varchar(1024) DEFAULT NULL COMMENT '对应的schema',
`sql_table` varchar(1024) DEFAULT NULL COMMENT '对应的table',
`sql_text` longtext COMMENT '执行的sql',
`sql_type` varchar(256) DEFAULT NULL COMMENT 'sql类型',
`extra` text COMMENT '额外的扩展信息',
PRIMARY KEY (`id`),
UNIQUE KEY `binlog_file_offest` (`destination`,`binlog_master_id`,`binlog_file`,`binlog_offest`),
KEY `destination` (`destination`),
KEY `destination_timestamp` (`destination`,`binlog_timestamp`),
KEY `gmt_modified` (`gmt_modified`)
) COMMENT='表结构变化明细表';
# 如果想修改时序数据库H2更换成mysql数据库记录,编辑canal服务配置修改如下
vi /root/canal/canal.deployer/conf/canal.properties
# 插入
i
{
# 开启mysql数据库记录元数据,ebs_material_dev是数据库名称
canal.instance.tsdb.url = jdbc:mysql://192.168.18.230:3306/ebs_material_dev?useUnicode=true&characterEncoding=UTF-8&useSSL=false
canal.instance.tsdb.dbUsername = root
canal.instance.tsdb.dbPassword = Qwer.1234
canal.instance.tsdb.spring.xml = classpath:spring/tsdb/mysql-tsdb.xml
}
# 保存退出
:wq
如果数据库ebs_material_dev的root账号权限不够,增删改查canal_manager数据库会报类似如下错误的:
Error[INSERT command denied to user 'canal'@'192.168.18.230' for table 'canal_node_server']
这时需要赋予权限:
GRANT SELECT, INSERT, UPDATE, DELETE, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'root'@'%';
登录后台管理需要初始化admin登录信息,在数据库ebs_material_dev下执行如下sql:
INSERT INTO `canal_user` VALUES (1, 'admin', '6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9', 'Canal Manager', 'admin', NULL, NULL, '2022-12-14 00:05:28');
账号:admin,密码:123456
登录界面如下:
4.Canal.admin设置Canal.deployer集群配置
管理后面设置canal.deployer集群配置流程如下:
●设置canal集群信息(因为在canal.deployer节点的canal_local.properties配置文件设置了集群名称为DataSyncCluster,所以这里也要对应设置同样集群名称):
●设置canal.deployer节点canal.properties配置:
把之前配置好canal.properties信息拷贝一份过来就好,也可以手动设置。
●设置canal.deployer服务节点信息
假设你canal.deployer节点有三台,就配置三个节点信息,如此类推。
●设置canal.deployer服务节点实例信息
因为之前我们只设置监听example实例,所以把实例配置拷贝上来即可。
参考文献:
Canal-Admin-QuickStart https://github.com/alibaba/canal/wiki/Canal-Admin-QuickStart
Canal Admin Guide https://github.com/alibaba/canal/wiki/Canal-Admin-Guide
Canal Admin ServerGuide https://github.com/alibaba/canal/wiki/Canal-Admin-ServerGuide