1. 准备
- mysql开启binlog并配置权限
- canal版本,要求>=1.1.4 (需要依赖canal-server提供面向admin的动态运维管理接口)
- Zookeeper
- Kafka
2. 安装
-
2.1 admin安装
2.1.1 解压:mkdir -p /opt/module/canal-admin tar -zxvf canal.admin-1.1.4.tar.gz -C /opt/module/canal-admin/
2.1.2 初始化元数据库
[ttt@ttt canal-admin]$ vim conf/application.yml server: port: 8089 spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 spring.datasource: address: ttt:3306 (使用绝对IP) 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: 123456 (默认密码123456,登录后密码修改为这个) [ttt@ttt software]$ cd /opt/module/canal-admin/ [ttt@ttt canal-admin]$ mysql -uroot -p123456 mysql> source conf/canal_manager.sql
2.1.3.1 启动admin
[ttt@ttt canal-admin]$ sh bin/startup.sh
2.1.3.2 查看日志
[ttt@ttt canal-admin]$ tail -f logs/admin.log 2019-12-28 14:55:00.725 [main] INFO o.s.jmx.export.annotation.AnnotationMBeanExporter - Bean with name 'dataSource' has been autodetected for JMX exposure 2019-12-28 14:55:00.742 [main] INFO o.s.jmx.export.annotation.AnnotationMBeanExporter - Located MBean 'dataSource': registering with JMX server as MBean [com.zaxxer.hikari:name=dataSource,type=HikariDataSource] 2019-12-28 14:55:00.750 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8089"] 2019-12-28 14:55:00.813 [main] INFO org.apache.tomcat.util.net.NioSelectorPool - Using a shared selector for servlet write/read 2019-12-28 14:55:00.935 [main] INFO o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 8089 (http) with context path '' 2019-12-28 14:55:00.938 [main] INFO com.alibaba.otter.canal.admin.CanalAdminApplication - Started CanalAdminApplication in 3.005 seconds (JVM running for 3.423)
2.1.3.3 访问ttt 8089端口
2.1.3.4 默认账号密码是admin /123456进行登录 -
2.2 canal-server安装(HA模式,多个服务器安装)
2.2.1 准备好:
- Zookeeper
- Kafka
2.2.2 解压jar包
2.2.3 修改配置(default才能开启HA模式)
[ttt@ttt canal-server]# vim conf/canal_local.properties # register ip canal.register.ip = #canal admin config canal.admin.manager = 127.0.0.1:8089(admin的IP) canal.admin.port = 11110 canal.admin.user = admin canal.admin.passwd = 4ACFE3202A5FF5CF467898FC58AAB1D615029441( select password('admin') ) #admin auto register canal.admin.register.auto = true canal.admin.register.cluster =
2.2.4 启动
指定为local配置文件sh bin/startup.sh local
-
2.3 使用webUI配置集群
2.3.1 在web界面新建集群:
-
配置集群名、Zookeeper
-
修改主配置: 载入模板后主要修改以下配置:
# canal admin config canal.admin.passwd = 8C41D3D969D2F8936C291DA8956921B40BB7E7FE canal.zkServers = emr-header-2:2181,emr-header-1:2181,emr-worker-1:2181 #instance模式改为default(此模式可HA) #canal.instance.global.spring.xml = classpath:spring/file-instance.xml canal.instance.global.spring.xml = classpath:spring/default-instance.xml #配置kafka集群 canal.mq.servers = 172.18.217.185:9092,172.18.217.183:9092,172.18.217.184:9092
2.3.2 将Servers添加到集群中
- 删除原来的servers(因为默认是没有加入集群,而且无法修改)
- 按照原来的配置新建Server并配置好所属集群
2.3.3 添加Instance
-
选择好集群
-
载入模板后主要修改以下配置:
#mysql配置 canal.instance.master.address=xxx.xxx.xxx.xxx:xxx # username/password canal.instance.dbUsername=xxx canal.instance.dbPassword=xxx
-
特别说明下 canal.mq.dynamicTopic 表达式:(来自官网)
canal 1.1.3版本之后, 支持配置格式:schema 或 schema.table,多个配置之间使用逗号或分号分隔
例子1:test\.test 指定匹配的单表,发送到以test_test为名字的topic上
例子2:.\… 匹配所有表,则每个表都会发送到各自表名的topic上
例子3:test 指定匹配对应的库,一个库的所有表都会发送到库名的topic上
例子4:test\…* 指定匹配的表达式,针对匹配的表会发送到各自表名的topic上
例子5:test,test1\.test1,指定多个表达式,会将test库的表都发送到test的topic上,test1\.test1的表发送到对应的test1_test1 topic上,其余的表发送到默认的canal.mq.topic值
为满足更大的灵活性,允许对匹配条件的规则指定发送的topic名字,配置格式:topicName:schema 或 topicName:schema.table
例子1: test:test\.test 指定匹配的单表,发送到以test为名字的topic上
例子2: test:.\… 匹配所有表,因为有指定topic,则每个表都会发送到test的topic下
例子3: test:test 指定匹配对应的库,一个库的所有表都会发送到test的topic下
例子4:testA:test\…* 指定匹配的表达式,针对匹配的表会发送到testA的topic下
例子5:test0:test,test1:test1\.test1,指定多个表达式,会将test库的表都发送到test0的topic下,test1\.test1的表发送到对应的test1的topic下,其余的表发送到默认的canal.mq.topic值
大家可以结合自己的业务需求,设置匹配规则,建议MQ开启自动创建topic的能力-
举例:
# table regex canal.instance.filter.regex=源表A,源表B # mq config #canal.mq.topic=example # dynamic topic route by schema or table regex canal.mq.dynamicTopic=目标topicA:源表A,目标topicB:源表B
-
-