一、canal介绍
canal 是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费
工作原理:
- canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
- MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
- canal 解析 binary log 对象(原始为 byte 流)
官网地址:https://github.com/alibaba/canal
二、服务器准备
192.168.158.211
192.168.158.212
三、软件准备:
1、Mysql要求
当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x
建议配置 binlog 模式为 row
vim /etc/my.cnf
[mysql]
binlog-format=ROW #选择 row 模式
Canal 的原理是把自己模拟成 MySQL Slave,所以这里一定需要为 canal 使用的用户在数据库赋相关权限
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
show grants for 'canal'; ###查看权限
三、软件准备:
2、下载解压软件包
资源包地址:https://github.com/alibaba/canal/releases
以1.1.4为例:https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz (server:监听binlog)
https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.admin-1.1.4.tar.gz (admin:server配置中心)
https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.adapter-1.1.4.tar.gz (client:监听server,可以代码实现)
下载ZK: https://archive.apache.org/dist/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1-bin.tar.gz (zk:HA注册中心)
安全起见建议canal在非root用户下安装运行
useradd canal
passwd canal
mkdir /usr/local/canal ### 创建canal安装目录
chown -R canal:canal /usr/local/canal ### 目录授权
四.单节点模式
1、服务器
角色 | 机器 |
---|---|
Canal Server (canal.deployer) | 192.168.158.211 |
MySQL | 192.168.158.211 |
2、部署&配置
mkdir /usr/local/canal/deployer
tar -zxvf canal.deployer-1.1.4.tar.gz -C /usr/local/canal/deployer
cd /usr/local/canal/deployer
编辑 conf/example/instance.properties ,修改如下 3 个属性值:
canal.instance.master.address=192.168.158.211:3306
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
PS: example 仅是为 instance 起的一个别名,该名称可自定义;当需要定义多个 instance 时,可参考 conf/example 文件夹的范式,在相同的目录下复制多个与 conf/example 仅名称不同的文件夹,并修改文件夹里的内容。再把 instance 名称(即刚创建的文件夹名)追加到 conf/canal.properties 文件的 canal.destinations 属性值中,多个值之间以英文半角的逗号分隔
启动
sh bin/startup.sh
tail -f logs/example/example.log
tail -f logs/canal/canal.log
五.高可用模式
1、服务器
角色 | 机器 |
---|---|
ZooKeeper | 192.168.158.211 (ZK最好是集群,此处略) |
Canal Admin (canal.admin) | 192.168.158.211 |
Canal Server (canal.deployer) | 192.168.158.211、192.168.158.212 |
MySQL | 192.168.158.211 |
2、部署&配置
2.1 zk安装
tar -zxvf apache-zookeeper-3.6.1-bin.tar.gz
mv apache-zookeeper-3.6.1-bin /usr/local/zookeeper
cd /usr/local/zookeeper
cp conf/zoo_sample.cfg conf/zoo.cfg
sh bin/zkServer.sh start
2.2 admin部署
mkdir /usr/local/canal/admin
tar -zxvf canal.admin-1.1.4.tar.gz -C /usr/local/canal/admin
cd /usr/local/canal/admin
编辑 conf/application.yml,修改数据库配置:
(ps:如果此处用户名密码为canal/canal则必须为canal授权INSERT权限,否则后台页面添加集群时会报错)
server:
port: 8089
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
spring.datasource:
address: 127.0.0.1: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
初始化数据
mysql -h127.0.0.1 -uroot -p
> source conf/canal_manager.sql
启动
sh bin/startup.sh
tail -f logs/admin.log
访问 : http://192.168.158.211:8089 admin/123456
2.3 deployer部署
mkdir /usr/local/canal/deployer
tar -zxvf canal.deployer-1.1.4.tar.gz -C /usr/local/canal/deployer
cd /usr/local/canal/deployer
编辑 conf/canal_local.properties ,修改canal.admin.manager属性值,为admin的地址:192.168.158.211:8089
# register ip
canal.register.ip =
# canal admin config
canal.admin.manager = 192.168.158.211: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 =
启动
sh bin/startup.sh local
tail -f logs/canal/canal.log
PS: 此处启动命令后加 local,意为使用使用canal-admin的配置
登录admin,查看自动注册的server
2.4 admin配置管理
1)新建集群(注意zk地址)
2)集群主配置
主要如下 3 个属性值:
canal.admin.manager = 192.168.158.211:8089
canal.zkServers = 192.168.158.211:2181
canal.instance.global.spring.xml = classpath:spring/default-instance.xml (支持HA方式)
ps:有时需要固定ip则需要设置canal.register.ip
3)修改 conf/canal_local.properties 配置
canal.admin.register.cluster = wallet_cluster
PS: 此处配置完canal.admin.register.cluster,以后新建的server会自动注册到该cluster名下.
重启admin,配置生效
4)instance配置
主要如下 3 个属性值:
canal.instance.master.address=127.0.0.1:3306
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
canal.instance.filter.regex=.*\\..*
PS: regex是对库和表的过滤,此正则为perl的正则
PS.其他
1 两个server组成HA,创建一个instance,该instance只会挂在到一个server上,当关停该server,instance会自动切换到另一个server上
以上!!!