容器

docker安装canal-admin/canal 及使用(监控

2021-09-17  本文已影响0人  炒面Z

官方文档地址: 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
cmd="docker run -d -it -h $LOCALHOST $CONFIG --name=canal-admin $VOLUMNS $NET_MODE $PORTS $MEMORY canal/canal-admin"
echo $cmd
eval $cmd
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
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 主配置2 主配置3

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
# 其中 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

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

上一篇下一篇

猜你喜欢

热点阅读