@zhangyy
2021-03-12T07:39:08.000000Z
字数 7090
阅读 765
Cannel系列

https://github.com/alibaba/canalcanal 译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。基于日志增量订阅和消费的业务包括数据库镜像数据库实时备份索引构建和实时维护(拆分异构索引、倒排索引等)业务 cache 刷新带业务逻辑的增量数据处理当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x

MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据
canal 工作原理canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )canal 解析 binary log 对象(原始为 byte 流)

rpm -ivh mysql57-community-release-el7-10.noarch.rpmyum install mysql-server


service mysqld startmysql的 密码:sudo grep 'temporary password' /var/log/mysqld.log

修改MySQL 密码:ALTER USER 'root'@'localhost' IDENTIFIED BY 'flyfish123.com';SHOW VARIABLES LIKE 'validate_password%';set global validate_password_policy=0;set global validate_password_length=4;ALTER USER 'root'@'localhost' IDENTIFIED BY 'flyfish123.com';exit

再生产上Canal-Admin自己用的MySQL和你要增量采集binlog的MySQL大概率不是同一个,甚至在不同的机器上。为了简单,我们这里采用同一个MySQL,生产上自己要注意。1、为Canal-Server采集数据创建用户set global validate_password_policy=0;set global validate_password_length=1;GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%'IDENTIFIED BY 'canal123.com' WITH GRANT OPTION;flush privileges;exit
2.为Canal-Admin创建用户GRANT ALL PRIVILEGES ON *.* TO 'canaladmin'@'%'IDENTIFIED BY 'canaladmin123.com' WITH GRANT OPTION;FLUSH PRIVILEGES;exit

3. 配置源MySQL的Binlog格式打开mysql的 bin_log 日志功能vim /etc/my.cnf增加:----server-id=1log-bin=mysql-binbinlog-format=ROWbinlog-ignore-db=information_schemabinlog-ignore-db=mysqlbinlog-ignore-db=performance_schemabinlog-ignore-db=sys----log-bin用于指定binlog日志文件名前缀,默认存储在/var/lib/mysql 目录下。server-id用于标识唯一的数据库,不能和别的服务器重复,建议使用ip的最后一段,默认值也不可以。binlog-ignore-db:表示同步的时候忽略的数据库。binlog-do-db:指定需要同步的数据库(如果没有此项,表示同步所有的库)。配置完保存退出,然后重启MySQL,登录MySQL:service mysqld restartmysql -uroot -pflyfish123.comshow master status ;

禁用explicit_defaults_for_timestampset SHOW VARIABLES LIKE '%explicit_defaults_for_timestamp%';SHOW VARIABLES LIKE '%explicit_defaults_for_timestamp%';service mysqld restartchkconfig mysqld on

安装MySQL的Java驱动tar -zxvf mysql-connector-java-5.1.48.tar.gzcd mysql-connector-java-5.1.48/mv mysql-connector-java-5.1.48.jar /usr/share/java/cd /usr/share/java/chmod 777 mv mysql-connector-java-5.1.48.jar

下载安装包:https://github.com/alibaba/canal/releasescanal admin:https://github.com/alibaba/canal/wiki/Canal-Admin-QuickStart---wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.admin-1.1.4.tar.gzwget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gzmkdir -p /usr/local/canal-admintar -zxvf canal.admin-1.1.4.tar.gz -C /usr/local/canal-admincd /usr/local/canal-admin### 配置canal-admin 的 环境变量vim /etc/profile----#canal-adminexport CANAL_ADMIN_HOME=/usr/local/canal-adminexport PATH=${CANAL_ADMIN_HOME}/bin:$PATH---source /etc/profile


修改配置cd /usr/local/canal-admin/confvim application.yml---server:port: 8089spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8spring.datasource:address: node01.flyfish.cn:3306database: canal_managerusername: canalpassword: canal123.comdriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://${spring.datasource.address}/${spring.datasource.database}?useUnicode=true&characterEncoding=UTF-8&useSSL=falsehikari:maximum-pool-size: 30minimum-idle: 1canal:adminUser: adminadminPasswd: admin----mysql -ucanal -pcanal123.comcreate database canal_manageruse canal_manager;source canal_manager.sql


启动 canal admincd /usr/local/canal-admin/bin/startup.sh


http 登录:http://192.168.100.11:8089默认用户名密码:admin/123456


tar -zxvf zookeeper-3.4.14.tar.gzmv zookeeper-3.4.14 /usr/local/zookeepermkdir -p /usr/local/zookeeper/datamkdir -p /usr/local/zookeeper/logcd /usr/local/zookeeper/data/echo 1 > myid----cd /usr/local/zookeeper/confcp zoo_sample.cfg zoo.cfgvim zoo.cfg----# 心跳时间tickTime=2000# follow连接leader的初始化连接时间,表示tickTime的倍数initLimit=10# syncLimit配置表示leader与follower之间发送消息,请求和应答时间长度。如果followe在设置的时间内不能与leader进行通信,那么此follower将被丢弃,tickTime的倍数syncLimit=5# 客户端连接端口clientPort=2181# 节点数据存储目录,需要提前创建,注意myid添加,用于标识服务器节点dataDir=/usr/local/zookeeper/datadataLogDir=/usr/local/zookeeper/logserver.1=192.168.100.11:2888:3888server.2=192.168.100.12:2888:3888server.3=192.168.100.13:2888:3888--------scp -r zookeeper root@192.168.100.12:/usr/local/scp -r zookeeper root@192.168.100.13:/usr/local/修改192.168.100.12 节点 myidcd /usr/local/zookeeper/data/echo 2 > myid修改192.168.100.13 节点 myidcd /usr/local/zookeeper/data/echo 3 > myid
启动zookeepercd /usr/local/zookeeper/bin/./zkServer.sh start



1. 单机版部署:下载:https://github.com/alibaba/canal/wiki/Canal-Admin-ServerGuide引入了canal-admin之后,canal-server之前面向命令行的运维方式需要有一些变化,主要的变化在于配置体系上,每个server节点上不应该再去维护复杂而且冗长的canal.properties/instance.properties,应该选择以最小化、无状态的方式去启动,因此在canal 1.1.4上,对于配置做了一些重构来支持canal-admin,同时也兼容了原先的命令行运维模式。mkdir -p /usr/local/canal-server/tar -zxvf canal.deployer-1.1.4.tar.gz -C /usr/local/canal-server/配置环境变量vim /etc/profile----#canal-serverexport CANAL_SERVER_HOME=/usr/local/canal-serverexport PATH=${CANAL_SERVER_HOME}/bin:$PATH---source /etc/profile-----cd /usr/local/canal-server/confmv canal_local.properties canal_local.properties.bakmv canal.properties canal.properties.bakvim canal.properties----# register ipcanal.register.ip =# canal admin configcanal.admin.manager = node01.flyfish.cn:8089canal.admin.port = 11110canal.admin.user = admincanal.admin.passwd = 4ACFE3202A5FF5CF467898FC58AAB1D615029441# admin auto registercanal.admin.register.auto = truecanal.admin.register.cluster =-----启动canal:cd /usr/local/canal-server/bin./start.sh



备注 jdk :需要9.0 以上的jdk 下载# https://repo.huaweicloud.com/java/jdk/13+33/useradd elastic && echo elastic |passwd elastic --stdin------https://www.elastic.co/guide/en/elastic-stack-get-started/7.4/get-started-elastic-stack.htmltar -zxvf elasticsearch-7.4.0-linux-x86_64.tar.gzmv elasticsearch-7.4.0 /usr/local/elasticvim /etc/profile----#elasticsearchexport ES_HOME=/usr/local/elasticexport PATH=${ES_HOME}/bin:$PATH----vim /etc/sysctl.conf---vm.max_map_count=262144---sysctl -p
配置escd /usr/local/elasticcd configvim elasticsearch.yml------network.host: 0.0.0.0discovery.seed_hosts: ["192.168.3.65"]cluster.initial_master_nodes: ["node-1"]cluster.name: my-applicationnode.name: node-1xpack.license.self_generated.type: basic-----cd ../用elastic 用户启动esbin/elasticsearch -d
curl http://192.168.3.65:9200

部署kibanauseradd kibana && echo kibana |passwd kibana --stdintar -xzvf kibana-7.4.0-linux-x86_64.tar.gzmv kibana-7.4.0-linux-x64_64 /usr/local/kibanachown kibana:kibana -R /usr/local/kibana/----vim /etc/profile#kibanaexport KIBANA_HOME=/usr/local/kibanaexport PATH=${KIBANA_HOME}/bin:$PATH----cd /usr/local/kibana/config/vim kibana.yml----server.host: "0.0.0.0"elasticsearch.hosts: ["http://192.168.3.65:9200"]----用kibana用户:启动kibanabin/kibana > kibana.out &-------------netstat -nultp |grep 5601浏览器登录:http://192.168.3.65:5601

同步流程是MySQL-->Canal-Server(Instance)--->ClientAdapter--->ES,所涉及组件的关系如下

相关组件的作用:
