简介

以下关于Canal的介绍来自Github官方介绍。

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

工作原理

  • canal模拟MySQL slave的交互协议,将自己伪装为MySQL slave,向MySQL master发送dump协议。
  • MySQL master收到dump请求,开始推送binary logslave(即canal )。
  • canal解析binary log对象(原始为byte流)。

因此可以使用Canal来提供MySQL数据库增量数据的订阅和消费,当MySQL数据库中的数据发生变化时,Canal可以高效地将这些数据同步到下游服务,比如更新Redis中的数据、提供数据给ElasticSearch以及更新索引异构表等。

架构


说明:

  • server代表一个canal运行实例,对应于一个jvm
  • instance对应于一个数据队列 (1server对应1-ninstance)。

instance模块:

  • eventParser (数据源接入,模拟slave协议和master进行交互,协议解析)。
  • eventSinkParserStore的链接器,进行数据过滤、加工以及分发的工作)。
  • eventStore (数据存储)。
  • metaManager (增量订阅和消费信息管理器)。

环境准备

本篇博客将介绍如何部署Canal以及Canal Admin,而它们的依赖环境必须要提取准备好。

  • 安装Mysql:需要先安装Mysql,博主这里安装Mysql 8(Mysql 8 - CentOS yum & Docker安装Mysql 8),使用CentOS yum方式安装即可,其他操作系统的安装步骤可自行百度。

    设置开机自启动并且立即启动Mysqlsystemctl enable mysqld & systemctl start mysqld,查询Mysql状态:systemctl status mysqld,状态为active (running)即可。
  • 安装JDK:还需要配置JDK环境(JDK8下载地址),下载好压缩包后,使用Xftp将该压缩包上传到虚拟机中。
    解压文件(tar -zxvf jdk-8u202-linux-x64.tar.gz)以及修改/etc/profile配置文件(vim /etc/profile,没有vim可以执行yum install -y vim进行安装)。这些常用工具的配置还是要自己去理解以及多练习,敲熟了,比搜索加Copy快多了(export JAVA_HOME=/usr/local/jdk1.8.0_202export CLASSPATH=.:$JAVA_HOME/libexport PATH=$JAVA_HOME/bin:$PATH)。

    使对/etc/profile配置文件的修改生效(source /etc/profile)。

进入Mysql创建CanalCanal Admin需要使用的用户,并且授予该用户权限。

