canal===docker部署canal

一、canal介绍

canal译为水道,管道,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。
canal的工作原理就是把自己伪装成MySQL slave,模拟MySQL slave的交互协议向MySQL Mater发送 dump协议,MySQL mater收到canal发送过来的dump请求,开始推送binary log给canal,然后canal解析binary log,再发送到存储目的地,比如MySQL,Kafka,Elastic Search等等。

canal的作用:

  • 数据库镜像

  • 数据库实时备份

  • 索引构建和实时维护

  • 业务cache(缓存)刷新

  • 带业务逻辑的增量数据处理
    canal===docker部署canal
    说明:
    server代表一个canal运行实例,对应于一个jvm
    instance对应于一个数据队列

    instance模块:
    eventParser (数据源接入,模拟slave协议和master进行交互,协议解析)
    eventSink (Parser和Store链接器,进行数据过滤,加工,分发的工作)
    eventStore (数据存储)
    metaManager (增量订阅&消费信息管理器)

二、docker部署canal

1.部署canal-admin

#1.下载包
cd /opt
wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/cana l.admin-1.1.5.tar.gz
mkdir canal-admin
tar -zxvf canal.admin-1.1.5.tar.gz -C canal-admin

#2.登录数据库,创建库---mysql安装略(开启binlog)
create database canal_manager;
grant all privileges on canal_manager.* to canal@'%' identified by 'canal'
flush privileges;
exit
mysql -ucanal -pcanal
use canal_manager; 
source /Users/jing/Opt/canal-admin/conf/canal_manager.sql

#3.启动镜像canal-admin
docker pull canal/canal-admin:v1.1.5
docker run --network mynet -p 8089:8089 -v /Opt/canal-admin/conf:/home/admin/canal-admin/conf -v /opt/canal-admin/logs:/home/admin/canal-admin/logs --name canal-admin -e spring.datasource.addres s="mysqlip:3306/canal_manager?allowMultiQueries=true&useUnicod=true&charac terEncodin=utf-8&serverTimezone=CTT&allowPublicKeyRetrieval=true&useSSL= false" -e spring.datasource.username=canal -e spring.datasource.password =canal -e canal.adminPasswd=123456 -d canal/canal-admin:v1.1.5
注:canal_manager.sql 提供的脚本中,canal_user 表提供的默认⽤户名为: canal,密码为:6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9,也就是 SELECT PASSWORD('123456'); 的值
所以登陆 canal-admin 管理平台的⽤户名就是 admin/123456。 
但当你登录进 canal-admin 容器中,会发现在 /home/admin/canal-admin/conf ⽬录存在⼀个 application.yml ⽂件
该⽂件中的配置项正是我们 docker 命令 -e 所指定的选项。 
application.yml ⽂件中存在这样⼀个配置:
 
 canal:
  adminUser: admin
  adminPasswd: admin
  
这⾥请把 adminPasswd 改成 123456,或者在启动容器时指定: -e canal.adminPasswd=123456 ,以保证和 canal_manager 的 canal_user 表下 admin 账号的密 码保持⼀致

浏览器访问:IP:8089  默认用户名密码:admin/123456

2.创建集群

canal===docker部署canal
canal===docker部署canal
canal===docker部署canal

#修改配置
 # zk 的地址需要指定 
 canal.zkServers = zookeeper:2181 
 # tcp, kafka, rocketMQ, rabbitMQ 
 canal.serverMode = tcp 
 # 此配置需要修改成 default-instance 
 canal.instance.global.spring.xml = classpath:spring/default-instance.xml 
 # 这个不需要指定,在admin上⼿动添加 
 canal.destinations

3.启动canal-server镜像

#1.启动canal-server
docker run --network mynet -p 11111:11111 -v /opt/canal-serve r/logs:/home/admin/canal-server/logs/canal --name canal-server01 -e cana l.admin.register.auto=true -e canal.admin.register.cluster=test -e cana l.admin.register.name=canal-server01 -e canal.admin.manager=canal-admin: 8089 -e canal.admin.port=11110 -e canal.admin.user=admin -e canal.admin. passwd=6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 -e canal.admin.register. cluster=test -d canal/canal-server:v1.1.5

