canal集群搭建踩坑

一、canal介绍

canal [kə’næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。

早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。

二、搭建采用的环境

canal版本:v1.1.6
java版本:1.8

IP机器
10.100.0.27管理节点、服务节点1
10.100.0.34服务节点2
10.100.0.101数据库
10.100.0.30zookeeper节点1
10.100.0.31zookeeper节点2
10.100.0.32zookeeper节点3
10.100.0.252RabbitMQ节点

三、搭建步骤

1、部署canal-admin

1)部署服务

官方文档地址:https://github.com/alibaba/canal/wiki/Canal-Admin-QuickStart
主要配置application.yml文件

server:
  port: 8089
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
spring.datasource:
  address: 10.100.0.101:3306
  database: canal_manager
  username: admin
  password: admin
  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: canal
  adminPasswd: canal911

注意:
1、canal.adminPasswd密码并不是管理后面登陆admin的密码,登陆admin的密码是设置在对应的数据库中的,默认为123456。
2、数据库初始化的SQL文件路径:conf/canal_manager.sql

2)登陆浏览器访问

http://10.100.0.27:8089/ 用户名入”admin”,密码输入”123456”

2、配置集群

1)集群配置

在这里插入图片描述
输入集群名称,我这里使用souyee,填写对应的ZK地址:10.100.0.30:2181,10.100.0.31:2181,10.100.0.32:2181

在这里插入图片描述
修改对应的配置:

# canal admin config
#canal.admin.manager = 127.0.0.1:8089
canal.admin.port = 11110

# 密码和用户名和 canal admin配置里面一要致,密码这里采用的是密文,加密方式为 select password('canal911')
canal.admin.user = canal
canal.admin.passwd = B26E4C59F6FAA9D73ECFACCC3336F09B0FB5F9CD

canal.zkServers = 10.100.0.30:2181,10.100.0.31:2181,10.100.0.32:2181

# tcp, kafka, rocketMQ, rabbitMQ,我这里采用的是rabbitMQ
canal.serverMode = rabbitMQ

#改用mysql来存元数据
#canal.instance.tsdb.dir = ${canal.file.data.dir:../conf}/${canal.instance.destination:}
#canal.instance.tsdb.url = jdbc:h2:${canal.instance.tsdb.dir}/h2;CACHE_SIZE=1000;MODE=MYSQL;
canal.instance.tsdb.url = jdbc:mysql://10.100.0.101:3306/canal_tsdb?useUnicode=true&characterEncoding=UTF-8&useSSL=false
canal.instance.tsdb.dbUsername = admin
canal.instance.tsdb.dbPassword = admin
#canal.instance.tsdb.spring.xml = classpath:spring/tsdb/h2-tsdb.xml
canal.instance.tsdb.spring.xml = classpath:spring/tsdb/mysql-tsdb.xml
#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

##################################################
######### 		    RabbitMQ	     #############
##################################################
rabbitmq.host = 10.100.0.252
rabbitmq.virtual.host = /
rabbitmq.exchange = canal.direct
rabbitmq.username = admin
rabbitmq.password = admin
rabbitmq.deliveryMode = 2

注意:这里有vhost和exchange在MQ里面需要手动创建

2)注册Server

vi ./conf/canal_local.properties

# register ip
canal.register.ip =

# canal admin config
canal.admin.manager = 10.100.0.27:8089
canal.admin.port = 11110
canal.admin.user = canal
canal.admin.passwd = B26E4C59F6FAA9D73ECFACCC3336F09B0FB5F9CD
# admin auto register
canal.admin.register.auto = true
canal.admin.register.cluster = souyee
canal.admin.register.name = souyee-27

./bin/startup.sh local

多个节点,同样操作,后在后台就可以看到对应的server
在这里插入图片描述
踩坑:这里注册进来后,一直显示的是断开状态
原因:日志有报错,Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: java.nio.ByteBuffer.clear()Ljava/nio/ByteBuffer; 实际上是jdk版本问题,官方写的是1.5以上,我用的1.8不行,改用15还是不行,后面采用了11测试通过,其它版本大家可以自行测试

3)Instance 管理

在这里插入图片描述
在这里插入图片描述
输入名称,选择集群后,载入模块后,再进行修改:

# 要监控的库的地址
canal.instance.master.address=10.100.0.101:3306

# table meta tsdb info
canal.instance.tsdb.enable=true
canal.instance.tsdb.url=jdbc:mysql://10.100.0.101:3306/canal_tsdb
canal.instance.tsdb.dbUsername=admin
canal.instance.tsdb.dbPassword=admin

# username/password
canal.instance.dbUsername=nacosbl
canal.instance.dbPassword=nacosbl1234
canal.instance.connectionCharset = UTF-8

# table regex
canal.instance.filter.regex=.*\\..*

# mq config
# canal.mq.topic=souyee
# dynamic topic route by schema or table regex
#canal.mq.dynamicTopic=mytest1.user,mytest2\\..*,.*\\..*
canal.mq.dynamicTopic=.*\\..*

四、数据使用

1、 数据查看是否有正确进入交换机

在这里插入图片描述

2、数据使用

1)创建一个队列

在这里插入图片描述

2)绑定数据到队列

在这里插入图片描述

From exchange: 这里填写我们上面配置的交互机名称,我使用的是canal.direct
Routing key: 这里的路由KEY,填写动态路由规则生成的对应的名称,
我们上面配置的是 .*\\..*,所以对应的数据是 数据库名_表名
例如: db:test,table:test,那么对应的就是 test_test
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值