create user kaven identified by 'kaven';
  • Mysql 8 - CentOS yum & Docker安装Mysql 8,这篇博客有介绍如何进入Mysql 8(需要获取初始密码进入)、修改root用户的密码以及修改合法密码的校验规则,不然给用户设置这种弱密码(kavenMysql 8会报错。

授予用户权限(为了方便,博主这里直接授予用户所有权限,可以根据目前的业务需求来设置):

grant all privileges on *.* to 'kaven'@'%';
flush privileges;


还需要修改Mysql的配置(vim /etc/my.cnf),要先开启binlog写入功能,配置binlog-formatROW模式,my.cnf需要增加的配置如下所示:

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


重启Mysql

systemctl restart mysqld

部署Canal

  • 下载地址

博主这里选择1.1.5版本(Canal Admin要求Canal版本>=1.1.4,需要依赖canal-server提供面向admin的动态运维管理接口),下载下图所示的两个压缩包。

下载好后再将它们上传到虚拟机中。Canal对应于canal.deployer项目,Canal Admin对应于canal.admin项目。先解压canal.deployer压缩包,再修改配置,如果CanalCanal Admin不在同一台主机上部署(博主这里是部署在同一台主机上),需要修改Canal的配置(conf/canal_local.properties)。

[root@localhost local]# mkdir ./canal-server
[root@localhost local]# tar -zxvf canal.deployer-1.1.5.tar.gz -C ./canal-server
[root@localhost local]# cd canal-server/
[root@localhost canal-server]# vim conf/canal_local.properties

配置修改如下图所示:

等启动Canal Admin之后再启动Canal

部署Canal Admin

Canal Admin设计上是为Canal提供整体配置管理、节点运维等面向运维的功能,提供相对友好的WebUI操作界面,方便更多用户快速和安全的操作。

解压文件和修改配置:

[root@localhost canal-server]# cd /usr/local/
[root@localhost local]# mkdir ./canal-admin
[root@localhost local]# tar -zxvf canal.admin-1.1.5.tar.gz -C ./canal-admin/
[root@localhost local]# cd canal-admin/
[root@localhost canal-admin]# vim conf/application.yml

修改数据库相关配置,需要适配Mysql 8

Mysql 8的驱动类名是com.mysql.cj.jdbc.Driver,并且Mysql 8需要配置serverTimezone(以下serverTimezone配置都可以)。

serverTimezone=GMT%2B8
serverTimezone=GMT
serverTimezone=Asia/Shanghai

如果用户使用了sha256_password认证,密码在传输过程中必须使用TLS协议保护,如果RSA公钥不可用,可以使用服务器提供的公钥;可以在连接中通过ServerRSAPublicKeyFile指定服务器的RSA公钥,或者使用allowPublicKeyRetrieval=true参数以允许客户端从服务器获取公钥;但是需要注意的是allowPublicKeyRetrieval=true可能会导致恶意的代理通过中间人攻击(MITM)获取到明文密码,所以默认是关闭的,必须显式开启。

Mysql 8的密码加密方式为caching_sha2_password,将其修改为mysql_native_password,就可以不需要allowPublicKeyRetrieval=true参数。

alter user 'kaven'@'%' identified with mysql_native_password by 'kaven';
flush privileges;

还要将Canal Admin项目中的sql文件导入Mysql中(会生成用于管理Canal的相关表)。

[root@localhost canal-admin]# mysql -uroot -p
Enter password:
mysql> source conf/canal_manager.sqlQuery OK, 1 row affected, 2 warnings (0.06 sec)
Database changed
...
Query OK, 0 rows affected (0.00 sec)mysql> exit
Bye

还需要更换Mysql连接jar包,可以在本地maven仓库里面找,博主选择平时用的最新的8.0.22版本。

使用下面这条命令来查看Mysql版本:

select version();

博主这里的Mysql版本是8.0.27

默认的Mysql连接jar包是5.1.48版本,连接Mysql 8会出问题。

[root@localhost canal-admin]# cd lib
[root@localhost lib]# ll


删除该jar包。

[root@localhost lib]# rm -f mysql-connector-java-5.1.48.jar

使用Xftp上传Mysql 8的连接jar包到Canal Admin项目的lib路径下。

[root@localhost lib]# find ./ -name mysql*
./mysql-connector-java-8.0.22.jar

启动Canal Admin

[root@localhost lib]# cd ..
[root@localhost canal-admin]# sh bin/startup.sh

查看日志,发现日志文件不存在,说明启动失败了。

[root@localhost canal-admin]# tail logs/admin.log
tail: 无法打开"logs/admin.log" 读取数据: 没有那个文件或目录

bin目录下可以找到类似hs_err_pid20182.log的日志文件。

[root@localhost canal-admin]# cd bin
[root@localhost bin]# ll
总用量 40
-rw-r--r--. 1 root root     6 12月 13 23:45 admin.pid
-rw-r--r--. 1 root root 18584 12月 13 23:45 hs_err_pid20182.log
-rwxr-xr-x. 1 root root   205 4月  19 2021 restart.sh
-rwxr-xr-x. 1 root root   747 4月  19 2021 startup.bat
-rwxr-xr-x. 1 root root  2047 4月  19 2021 startup.sh
-rwxr-xr-x. 1 root root  1362 4月  19 2021 stop.sh

由下图可知,Canal Admin启动失败是由于分配2G内存不成功导致的(因为虚拟机本身内存就只分配了2G)。

因此需要修改项目的JVM堆内存配置,这个配置在启动脚本中设置。

[root@localhost bin]# vim startup.sh


初始堆内存和最大堆内存都设置成1G

再启动Canal Admin

[root@localhost bin]# ./startup.sh

再查看日志,如下图所示,说明启动成功了。

启动成功后,再关闭防火墙,让本地可以访问Canal Admin

[root@localhost bin]# systemctl stop firewalld

本地访问192.168.1.199:8089

现在可以启动Canal了。

[root@localhost bin]# cd /usr/local/canal-server
[root@localhost canal-server]# sh bin/startup.sh local

查看日志,检查Canal是否启动成功。

[root@localhost canal-server]# vim logs/canal/canal.log

如下图所示,说明启动成功了。

Server & Instance

刚刚启动的serverCanal)已经在Canal Admin上显示出来了,并且状态是启动。

可以对server进行操作。

比如查看server的日志。

新建instance

如下图所示进行操作即可。

example instance也是启动状态。

可以查看example instance的日志。

再新建一个other instance,配置和example instance一样,other Instance的状态也是启动。

也可以查看other instance的日志。

实现逻辑就是在Canal项目的日志路径和配置路径下创建了对应instance的相关文件。

[root@localhost canal-server]# ll logs
总用量 0
drwxr-xr-x. 2 root root 47 12月 14 15:27 canal
drwxr-xr-x. 2 root root 25 12月 14 15:20 example
drwxr-xr-x. 2 root root 23 12月 14 15:34 other
[root@localhost canal-server]# ll conf
总用量 16
-rwxrwxrwx. 1 root root  319 4月  19 2021 canal_local.properties
-rwxrwxrwx. 1 root root 6277 4月  19 2021 canal.properties
drwxrwxrwx. 2 root root   65 12月 14 15:17 example
-rwxrwxrwx. 1 root root 3437 4月  19 2021 logback.xml
drwxrwxrwx. 2 root root   39 12月 13 23:02 metrics
drwxr-xr-x. 2 root root   38 12月 14 15:36 other
drwxrwxrwx. 3 root root  149 12月 13 23:02 spring
[root@localhost canal-server]# ll conf/other/
总用量 156
-rw-r--r--. 1 root root 155648 12月 14 15:36 h2.mv.db
-rw-r--r--. 1 root root     40 12月 14 15:36 meta.dat

