0.引言
上一期我们讲解了如何搭建canal集群,随着我们节点数量的增加,其管理工作的难度也会增加,我们需要一个可视化的客户端来帮助我们管理这些canal节点。于是乎canal-admin应运而生。
1. 简介
canal-admin的设计初衷就是为了canal提供整体的配置管理、节点运维等功能。针对多节点的情况,不需要相同的配置每个节点都要操作一遍。为运维人员节约时间。
admin中有三大板块:
- 集群:也就是一组canal服务端deployer,也称为Server,同一集群的Server的配置文件可以在admin中统一集中管理。也就是说admin是面向多集群的管理
- Server:也就是deployer服务,一个deployer节点对应admin中的Server的一条数据,同一个集群下只能有一个deployer节点处于启动状态,原因我们已经在上一篇博文中说明,有兴趣的同学可以自定查看
- Instance:一个deployer下有多个实例,就是我们在conf文件夹下配置的子文件夹,每个实例都有自己的
instance.properties
配置文件,同样我们可以在admin页面中创建管理该配置文件,实现更加方便的运维
2. admin搭建
1、下载安装包,以下演示基于canal1.1.6
也可以直接在服务器上使用wget指令下载
wget https://github.com/alibaba/canal/releases/download/canal-1.1.6/canal.admin-1.1.6.tar.gz
2、创建一个admin文件夹,并且解压安装包
mkdir canal/admin
mv canal.admin-1.1.6.tar.gz canal/admin
cd canal/admin
tar -zxvf canal.admin-1.1.6.tar.gz
3、创建并导入canal_manager数据库,编码格式utf8
,初始化脚本canal_manager,sql
可在如下地址下载,也可以在admin/conf
路径下找到
4、因为我是用的mysql8.0,而canal-admin中默认提供的驱动器是mysql5.0的,因此要替换一下
scp mysql-connector-java-8.0.22.jar admin/lib
5、给驱动器文件赋权,删除旧版本驱动器
chmod 777 lib/mysql-connector-java-8.0.22.jar
chmod +st lib/mysql-connector-java-8.0.22.jar
rm -rf lib/mysql-connector-java-5.1.48.jar
6、修改配置文件
vim conf/application.yml
修改内容
server:
port: 8089
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
spring.datasource:
# 设置数据库地址
address: 192.168.244.17:3306
database: canal_manager
username: root
password: 123456
# 修改myql驱动器
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://${spring.datasource.address}/${spring.datasource.database}?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true
hikari:
maximum-pool-size: 30
minimum-idle: 1
canal:
adminUser: admin
adminPasswd: admin
7、启动(注:这里启动前,最好给客户端adapter/conf/application.yml文件做个备份,后续会说明其用处)
./bin/startup.sh
8、查看日志,如下图所示则说明启动成功
9、admin使用的是8089端口,需要提前开启该端口映射
# 查询端口是否开放
firewall-cmd --query-port=8980/tcp
# 开启端口
firewall-cmd --add-port=8089/tcp --permanent
# 开启后重新加载
firewall-cmd --reload
10、访问http://192.168.244.26:8089/
,输入默认账号admin/123456
访问
如图所示,admin就算搭建好了
11、在集群管理
中,点击新建集群
,新建一个集群配置。这里的zk地址就是服务端集群的zk地址
12、点击操作-主配置
,设置一个配置模版
13、点击载入模版`,然后根据需要设置配置文件
修改内容如下
# canal admin config【1】
canal.admin.manager = 192.168.244.26:8089
# admin auto register【2】
canal.admin.register.auto = true
canal.admin.register.cluster = cluster-one
# 【3】
canal.zkServers = 192.168.244.1:2181
# 【4】
#canal.instance.global.spring.xml = classpath:spring/memory-instance.xml
#canal.instance.global.spring.xml = classpath:spring/file-instance.xml
canal.instance.global.spring.xml = classpath:spring/default-instance.xml
3. 服务端deployer配置
1、修改配置文件
vim conf/canal_local.properties
修改内容
# 当前节点ip
canal.register.ip = 192.168.244.25
canal.admin.manager = 192.168.244.26:8089
canal.admin.port = 11110
canal.admin.user = admin
# admin密码,使用了mysql的password加密后的密码,与admin/conf/applicaiton.yml中设置的密码对应
canal.admin.passwd = 4ACFE3202A5FF5CF467898FC58AAB1D615029441
# 开启自动注册模式
canal.admin.register.auto = true
# 指定注册的集群名
canal.admin.register.cluster = cluster-one
# 注册到admin上的服务名,默认为当前ip
canal.admin.register.name =
如果要调整admin密码,可以通过如下mysql指令设置
# mysql5.0
select password('xxx')
# mysql8.0
select upper(sha1(unhex(sha1('xxx'))))
2、启动服务
./bin/startup.sh local
注意这里指定了local
参数,或者可以将canal.properties文件替换为canal_local.properties
服务端启动完成后,将客户端adapter重启一遍
4. 管理端admin配置
1、一般情况server会自动注册到admin中
2、如果没有自动注册的话,就点击新建Server
手动添加一下
3、之前我们就可以在操作-日志
中查看到server的日志情况
4、并且可以在主配置
中统一修改集群下的服务端deployer的配置文件,也可以统一的查看集群下的服务端实例
5、在Instance
管理中新增一个实例,也就是我们之前在服务端的conf文件夹下配置的,每一个子文件夹就代表了一个实例,每个实例都有自己的instance.properties
配置文件,这里新增的实例就是这个配置文件
6、点击操作-启动
就可以启用该实例
从上述我们可以了解到admin管理的就是我们的服务端deployer服务,已经各个服务下配置的实例,一个服务可以配置多个实例。
5. 客户端adapter配置
而针对客户端adapter,admin是不做管理的,如上我们配置了一个cluster
的实例,如果要实现数据同步,我们还需要配置该实例对应的客户端来将该数据同步到目标数据源
这里需要注意的是,如果配置好admin后,启动客户端,出现报错:
IllegalStateException: Failed to load property source from location 'classpath:/application.yml'
这是由于conf/application.yml
配置文件被canal-deployer下的canal.propertity
文件内容替换了,发生的原因是canal_manager
数据库数据出现问题,将该数据库重新导入一遍即可
1、我这里直接用navicat
连接后删除了canal_manager,然后重新执行了canal_manager.sql
2、当然库删除后数据被清空了,之前在admin管理页面中操作的配置就要重新来一遍了,即如下内容:
- 新建集群,设置主配置
- 添加Server
- 添加Instance
3、然后将之前让大家备份的application.yml替换为现有的文件
scp application.yml root@192.168.244.25:/var/local/canal1.1.6/adapter/conf/
scp application.yml root@192.168.244.26:/var/local/canal1.1.6/adapter/conf/
4、然后重新启动adapter
./bin/startup.sh
tail -f logs/adapter/adapter.log
日志显示启动正常
6. 测试
1、我这里的同步配置是基于canal搭建主从|集群架构中搭建的环境的,实现的是基于集群的从mysql同步至es,所以我们在此基础上测试
上述环境是同步mysql中的user表到es中的同名索引中
2、我们在数据库中新增一条数据
3、adapter中有日志输出
4、观察kibana中索引,数据添加成功
总结
我们针对canal-admin的演示就到此结束了,可能对于刚刚接触canal的同学来说上手还是有一定的陌生感,但是把握学习的一个要点:只要你用的多,自然就熟悉了。很多以前不理解的知识点,会在你不断的实战用自然而然的消化吸收
如果你觉得这篇文章对你有用的话,希望点赞支持一下