canal.admin.passwd 的密码,可在 canal_manager 的 canal_user 表下找到,实际上就是: SELECT upper(sha1(unhex(sha1(‘123456’)))); 的值 我这⾥只起了⼀个 Canal Server,根据需要可以起多个 此时 Canal Admin 将⾃动出现刚刚启动的 Canal Server:
canal===docker部署canal

4.创建 instance

Canal Admin 界⾯上新建 Instance,选择载⼊模板,修改如下配置项:

# mysql集群配置中的serverId概念,需要保证和当前mysql集群中id唯⼀ (v1.1.x版本之后c anal会⾃动⽣成,不需要⼿⼯指定) 
# canal.instance.mysql.slaveId=0 
# mysql主库链接地址 
canal.instance.master.address=mysql:3306 
# mysql主库链接时起始的binlog⽂件 
canal.instance.master.journal.name= 
# mysql主库链接时起始的binlog偏移量 
canal.instance.master.position= 
# mysql主库链接时起始的binlog的时间戳 
canal.instance.master.timestamp= 
# mysql数据库帐号(此处的⽤户名和密码为 安装canal#mysql配置相关#创建canal⽤户 这⼀步 创建的⽤户名和密码) 
canal.instance.dbUsername=canal 
# mysql数据库密码 
canal.instance.dbPassword=canal 
# mysql 数据解析编码 
canal.instance.connectionCharset = UTF-8 
# mysql 数据解析关注的表,Perl正则表达式,即我们需要关注那些库和那些表的binlog数据, 也可以在canal client api中⼿动覆盖 
canal.instance.filter.regex=.*\\..* 
# table black regex 
# mysql 数据解析表的⿊名单,表达式规则⻅⽩名单的规则 
canal.instance.filter.black.regex=mysql\\.slave_.*

三、docker-compose部署canal

1.部署canal-admin

#1.安装docker-compose
sudo yum -y install epel-release
sudo yum -y update
sudo yum -y install python-pip
yum install -y docker-compose
docker-compose -v

#1.将docker部署的配置文件放到相应目录
mv /opt/canal-admin /data/ota/config/canal-admin

#2.在相应的目录下编写yml文件
cd /data/ota/yaml
vim  canal-admin.yml
version: '3.1'
services:
  ota-canal-admin:
    image: canal/canal-admin:v1.1.5
    container_name: ota-canal-admin
    restart: always
    environment:
     spring.datasource.address: 172.17:3306
     spring.datasource.database: canal_manager
     spring.datasource.username: canal
     spring.datasource.password: canal
     driver-class-name: com.mysql.jdbc.Driver
      
    volumes:
      - ../logs/canal-admin:/home/admin/canal-admin/logs
      - ../config/canal-admin/conf:/home/admin/canal-admin/conf
    ports:
      - "18089:8089"
    networks:
      - otanet
    extra_hosts:
      - "ota-mysql:172.17"
      - "ota-canal-admin:172.17"
networks:
  otanet:
    external: true


#3.启动
docker-compose -p ota-canal-admin -f canal-admin.yml  up -d

docker-compose -p ota-canal-admin -f canal-admin.yml  down  #停止

#4.浏览器访问IP:18089

2.部署canal-server

#1.导出手动部署的数据库配置(数据库要在canal-admin部署之前导入)
mysqldump -uroot -p --databases canal_manager >canal_manager.sql
将备份的sql导入数据库

#2.编写yml文件
cd /data/ota/yaml
vim canal-server01.yml
version: '3.1'
services:
  ota-canal-server:
    image: canal/canal-server:v1.1.5
    container_name: ota-canal-server01
    restart: always
    environment:
      PARAMS: "--canal.admin.register.auto=true --canal.admin.register.cluster=test --canal.admin.register.name=canal-server01 --canal.admin.manager=canal-admin:8089 --canal.admin.port=11110 --canal.admin.user=admin --canalk.admin.passwd=6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9  "
    ports:
      - 11111:11111
    volumes:
      - ../logs/canal-server01:/home/admin/canal-server/logs/canal
    networks:
      - otanet
    extra_hosts:
      - "ota-mysql:172.17"
networks:
  otanet:
    external: true


#3.启动
docker-compose -p canal-server01 -f canal-server01.yml up -d
docker-compose -p canal-server01 -f canal-server01.yml down  #停止
上一篇:ElasticSearch实战(四十八)-Debeizum 实现 MySQL 数据实时同步方案


下一篇:基于nfs创建pv、pvc,关联pod