部署canal.deployer(MySQL作为数据源) - oceanbase/canal GitHub Wiki

参考:https://github.com/alibaba/canal/wiki/AdminGuide#spring%E9%85%8D%E7%BD%AE

准备

确保MySQL已经开启binlog,并配置 binlog-format 为 ROW 模式。my.cnf 中配置如下

[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复

检验:

show variables like 'log_bin'; #查看biglog是否开启成功
show variables like 'binlog_format'; # 查看binlog-format 是否为ROW 模式

授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限, 如果已有账户可直接 grant

CREATE USER canal IDENTIFIED BY 'canal';  
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;

单机部署

canal.properties

# canal监听的端口
canal.port = 11111

# 指定文件存储目录,包含日志转换位点信息、客户端消费位点信息等。默认为配置目录
canal.file.data.dir = ${canal.conf.dir}

# 指定instance的destination,若为多个则以逗号分隔
canal.destinations = example

# 指定配置目录
canal.conf.dir = ../conf

# 指定instance的spring配置
canal.instance.global.spring.xml = classpath:spring/file-instance.xml

tcp模式下

canal.serverMode = tcp

mq模式下,以kafka为例

canal.serverMode = kafka
kafka.bootstrap.servers = 127.0.0.1:9092

example/instance.properties

# 是否开启GTID
canal.instance.gtidon=false

# 主库配置
canal.instance.master.address=127.0.0.1:3306
canal.instance.master.journal.name=
canal.instance.master.position=
canal.instance.master.timestamp=
canal.instance.master.gtid=

# 备库配置
#canal.instance.standby.address =
#canal.instance.standby.journal.name =
#canal.instance.standby.position =
#canal.instance.standby.timestamp =
#canal.instance.standby.gtid=

# 云服务配置
canal.instance.rds.accesskey=
canal.instance.rds.secretkey=
canal.instance.rds.instanceId=

# 元数据保存配置
canal.instance.tsdb.enable=true
#canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:3306/canal_tsdb
#canal.instance.tsdb.dbUsername=canal
#canal.instance.tsdb.dbPassword=canal

# 数据库连接的用户名和密码
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal

# 监听的黑白名单
canal.instance.filter.regex=.*\\..*
canal.instance.filter.black.regex=mysql\\.slave_.*

若是在mq模式下,需要增加mq的配置

# 指定topic
canal.mq.topic=example
# 动态生成topic,若设置将覆盖上面指定的值
#canal.mq.dynamicTopic=mytest1.user,mytest2\\..*,.*\\..*
canal.mq.partition=0
#canal.mq.partitionsNum=3
#canal.mq.partitionHash=test.table:id^name,.*\\..*
#库名.表名: 唯一主键,多个表之间用逗号分隔
#canal.mq.dynamicTopicPartitionNum=test.*:4,mycanal:6

配置完成后,在根目录下执行bin/startup.sh即可启动

集群部署

Canal的高可用集群依赖于zookeeper,假设当前的zookeeper地址为127.0.0.1:2181

canal.properties

# canal监听的端口
canal.port = 11111

# 指定zookeeper的地址
canal.zkServers =127.0.0.1:2181

# 指定instance的destination,若为多个则以逗号分隔
canal.destinations = example

# 指定instance的spring配置
canal.instance.global.spring.xml = classpath:spring/default-instance.xml

tcp模式下

canal.serverMode = tcp

mq模式下,以kafka为例

canal.serverMode = kafka
kafka.bootstrap.servers = 127.0.0.1:9092

example/instance.properties

# 是否开启GTID
canal.instance.gtidon=false

# 主库配置
canal.instance.master.address=127.0.0.1:3306
canal.instance.master.journal.name=
canal.instance.master.position=
canal.instance.master.timestamp=
canal.instance.master.gtid=

# 备库配置
#canal.instance.standby.address =
#canal.instance.standby.journal.name =
#canal.instance.standby.position =
#canal.instance.standby.timestamp =
#canal.instance.standby.gtid=

# 云服务配置
canal.instance.rds.accesskey=
canal.instance.rds.secretkey=
canal.instance.rds.instanceId=

# 元数据保存配置
canal.instance.tsdb.enable=true
#canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:3306/canal_tsdb
#canal.instance.tsdb.dbUsername=canal
#canal.instance.tsdb.dbPassword=canal

# 数据库连接的用户名和密码
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal

# 监听的黑白名单
canal.instance.filter.regex=.*\\..*
canal.instance.filter.black.regex=mysql\\.slave_.*

若是在mq模式下,需要增加mq的配置

# 指定topic
canal.mq.topic=example
# 动态生成topic,若设置将覆盖上面指定的值
#canal.mq.dynamicTopic=mytest1.user,mytest2\\..*,.*\\..*
canal.mq.partition=0
#canal.mq.partitionsNum=3
#canal.mq.partitionHash=test.table:id^name,.*\\..*
#库名.表名: 唯一主键,多个表之间用逗号分隔
#canal.mq.dynamicTopicPartitionNum=test.*:4,mycanal:6

配置完成后,在根目录下执行bin/startup.sh即可启动。

对于集群当前的运行状态,可以通过zkCli连接zookeeper后查询得到

# 查看example下的cluster信息
ls /otter/canal/destinations/example/cluster
# 查看example的当前运行状态
get /otter/canal/destinations/example/running

通过Canal Admin部署

参考 https://github.com/alibaba/canal/wiki/Canal-Admin-QuickStart

Canal Admin部署

conf/application.yml

# 指定admin服务监听的端口
server:
  port: 8089

# 数据库配置
spring.datasource:
  address: 127.0.0.1:3306
  database: canal_manager
  username: canal
  password: canal
  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 server连接时使用的鉴权信息
canal:
  adminUser: admin
  adminPasswd: admin

此处的密码为原始密码,其通过SHA-1处理后的值对应canal server的配置项canal.admin.passwd,处理函数为 com.alibaba.otter.canal.protocol.SecurityUtil.scrambleGenPass

准备数据库

确认前述配置文件中数据库的用户名和密码可用,之后导入元数据。

# 导入初始化SQL
> source conf/canal_manager.sql

之后就可以通过bin/startup.sh启动该服务。

进入 http://127.0.0.1:8089/。用户名和密码默认是admin和123456,这里的用户信息保存在canal_manager.canal_user表,表中的密码同样是 com.alibaba.otter.canal.protocol.SecurityUtil.scrambleGenPass处理过的。

Canal Server配置

配置conf/canal_local.properties

# register ip
canal.register.ip =

# canal admin地址
canal.admin.manager = 127.0.0.1:8089
# 
canal.admin.port = 11110
canal.admin.user = admin
canal.admin.passwd = 4ACFE3202A5FF5CF467898FC58AAB1D615029441
# admin auto register
canal.admin.register.auto = true
canal.admin.register.cluster =
canal.admin.register.name = 

启动Canal Server

单机版

单机版的Canal Server需要启动时,可以直接通过如下命令启动:

sh bin/startup.sh local

启动后的Canal Server可以在Canal Admin的server管理页面进行配置修改等管理操作。

集群版

启动集群版的流程:

  1. 在Canal Admin的集群管理页面创建一个集群,点击主配置,编辑信息并保存。主要需要修改以下几项:
  • canal.zkServers:填写当前使用的zookeeper
  • canal.serverMode:填写使用的消费方式
  • canal.instance.global.spring.xml:填写使用的xml,此处应为classpath:spring/default-instance.xml
  1. 编辑Canal Server的conf/canal_local.properties文件,确保如下两条填写无误:
# 集群名称,与Canal Admin集群管理页面的集群名称保持一致
canal.admin.register.cluster =
# 本Canal Server的名称
canal.admin.register.name = 
  1. 启动Canal Server sh bin/startup.sh local 此时,在Canal Admin的Server管理页面应当可以看到已经启动的Canal Server。

启动Canal Instance

进入Canal Admin的Instance管理页面,创建instance,载入模版后修改配置,保存,instance将自动启动。