Skip to content

canal-admin组件的使用

canal-server的操作一直是采用面向命令行的运维方式,canal-admin出现使得用户没必要再去维护canal-server组件里复杂而且冗长的配置文件,可以将所有的配置都交给canal-admin来进行管理,同时canal-admin提供相对友好的WebUI操作界面,目前功能有集群管理、Server管理和Instance管理。

1. 下载canal-admin解压

将之前下载canal.admin-1.1.7.tar.gz进行解压。

sh
[jack@hadoop102 software]$ mkdir /opt/module/canal-admin
[jack@hadoop102 software]$ tar zxvf canal.admin-1.1.7.tar.gz  -C /opt/module/canal-admin
## 进入/opt/module/canal-admin目录,可以看到如下结构
[jack@hadoop102 canal-admin]$ ll
总用量 8
drwxrwxr-x. 2 jack jack   76 5月  11 07:39 bin
drwxrwxr-x. 3 jack jack  156 5月  11 07:39 conf
drwxrwxr-x. 2 jack jack 4096 5月  11 07:39 lib
drwxrwxr-x. 2 jack jack    6 10月  9 2023 logs

2. 初始化canal-admin的系统数据库

初始化脚本在conf/canal_manager.sql

sh
[jack@hadoop102 conf]$ ll
总用量 24
-rwxrwxr-x. 1 jack jack  484 10月  9 2023 application.yml
-rwxrwxr-x. 1 jack jack 3898 10月  9 2023 canal_manager.sql
-rwxrwxr-x. 1 jack jack 6737 10月  9 2023 canal-template.properties
-rwxrwxr-x. 1 jack jack 2036 10月  9 2023 instance-template.properties
-rwxrwxr-x. 1 jack jack 1568 10月  9 2023 logback.xml
drwxrwxr-x. 3 jack jack   72 5月  11 07:39 public
## 使用本地docker中mysql实例初始化canal-admin的系统数据库
## 1. 查看mysql实例是否运行
[jack@hadoop102 conf]$ sudo docker ps
CONTAINER ID   IMAGE          COMMAND                   CREATED        STATUS        PORTS                                                  NAMES
440b18ce65e0   mysql:5.7.44   "docker-entrypoint.s…"   25 hours ago   Up 25 hours   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql-ods
## 2. 上传sql脚本到mysql中
[jack@hadoop102 conf]$ sudo docker cp ./canal_manager.sql mysql-ods:/canal_manager.sql
Successfully copied 5.63kB to mysql-ods:/canal_manager.sql
## 3. 命令行交互mysql
[jack@hadoop102 conf]$ sudo docker exec -it mysql-ods mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 498
Server version: 5.7.44 MySQL Community Server (GPL)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
## 4. 执行sql脚本
mysql> source /canal_manager.sql
Query OK, 1 row affected (0.00 sec)

Database changed
Query OK, 0 rows affected (0.00 sec)
......

3. 修改配置文件

在conf目录下有这些配置文件:

sh
[jack@hadoop102 canal-admin]$ cd conf
[jack@hadoop102 conf]$ ll
总用量 24
-rwxrwxr-x. 1 jack jack  490 5月  12 23:14 application.yml
-rwxrwxr-x. 1 jack jack 3898 10月  9 2023 canal_manager.sql
-rwxrwxr-x. 1 jack jack 6737 10月  9 2023 canal-template.properties
-rwxrwxr-x. 1 jack jack 2036 10月  9 2023 instance-template.properties
-rwxrwxr-x. 1 jack jack 1568 10月  9 2023 logback.xml
drwxrwxr-x. 3 jack jack   72 5月  11 07:39 public
  1. application.yml,canal-admin是springboot工程,application.yml是默认主配置文件,里面包含基础配置:比如链接数据库的账号密码、对canal-server提供的admin管理的账号密码等。
  2. logback.xml,日志配置文件。
  3. canal-template.properties,canal配置的默认模板,针对canal-server开启自动注册时,会选择这个默认模板。
  4. instance-template.properties,instance配置的默认模板。