example instance的相关文件在Canal项目中默认存在,而配置信息以在Canal Admin中的配置为准(其他instance也一样),比如修改example instance的数据库用户配置。

example instance的日志中就会出现数据库拒绝访问的错误日志。

因此instance的配置以Canal Admin中的配置为准。部署CanalCanal Admin就介绍到这里,如果博主有说错的地方或者大家有不同的见解,欢迎大家评论补充。

Canal:部署Canal与Canal Admin相关推荐

  1. mysql数据实时同步:Canal安装部署、kafka安装、zk安装、mysql安装、Canal Server+Canal Client HA,Canal+mysql+Kafka,相关验证(学习笔记)

    目录 Canal安装部署 1.1. 服务器准备 1.2. 设置主机名并配置hosts 1.3. 免密设置 1.4. 设置ntp时间 1.5. 关闭防火墙 1.6. 关闭selinux 1.7. 安装J ...

  2. Binlog同步工具Canal部署使用

    为什么80%的码农都做不了架构师?>>>    Canal介绍 早期,阿里巴巴 B2B 公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数据库同步业务,主要是基 ...

  3. 搭建: canal部署与实例运行

    搭建: canal部署与实例运行 数据库读log同步用 详见下面 查看全文 http://www.taodudu.cc/news/show-1081776.html 相关文章: idea插件开发(01 ...

  4. 【Canal】canal部署

    canal部署 1.修改master节点mysql的配置文件开启Binlog [mysqld] skip-ssl skip-host-cache skip-name-resolve default-t ...

  5. canal简介及canal部署、TCP原理和使用介绍

    canal简介及canal部署.原理和使用介绍 canal入门 什么是canal canal使用场景 canal运行原理 MySQL的binlog介绍 什么是binlog 开启MySQL的binlog ...

  6. 【开源实战】Canal部署常见问题:重复解析/Filter失效/消费落后

    前言 Canal是阿里巴巴开源的数据库Binlog日志解析框架,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费. 在之前我写的文章阿里开源MySQL中间件Canal快速入门中, ...

  7. canal简介及canal部署、原理和使用介绍

    阿里canal简介及canal部署.原理和使用介绍 canal入门 什么是canal 阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求, ...

  8. canal部署、原理和使用介绍

    canal简介及canal部署.原理和使用介绍 canal入门 什么是canal 阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,从2 ...

  9. canal下载 linux_阿里canal数据库同步ES使用

    canal的概念这里我就不多说了,以下附上git链接查看:https://github.com/alibaba/canal 随笔记录一下我遇到的问题与修改,这里主要讲如何正确的配置: 首先,去官网下载 ...

  10. php阿里的同步工具canal,基于阿里的Canal实现数据同步

    一.开启同步数据库的binlog功能 (1)开启同步数据端的数据库服务(比如我的将一号虚拟机上的mysql数据库作为同步操作数据库) systemctl start mysql.service mys ...

最新文章

  1. ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
  2. 通过Web.config实现301重定向
  3. 指针:调用自定义交换函数,完成三个数整从小到大排列
  4. 南通大学教务管理微信体验
  5. 父亲浮动,子代也会跟着走
  6. ubuntu下搭建车场环境(代码使用jekins构建)
  7. learn python the hard way 习题6~10总结
  8. .net Asp AdRotator(广告控件)
  9. item_review - 获得淘宝商品评论
  10. linux卸载wine qq,ubuntu安装wineQQ
  11. 【论文解读 KDD 2018 | HEER】Easing Embedding Learning by Comprehensive Transcription of HIN
  12. 苹果和android充电线一根,苹果iPhone8充电接口大变:以后和安卓机用同一根数据线!...
  13. 随身的娱乐!PPC游戏模拟器详细介绍[转贴]
  14. excel怎么更改坐标轴刻度_excel数值坐标轴刻度(excel表格插入图表里坐标轴的刻度能自定义设置吗)...
  15. B站台湾大学郭彦甫|MATLAB 学习笔记|08 图像处理I Image Processing
  16. C++中空类占一字节原因详解
  17. python读取txt文件代码-Python txt文件常用读写操作代码实例
  18. 在以TCP为连接方式的服务器中,为什么在服务端设计当中需要考虑心跳?
  19. Keras Adam代码解析以及EMA的Adam优化器
  20. Java Clob 类型转 String

热门文章

  1. 12、Storage(存储)(基础知识)
  2. 计算机毕业设计SSM电商直播订单管理系统【附源码数据库】
  3. 好像还挺好玩的GAN重制版4——Pytorch搭建SRGAN平台进行图片超分辨率提升
  4. Gitlab安装使用及汉化配置
  5. WPS表格-快速展开全部隐藏行
  6. 12,MongoDB的视图
  7. 如何使用FindBugs进行安全扫描
  8. c++11多线程编程(一):创建线程的三种方法
  9. OAI网络切片三切片配置
  10. 【黑马程序员西安中心】 css布局