当前位置:   article > 正文

docker部署Canal + RabbitMQ_docker canal 连接rabbitmq

docker canal 连接rabbitmq

工作中,会遇到数据清洗的情况下,还有就是要用到数据热迁移。就是在不停机的情况下,进行数据迁移工作。这样的情况下,我们就可以利用cannal来完成异步和业务解耦的方式,来完成自动的数据迁移工作。在提高效率和事务一致性的情况下,我们可以采用mq来配合使用。

eeae2ab95335bcae05bedd6fcdc95c8c.jpeg

canal主要是针对mysql的binlog日志的方式来完成数据的迁移工作,结合了RabbitMQ来处理保存变更记录的操作。

接下来,我将采用docker部署的方式,来搭建这样的环境:

首先就是docker-compose.yml脚本的开发:

version: "3"  

services:  

    mysql:  

        network_mode: mynetwork  

        container_name: mymysql  

        ports:  

            - 3306:3306  

        restart: always  

        volumes:  

            - /etc/localtime:/etc/localtime  

            - /home/mycontainers/mymysql/data:/data  

            - /home/mycontainers/mymysql/mysql:/var/lib/mysql  

            - /home/mycontainers/mymysql/conf:/etc/mysql  

        environment:  

            - MYSQL_ROOT_PASSWORD=root  

        command:   

            --character-set-server=utf8mb4  

            --collation-server=utf8mb4_unicode_ci  

            --log-bin=/var/lib/mysql/mysql-bin  

            --server-id=1  

            --binlog-format=ROW  

            --expire_logs_days=7  

            --max_binlog_size=500M  

        image: mysql:5.7.20  

    rabbitmq:     

        container_name: myrabbit  

        ports:  

            - 15672:15672  

            - 5672:5672  

        restart: always  

        volumes:  

            - /etc/localtime:/etc/localtime  

            - /home/mycontainers/myrabbit/rabbitmq:/var/lib/rabbitmq  

        network_mode: mynetwork  

        environment:  

            - RABBITMQ_DEFAULT_USER=admin  

            - RABBITMQ_DEFAULT_PASS=123456  

        image: rabbitmq:3.8-management  

    canal-server:  

        container_name: canal-server  

        restart: always  

        ports:  

            - 11110:11110  

            - 11111:11111  

            - 11112:11112  

        volumes:  

            - /home/mycontainers/canal-server/conf/canal.properties:/home/admin/canal-server/conf/canal.properties  

            - /home/mycontainers/canal-server/conf/instance.properties:/home/admin/canal-server/conf/example/instance.properties  

            - /home/mycontainers/canal-server/logs:/home/admin/canal-server/logs  

        network_mode: mynetwork  

        depends_on:  

            - mysql  

            - rabbitmq  

            # - canal-admin  

        image: canal/canal-server:v1.1.5  

在这里面,我们采用一个网络环境network_mode: mynetwork  ,来完成容器内的服务相互可以访问。

我们需要修改下Canal环境的配置文件:

canal.properties和

instance.properties,映射Canal中的以下两个路径:

/home/admin/canal-server/conf/canal.properties

配置文件中,

canal.destinations意思是server上部署的instance列表,

/home/admin/canal-server/conf/example/instance.properties

修改instance.properties

canal.instance.master.address=mymysql:3306  

canal.instance.dbUsername=canal  

canal.instance.dbPassword=canal  

这里面填写的是容器的mysql,这样完成之后, 我们就可以采用navicat来完成数据库连接校验。

接下来,我们让canal来配合mq来使用:

修改canal.properties中的serverMode:

canal.serverMode = rabbitMQ  

修改instance.properties中的topic:

canal.mq.topic=canal-routing-key  

rabbitmq的配置步骤如下:

重新启动容器,进入RabbitMQ管理页面创建exchange交换器和队列queue:

新建exchange,命名为:

canal-exchange

新建queue,命名为:

canal-queue

绑定exchange和queue,routing-key设置为:

canal-routing-key,这里对应上面

instance.properties的

canal.mq.topic

到此,我们的环境就搭建完毕了。如果大家感兴趣的话,可以用springboot来完成整合环境的结合,测试一下数据迁移工作。

最后说一句(求关注,别白嫖我)

关注公众号【Ai飞仔小密圈】,里面每天分享不一样的AI实用工具和开发经验分享

如果这篇文章对您有所帮助,或者有所启发的话,帮忙扫描下发二维码关注一下,您的支持是我坚持写作最大的动力。

求一键三连:点赞、转发、在看。

关注公众号:【Ai飞仔小密圈】,可以跟很多BAT大厂的前辈交流和学习。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/830222
推荐阅读
相关标签
  

闽ICP备14008679号