在conf目录下修改application.yml文件,调整canal-admin系统数据库的信息。

yml
server:
  port: 8089
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

spring.datasource:
  address: 192.168.101.102:3306
  database: canal_manager
  username: root
  password: 123456
  driver-class-name: com.mysql.jdbc.Driver
  url: jdbc:mysql://${spring.datasource.address}/${spring.datasource.database}?useUnicode=true&characterEncoding=UTF-8&useSSL=false
  hikari:
    maximum-pool-size: 30
    minimum-idle: 1

canal:
  adminUser: admin
  adminPasswd: admin

4. 启动canal-admin

sh
[jack@hadoop102 canal-admin]$ sh bin/startup.sh
## 查看admin日志
[jack@hadoop102 canal-admin]$ tail -f logs/admin.log 
2024-05-12 23:21:58.046 [main] INFO  io.ebean.config.properties.LoadContext - loaded properties from [application.yml]
2024-05-12 23:21:58.143 [main] INFO  com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
2024-05-12 23:21:58.147 [main] WARN  com.zaxxer.hikari.util.DriverDataSource - Registered driver with driverClassName=com.mysql.jdbc.Driver was not found, trying direct instantiation.
2024-05-12 23:21:59.134 [main] INFO  com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
2024-05-12 23:21:59.156 [main] WARN  io.ebean.internal.DefaultContainer - DataSource [ebeanServer] has autoCommit defaulting to true!
2024-05-12 23:21:59.209 [main] INFO  io.ebean.internal.DefaultContainer - DatabasePlatform name:ebeanServer platform:mysql
2024-05-12 23:22:00.493 [main] INFO  o.s.b.a.web.servlet.WelcomePageHandlerMapping - Adding welcome page: class path resource [public/index.html]
2024-05-12 23:22:00.911 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8089"]
2024-05-12 23:22:00.974 [main] INFO  o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 8089 (http) with context path ''
2024-05-12 23:22:01.002 [main] INFO  com.alibaba.otter.canal.admin.CanalAdminApplication - Started CanalAdminApplication in 8.209 seconds (JVM running for 9.988)

可以通过http://192.168.101.102:8089/ 访问canal-admin页面,默认密码:admin/123456 Alt text 可以看到"Server 管理"菜单里面是空的,接下来操作canal-server纳入canal-admin的管理中。 Alt text

5. canal-server端配置

5.1 解压canal.deployer包

sh
[jack@hadoop102 software]$ mkdir /opt/module/canal.deployer
[jack@hadoop102 software]$ tar -xvf canal.deployer-1.1.7.tar.gz -C /opt/module/canal.deployer

5.2 配置canal-server连接信息

使用canal_local.properties的配置覆盖canal.properties,并修改其中参数:

sh
[jack@hadoop102 conf]$ ll
总用量 20
-rwxrwxr-x. 1 jack jack  319 11月 16 2022 canal_local.properties
-rwxrwxr-x. 1 jack jack 6745 11月 16 2022 canal.properties
drwxrwxr-x. 2 jack jack   33 5月  12 23:49 example
-rwxrwxr-x. 1 jack jack 4429 11月 16 2022 logback.xml
drwxrwxr-x. 2 jack jack   39 5月  12 23:49 metrics
drwxrwxr-x. 3 jack jack  149 5月  12 23:49 spring
[jack@hadoop102 conf]$ mv canal_local.properties canal.properties
## 调整部分配置属性:
# 由于本地有docker虚拟网卡干扰,手动指定本地ip
canal.ip =192.168.101.102
# canal-admin的地址
canal.admin.manager = 192.168.101.102:8089
canal.admin.port = 11110
canal.admin.user = admin
canal.admin.passwd = 4ACFE3202A5FF5CF467898FC58AAB1D615029441
# 是否开启自动注册模式
canal.admin.register.auto = true

配置说明

  1. canal.admin.passwd:canal-server和canal-admin交互需要安全认证,canal-server会用用户名和加密后的密文请求canal-admin,密文是来自canal-admin中配置的原始密码经过mysql的password函数生成而来:
sql
mysql>select password('admin');
+-------------------------------------------+
| password('admin')                         |
+-------------------------------------------+
| *4ACFE3202A5FF5CF467898FC58AAB1D615029441 |
+-------------------------------------------+
-- 如果遇到mysql8.0,可以使用select upper(sha1(unhex(sha1('admin'))))得到密文。
  1. canal.admin.register.auto: 如果为true,则直接读取admin上的server配置, 读取后覆盖本地相关server的配置。

6. server管理

  1. 通过启动canal-server,canal-server自动向canal-admin完成注册。
sh
[jack@hadoop102 canal-deployer]$ ./bin/startup.sh
[jack@hadoop102 canal-deployer]$ tail -f logs/canal/canal.log 
2024-05-13 00:12:03.786 [main] INFO  com.alibaba.otter.canal.deployer.CanalLauncher - ## set default uncaught exception handler
2024-05-13 00:12:03.807 [main] INFO  com.alibaba.otter.canal.deployer.CanalLauncher - ## load canal configurations
2024-05-13 00:12:05.171 [main] INFO  com.alibaba.otter.canal.deployer.CanalStarter - ## start the canal server.
2024-05-13 00:12:05.269 [main] INFO  com.alibaba.otter.canal.deployer.CanalController - ## start the canal server[172.17.0.1(172.17.0.1):11111]
2024-05-13 00:12:05.432 [main] INFO  com.alibaba.otter.canal.deployer.CanalStarter - ## the canal server is running now ......
  1. 访问canal-admin的server管理页面,可以看到canal-server已经注册成功: Alt text 配置项说明:
  • 配置,主要是维护单机模式的canal.properties配置,注意:挂载到集群模式的server,不允许单独编辑server的canal.properties配置,需要保持集群配置统一。
  • 修改/删除,主要是维护server的基本属性,比如名字和ip、port。
  • 启动/停止,主要是提供动态启停server的能力,比如集群内这个机器打算下线了,可以先通过停止释放instance的运行,集群中的其他机器通过HA就会开始接管任务。
  • 日志,查看server的根日志,主要是canal/canal.log的最后100行日志。
  • 详情,主要提供查询在当前这个server上运行的instance列表,以server维度方便快速做instance的启动、停止操作. 比如针对集群模式,如果server之- 间任务运行负载不均衡,可以通过对高负载Server执行部分Instance的停止操作来达到均衡的目的。

7. 在线创建Instance

进入Instance管理菜单,点击新建Instance=>载入模版: Alt text
Alt text 点击载入模版,canal-admin会自动加载conf目录下的instance-template.properties文件。 Alt text 配置必要的信息,点击保存,如下所示,demo实例生成了。

ini
#################################################
## mysql serverId , v1.0.26+ will autoGen
# position info
canal.instance.master.address=192.168.101.102:3306
# username/password
canal.instance.dbUsername=root
canal.instance.dbPassword=123456
canal.instance.connectionCharset = UTF-8
# enable druid Decrypt database password
canal.instance.enableDruid=false
# table regex
canal.instance.filter.regex=.*\\..*

Alt text 可以控制demo实例的启动、停止、修改和查看日志。 Alt text

8. Instance实例操作

8.1 demo实例启动

点击操作==> 启动, 弹出确认对话框,点击确定: Alt text 刷新页面,可以发现此时demo实例状态发生变化:
Alt text

8.2 查看instance日志

查看instance日志 日志默认显示最近100条信息,日志文件在canal-server目录下面的logs/deme/demo.log里面。
日志信息

9. 集群管理

canal-admin提供canal高可用解决方案。提供管理功能有:修改/删除集群、主配置、查看server功能。
Alt textAlt text 配置项说明如下:

  • 修改集群/删除集群,属于基本的集群信息维护和删除。
  • 主配置,主要是指集群对应的canal.properties配置,设计上一个集群的所有server会共享一份全局canal.properties配置 (如果有个性化的配置需求,可以创建多个集群)。
  • 查看server,主要是指查看挂载在这个集群下的所有server列表。
    值得说明的是同一个canal-server集群,它们共用同一份canal.properties配置文件。