当前位置: 首页 > 工具软件 > Canal.js > 使用案例 >

Canal部署指南

农弘毅
2023-12-01

Canal部署指南

官网:https://github.com/alibaba/canal

1. MySQL

1.1 配置binlog

1.1.1 自建MySQL

对于自建 MySQL , 需要先开启 Binlog 写入功能,配置 binlog_format 为 ROW 模式

// 查看是否开启binlog
SHOW VARIABLES LIKE 'log_bin'; 

// 查看binlog-format
SHOW VARIABLES LIKE 'binlog_format';

若已开启binlog, 且binlog_format 为 ROW 模式可以直接跳过这一步

其他情况,则需在my.cnf 中进行如下配置

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

1.1.2 阿里云 RDS for MySQL

针对阿里云 RDS for MySQL , 默认打开了 binlog , 并且账号默认具有 binlog dump 权限 , 不需要任何权限或者 binlog 设置,可以直接跳过这一步

1.2 配置用户

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

CREATE USER canal IDENTIFIED WITH mysql_native_password BY 'canal'; 
// 若不携带WITH mysql_native_password,可能会出现无法登录的问题
// 具体原因详见https://kalacloud.com/blog/authentication-plugin-caching-sha2-password-cannot-be-loaded/

// 若出现Your password does not satisfy the current policy requirements,则需核对密码复杂度策略
SHOW VARIABLES LIKE 'validate_password%';//具体参数解释可查看https://www.cnblogs.com/mysqljs/p/14246130.html

// 若为非生产环境,可直接调整密码强度
SET GLOBAL validate_password.policy=LOW

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

参考文档:

2. Zookeeper

2.1 下载

sudo mkdir -p /usr/local/zookeeper
cd /usr/local/zookeeper

# 阿里云zookeeper镜像:https://mirrors.aliyun.com/apache/zookeeper/
sudo wget https://mirrors.aliyun.com/apache/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz
# 解压
sudo tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz --strip-components 1

2.2 配置

cd /usr/local/zookeeper/conf
sudo cp zoo_sample.cfg zoo.cfg
sudo vim zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/logs
clientPort=2181
# 3.5.0版本之后,内置Jetty Server,端口默认8080,若被占用,则需要修改此配置
admin.serverPort=12181

2.3 启动

cd /usr/local/zookeeper/bin

# 初始化日志和数据存储目录
sudo ./zkServer-initialize.sh --force

# 启动
sudo ./zkServer.sh  start

# 验证
telnet 127.0.0.1 2181

参考文档:https://github.com/alibaba/canal/wiki/Zookeeper-QuickStart

3. Kafka

3.1 下载

sudo mkdir  -p /usr/local/kafka
cd /usr/local/kafka

# 阿里云kafka镜像:https://mirrors.aliyun.com/apache/kafka/
sudo wget https://mirrors.aliyun.com/apache/kafka/3.3.1/kafka_2.13-3.3.1.tgz -O kafka_2.13-3.3.1.tgz
# 解压
sudo tar -zxvf kafka_2.13-3.3.1.tgz --strip-components 1

3.2 配置

sudo vim /usr/local/kafka/config/server.properties
# 监听地址
listeners=PLAINTEXT://:9092

# zk地址
zookeeper.connect=localhost:2181

# 数据存放位置
log.dirs=/usr/local/kafka/kafka-logs

3.3 启动

cd /usr/local/kafka/
# 启动
sudo bin/kafka-server-start.sh  -daemon  config/server.properties &
# 查看所有topic
sudo bin/kafka-topics.sh --list --zookeeper 127.0.0.1:2181

参考文档:https://github.com/alibaba/canal/wiki/Kafka-QuickStart

4. Canal

4.1 下载

访问 release 页面 , 选择需要的包下载, 如以 1.1.6 版本为例

# 创建并切换目录
sudo mkdir -p /usr/local/canal
cd /usr/local/canal

# 下载canal,若文件下载太慢,可使用https://proxy.zyun.vip/进行加速
sudo wget https://github.com/alibaba/canal/releases/download/canal-1.1.6/canal.deployer-1.1.6.tar.gz
tar -zxvf canal.deployer-1.1.6.tar.gz

4.2 配置

sudo vim /usr/local/canal/conf/canal.properties

# 可选项: tcp(默认), kafka,RocketMQ,rabbitmq,pulsarmq
canal.serverMode = kafka

# canal instance目录
# 这里的canal.destinations = example可以设置多个,比如example1,example2,
# 设置完之后,需要创建对应的两个文件夹,并且每个文件夹下都有一个instance.properties文件
canal.destinations = example

# 默认开启,开启后canal.destinations配置将会失效,以自动扫描的为准
canal.auto.scan = true

# 自动重置位点,非生产环境可以开启,生产环境禁止开启
canal.auto.reset.latest.pos.mode = false

# kafka地址
kafka.bootstrap.servers = 127.0.0.1:9092
sudo vim /usr/local/canal/conf/example/instance.properties

# 需要监听的数据库地址
canal.instance.master.address=127.0.0.1:3306
# 数据库账号/密码
canal.instance.dbUsername = canal
canal.instance.dbPassword = canal

# mq config
# 需要监听的表
canal.instance.filter.regex=库名.表名,库名.表名
# 针对库名或者表名发送动态topic
canal.mq.dynamicTopic=库名.表名,库名.表名

4.3 启动

# 启动
sudo /usr/local/canal/bin/startup.sh

# 查看 server 日志
tail -100f /usr/local/canal/logs/canal/canal.log

# 查看 instance 的日志
tail -100f /usr/local/canal/logs/example/example.log

参考文档:

 类似资料: