[关闭]
@zhangyy 2021-03-12T15:39:08.000000Z 字数 7090 阅读 271

Cannel 的简介与安装

Cannel系列



一:Cannel 简介

1.1 Cannel 的简介

image_1emo45g631j1r7du1suj1ha6ap89.png-144.9kB

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

1.2 Cannel工作原理

image_1emo4jejq1rvojo21g70v3a19krm.png-474.9kB

  1. MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)
  2. MySQL slave master binary log events 拷贝到它的中继日志(relay log)
  3. MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据

  1. canal 工作原理
  2. canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
  3. MySQL master 收到 dump 请求,开始推送 binary log slave (即 canal )
  4. canal 解析 binary log 对象(原始为 byte 流)

二:cannel 的安装

image_1emo6f5drr9t5ni9ga6ks8bv1t.png-215.8kB

2.1 部署MySQL 环境

  1. rpm -ivh mysql57-community-release-el7-10.noarch.rpm
  2. yum install mysql-server

image_1emo6dh751lrp2c115ll126g6a413.png-139.2kB

image_1emo6e2o7egaaec50evc431s1g.png-145.8kB


  1. service mysqld start
  2. mysql 密码:
  3. sudo grep 'temporary password' /var/log/mysqld.log

image_1emo8lru317f712u01dvh5g019kq2a.png-56.5kB


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

image_1emo8pllmasra3i167qq7q18c12n.png-167.9kB

2.3 MySQL特殊处理

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

  1. 2.Canal-Admin创建用户
  2. GRANT ALL PRIVILEGES ON *.* TO 'canaladmin'@'%'IDENTIFIED BY 'canaladmin123.com' WITH GRANT OPTION;
  3. FLUSH PRIVILEGES;
  4. exit

image_1emo97sa44v01vu81oukqf45l634.png-83.1kB


  1. 3. 配置源MySQLBinlog格式
  2. 打开mysql bin_log 日志功能
  3. vim /etc/my.cnf
  4. 增加:
  5. ----
  6. server-id=1
  7. log-bin=mysql-bin
  8. binlog-format=ROW
  9. binlog-ignore-db=information_schema
  10. binlog-ignore-db=mysql
  11. binlog-ignore-db=performance_schema
  12. binlog-ignore-db=sys
  13. ----
  14. log-bin用于指定binlog日志文件名前缀,默认存储在/var/lib/mysql 目录下。
  15. server-id用于标识唯一的数据库,不能和别的服务器重复,建议使用ip的最后一段,默认值也不可以。
  16. binlog-ignore-db:表示同步的时候忽略的数据库。
  17. binlog-do-db:指定需要同步的数据库(如果没有此项,表示同步所有的库)。
  18. 配置完保存退出,然后重启MySQL,登录MySQL
  19. service mysqld restart
  20. mysql -uroot -pflyfish123.com
  21. show master status ;

image_1emo9hn56ld9qr31548pj91nvq3h.png-56.5kB


  1. 禁用explicit_defaults_for_timestamp
  2. set SHOW VARIABLES LIKE '%explicit_defaults_for_timestamp%';
  3. SHOW VARIABLES LIKE '%explicit_defaults_for_timestamp%';
  4. service mysqld restart
  5. chkconfig mysqld on

image_1emo9qbplfa615lgdn8tsj18i43u.png-106.7kB


  1. 安装MySQLJava驱动
  2. tar -zxvf mysql-connector-java-5.1.48.tar.gz
  3. cd mysql-connector-java-5.1.48/
  4. mv mysql-connector-java-5.1.48.jar /usr/share/java/
  5. cd /usr/share/java/
  6. chmod 777 mv mysql-connector-java-5.1.48.jar

image_1emoalacemieu4e1eer9di4cu4b.png-162.9kB

2.4 部署canal

  1. 下载安装包:
  2. https://github.com/alibaba/canal/releases
  3. canal admin:
  4. https://github.com/alibaba/canal/wiki/Canal-Admin-QuickStart
  5. ---
  6. wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.admin-1.1.4.tar.gz
  7. wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz
  8. mkdir -p /usr/local/canal-admin
  9. tar -zxvf canal.admin-1.1.4.tar.gz -C /usr/local/canal-admin
  10. cd /usr/local/canal-admin
  11. ### 配置canal-admin 的 环境变量
  12. vim /etc/profile
  13. ----
  14. #canal-admin
  15. export CANAL_ADMIN_HOME=/usr/local/canal-admin
  16. export PATH=${CANAL_ADMIN_HOME}/bin:$PATH
  17. ---
  18. source /etc/profile

image_1emob1b4e1m11la7lmb1v719p34o.png-117.6kB

image_1emob68rsvvm1eo12gg1pii1b3d58.png-52.7kB


  1. 修改配置
  2. cd /usr/local/canal-admin/conf
  3. vim application.yml
  4. ---
  5. server:
  6. port: 8089
  7. spring:
  8. jackson:
  9. date-format: yyyy-MM-dd HH:mm:ss
  10. time-zone: GMT+8
  11. spring.datasource:
  12. address: node01.flyfish.cn:3306
  13. database: canal_manager
  14. username: canal
  15. password: canal123.com
  16. driver-class-name: com.mysql.jdbc.Driver
  17. url: jdbc:mysql://${spring.datasource.address}/${spring.datasource.database}?useUnicode=true&characterEncoding=UTF-8&useSSL=false
  18. hikari:
  19. maximum-pool-size: 30
  20. minimum-idle: 1
  21. canal:
  22. adminUser: admin
  23. adminPasswd: admin
  24. ----
  25. mysql -ucanal -pcanal123.com
  26. create database canal_manager
  27. use canal_manager;
  28. source canal_manager.sql

image_1emobt4gr3pn1h9dkfj1nl81u985l.png-149.1kB

image_1emobttfc1d6l1snr10g72ur7f062.png-135kB

  1. 启动 canal admin
  2. cd /usr/local/canal-admin/
  3. bin/startup.sh

image_1emobuja3100k1dpc9ki1c90b6a6f.png-190kB

image_1emoc00h91msm1ord2dd1d78bip6s.png-279.7kB

  1. http 登录:
  2. http://192.168.100.11:8089
  3. 默认用户名密码:
  4. admin/123456

image_1emoc5d4h1joo13altvcv5o20d79.png-111.5kB

image_1emoc5ter69i1dlicrahef19on7m.png-159kB


三: 部署zookeeper集群

  1. tar -zxvf zookeeper-3.4.14.tar.gz
  2. mv zookeeper-3.4.14 /usr/local/zookeeper
  3. mkdir -p /usr/local/zookeeper/data
  4. mkdir -p /usr/local/zookeeper/log
  5. cd /usr/local/zookeeper/data/
  6. echo 1 > myid
  7. ----
  8. cd /usr/local/zookeeper/conf
  9. cp zoo_sample.cfg zoo.cfg
  10. vim zoo.cfg
  11. ----
  12. # 心跳时间
  13. tickTime=2000
  14. # follow连接leader的初始化连接时间,表示tickTime的倍数
  15. initLimit=10
  16. # syncLimit配置表示leader与follower之间发送消息,请求和应答时间长度。如果followe在设置的时间内不能与leader进行通信,那么此follower将被丢弃,tickTime的倍数
  17. syncLimit=5
  18. # 客户端连接端口
  19. clientPort=2181
  20. # 节点数据存储目录,需要提前创建,注意myid添加,用于标识服务器节点
  21. dataDir=/usr/local/zookeeper/data
  22. dataLogDir=/usr/local/zookeeper/log
  23. server.1=192.168.100.11:2888:3888
  24. server.2=192.168.100.12:2888:3888
  25. server.3=192.168.100.13:2888:3888
  26. ---
  27. -----
  28. scp -r zookeeper root@192.168.100.12:/usr/local/
  29. scp -r zookeeper root@192.168.100.13:/usr/local/
  30. 修改192.168.100.12 节点 myid
  31. cd /usr/local/zookeeper/data/
  32. echo 2 > myid
  33. 修改192.168.100.13 节点 myid
  34. cd /usr/local/zookeeper/data/
  35. echo 3 > myid

  1. 启动zookeeper
  2. cd /usr/local/zookeeper/bin/
  3. ./zkServer.sh start

image_1emoct727153gspapqgp0fd6u9.png-85.9kB

image_1emoctllj1d0k561n6u1ofv4ilm.png-42.7kB

image_1emocu1js1m3j1g681va15sma5113.png-40.9kB


四: 部署canal-server

  1. 1. 单机版部署:
  2. 下载:
  3. https://github.com/alibaba/canal/wiki/Canal-Admin-ServerGuide
  4. 引入了canal-admin之后,canal-server之前面向命令行的运维方式需要有一些变化,主要的变化在于
  5. 配置体系上,每个server节点上不应该再去维护复杂而且冗长的
  6. canal.properties/instance.properties,应该选择以最小化、无状态的方式去启动,因此在canal 1.1.4
  7. 上,对于配置做了一些重构来支持canal-admin,同时也兼容了原先的命令行运维模式。
  8. mkdir -p /usr/local/canal-server/
  9. tar -zxvf canal.deployer-1.1.4.tar.gz -C /usr/local/canal-server/
  10. 配置环境变量
  11. vim /etc/profile
  12. ----
  13. #canal-server
  14. export CANAL_SERVER_HOME=/usr/local/canal-server
  15. export PATH=${CANAL_SERVER_HOME}/bin:$PATH
  16. ---
  17. source /etc/profile
  18. -----
  19. cd /usr/local/canal-server/conf
  20. mv canal_local.properties canal_local.properties.bak
  21. mv canal.properties canal.properties.bak
  22. vim canal.properties
  23. ----
  24. # register ip
  25. canal.register.ip =
  26. # canal admin config
  27. canal.admin.manager = node01.flyfish.cn:8089
  28. canal.admin.port = 11110
  29. canal.admin.user = admin
  30. canal.admin.passwd = 4ACFE3202A5FF5CF467898FC58AAB1D615029441
  31. # admin auto register
  32. canal.admin.register.auto = true
  33. canal.admin.register.cluster =
  34. -----
  35. 启动canal
  36. cd /usr/local/canal-server/bin
  37. ./start.sh

image_1emof6e26jna1ro41obc1r4mc761g.png-252.2kB

image_1emof7f3a170bng51rokj3l6gc1t.png-42.1kB

image_1emof89lb1fm5of91v4p1g8q188o2a.png-157kB


五: MySQL同步ES

5.1 安装Elasticsearch

  1. 备注 jdk :
  2. 需要9.0 以上的jdk 下载
  3. # https://repo.huaweicloud.com/java/jdk/13+33/
  4. useradd elastic && echo elastic |passwd elastic --stdin
  5. ------
  6. https://www.elastic.co/guide/en/elastic-stack-get-started/7.4/get-started-elastic-stack.html
  7. tar -zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz
  8. mv elasticsearch-7.4.0 /usr/local/elastic
  9. vim /etc/profile
  10. ----
  11. #elasticsearch
  12. export ES_HOME=/usr/local/elastic
  13. export PATH=${ES_HOME}/bin:$PATH
  14. ----
  15. vim /etc/sysctl.conf
  16. ---
  17. vm.max_map_count=262144
  18. ---
  19. sysctl -p

  1. 配置es
  2. cd /usr/local/elastic
  3. cd config
  4. vim elasticsearch.yml
  5. ------
  6. network.host: 0.0.0.0
  7. discovery.seed_hosts: ["192.168.3.65"]
  8. cluster.initial_master_nodes: ["node-1"]
  9. cluster.name: my-application
  10. node.name: node-1
  11. xpack.license.self_generated.type: basic
  12. -----
  13. cd ../
  14. elastic 用户启动es
  15. bin/elasticsearch -d

  1. curl http://192.168.3.65:9200

image_1eniakomgoiv1i2f1ho1hfn1k719.png-87.3kB

  1. 部署kibana
  2. useradd kibana && echo kibana |passwd kibana --stdin
  3. tar -xzvf kibana-7.4.0-linux-x86_64.tar.gz
  4. mv kibana-7.4.0-linux-x64_64 /usr/local/kibana
  5. chown kibana:kibana -R /usr/local/kibana/
  6. ----
  7. vim /etc/profile
  8. #kibana
  9. export KIBANA_HOME=/usr/local/kibana
  10. export PATH=${KIBANA_HOME}/bin:$PATH
  11. ----
  12. cd /usr/local/kibana/config/
  13. vim kibana.yml
  14. ----
  15. server.host: "0.0.0.0"
  16. elasticsearch.hosts: ["http://192.168.3.65:9200"]
  17. ----
  18. kibana用户:启动kibana
  19. bin/kibana > kibana.out &
  20. -------------
  21. netstat -nultp |grep 5601
  22. 浏览器登录:
  23. http://192.168.3.65:5601

image_1eniao40ohom5ma6ireqv110hm.png-104.8kB

五:配置同步流

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

image_1eniavsv6g8i1tnt19o91hhu15o613.png-68.4kB

  1. 相关组件的作用:

image_1enib3k2o1d5gci51aar1uqrm0v1g.png-143.4kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注