docker安装canal-admin/canal 及使用(监控mysql推送至kafka)

官方文档地址: https://github.com/alibaba/canal/wiki

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

实现场景: canal-admin管理canal,canal读取mysql的增量bin-log数据,发送至kafka,然后服务端消费kafka队列,实现数据监控功能

1.canal-admin 安装

canal-admin 官方参考文档 : https://github.com/alibaba/canal/wiki/Canal-Admin-Docker

# 下载脚本
wget https://raw.githubusercontent.com/alibaba/canal/master/docker/run_admin.sh 
 
# 以8089端口启动canal-admin
sh  run_admin.sh -e server.port=8089 \
         -e canal.adminUser=admin \
         -e canal.adminPasswd=admin

# 指定外部的mysql作为admin的库
sh  run_admin.sh -e server.port=8089 \
         -e spring.datasource.address=xxx \
         -e spring.datasource.database=xx \
         -e spring.datasource.username=xx 
         -e spring.datasource.password=xx
  • run_admin.sh 中封装的是 docker run 的命令
以下截取run_admin.sh
cmd="docker run -d -it -h $LOCALHOST $CONFIG --name=canal-admin $VOLUMNS $NET_MODE $PORTS $MEMORY canal/canal-admin"
echo $cmd
eval $cmd
  • 实际输出的docker命令
root@picbook-preprod:/opt/kafka/canal# sh  run_admin.sh -e server.port=8089 \
>          -e canal.adminUser=admin \
>          -e canal.adminPasswd=admin
docker run -d -it -h 0 -e server.port=8089 -e canal.adminUser=admin -e canal.adminPasswd=admin --name=canal-admin --net=host -m 1024m canal/canal-admin
  • 如果不想使用host的网络模式的话,可以修改sh文件在其中添加端口映射,或者直接运行以下docker run命令
docker run -d -it -h 0 \
-e server.port=8089 \
-e canal.adminUser=admin \
-e canal.adminPasswd=admin \
--name=canal-admin \
-p 8089:8089 \
-m 1024m canal/canal-admin
  • 1.访问 canal-admin, ip:8089
  • 2.在-集群管理-配置主配置文件


    配置zk地址
主配置1
主配置2
主配置3
  • 2.在-instance管理-配置


    instance管理

2.canal-server 安装

官方参考文档: canal-server: https://github.com/alibaba/canal/wiki/Docker-QuickStart

# 下载脚本
wget https://raw.githubusercontent.com/alibaba/canal/master/docker/run.sh

root@picbook-preprod:/opt/kafka/canal# sh run.sh -e canal.admin.manager=47.111.29.234:8089 \
> -e canal.admin.port=11110 \
> -e canal.admin.port=11110 \
> -e canal.admin.user=admin \
> -e canal.admin.passwd=4ACFE3202A5FF5CF467898FC58AAB1D615029441 \
> -e canal.admin.register.cluster=online
docker run -d -it -h 0 -e canal.admin.manager=47.111.29.234:8089 -e canal.admin.port=11110 -e canal.admin.port=11110 -e canal.admin.user=admin -e canal.admin.passwd=4ACFE3202A5FF5CF467898FC58AAB1D615029441 -e canal.admin.register.cluster=online --name=canal-server --net=host -m 4096m canal/canal-server
  • 执行sh脚本默认使用host网络模式,如果不想使用docker host网络模式,修改sh文件,或者直接使用以下docker run命令
# 其中 4ACFE3202A5FF5CF467898FC58AAB1D615029441 是字符 'admin' 在mysql下password函数加密后的字符串结果

docker run -d -it -h 0 -e canal.admin.manager={canal-admin的ip地址}:8089 \
    -e canal.admin.port=11110 \
    -e canal.admin.port=11110 \
    -e canal.admin.user=admin \
    -e canal.admin.passwd=4ACFE3202A5FF5CF467898FC58AAB1D615029441 \
    -e canal.admin.register.cluster=online \
    --name=canal-server \
    -p 11110:11110 \
    -p 11111:11111 \
    -p 11112:11112 \
    -p 9100:9100 \
    -m 4096m canal/canal-server
  • 运行成功后,canal将自动注册到canal-admin中,在canal-admin web页面中的
    主页/Canal Server/Server 管理 能看到新注册的server

3.测试

测试 canal.serverMode=tcp模式下,canal解析bin-log
执行 https://github.com/alibaba/canal/wiki/ClientExample

测试 canal.serverMode=kafka 模式下,canal解析bin-log->kafka->java服务端消费者消费
执行 https://github.com/sunzsh/canaldemo.git

参考:
https://github.com/alibaba/canal/wiki
https://blog.csdn.net/daziyuanazhen/article/details/106098887

你可能感兴趣的:(docker安装canal-admin/canal 及使用(监控mysql推送至kafka))