暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

通过canal-admin来管理canal集群

Elasticsearch之家 2022-10-29
2801

0.引言

上一期我们讲解了如何搭建canal集群,随着我们节点数量的增加,其管理工作的难度也会增加,我们需要一个可视化的客户端来帮助我们管理这些canal节点。于是乎canal-admin应运而生。

canal搭建主从|集群架构[1]

1. 简介

canal-admin的设计初衷就是为了canal提供整体的配置管理、节点运维等功能。针对多节点的情况,不需要相同的配置每个节点都要操作一遍。为运维人员节约时间。

admin中有三大板块:

集群:也就是一组canal服务端deployer,也称为Server,同一集群的Server的配置文件可以在admin中统一集中管理。也就是说admin是面向多集群的管理



Server:也就是deployer服务,一个deployer节点对应admin中的Server的一条数据,同一个集群下只能有一个deployer节点处于启动状态,原因我们已经在上一篇博文中说明,有兴趣的同学可以自定查看



Instance:一个deployer下有多个实例,就是我们在conf文件夹下配置的子文件夹,每个实例都有自己的instance.properties
配置文件,同样我们可以在admin页面中创建管理该配置文件,实现更加方便的运维



2. admin搭建

1、下载安装包,以下演示基于canal1.1.6



也可以直接在服务器上使用wget指令下载

    wget https://github.com/alibaba/canal/releases/download/canal-1.1.6/canal.admin-1.1.6.tar.gz

    2、创建一个admin文件夹,并且解压安装包

      mkdir canal/admin
      mv canal.admin-1.1.6.tar.gz canal/admin
      cd canal/admin
      tar -zxvf canal.admin-1.1.6.tar.gz

      3、创建并导入canal_manager数据库,编码格式utf8
      ,初始化脚本canal_manager,sql
      可在如下地址下载,也可以在admin/conf
      路径下找到

      canal_manager.sql github下载地址[2]



      4、因为我是用的mysql8.0,而canal-admin中默认提供的驱动器是mysql5.0的,因此要替换一下

        scp mysql-connector-java-8.0.22.jar admin/lib

        5、给驱动器文件赋权,删除旧版本驱动器

          chmod 777 lib/mysql-connector-java-8.0.22.jar
          chmod +st lib/mysql-connector-java-8.0.22.jar
          rm -rf lib/mysql-connector-java-5.1.48.jar

          6、修改配置文件

            vim conf/application.yml

            修改内容

              server:
              port: 8089
              spring:
              jackson:
              date-format: yyyy-MM-dd HH:mm:ss
              time-zone: GMT+8


              spring.datasource:
              # 设置数据库地址
              address: 192.168.244.17:3306
              database: canal_manager
              username: root
              password: 123456
              # 修改myql驱动器
              driver-class-name: com.mysql.cj.jdbc.Driver
              url: jdbc:mysql://${spring.datasource.address}/${spring.datasource.database}?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true
              hikari:
              maximum-pool-size: 30
              minimum-idle: 1


              canal:
              adminUser: admin
              adminPasswd: admin

              7、启动(注:这里启动前,最好给客户端adapter/conf/application.yml文件做个备份,后续会说明其用处)

                ./bin/startup.sh

                8、查看日志,如下图所示则说明启动成功



                9、admin使用的是8089端口,需要提前开启该端口映射

                  # 查询端口是否开放
                  firewall-cmd --query-port=8980/tcp
                  # 开启端口
                  firewall-cmd --add-port=8089/tcp --permanent
                  # 开启后重新加载
                  firewall-cmd --reload

                  10、访问http://192.168.244.26:8089/
                  ,输入默认账号admin/123456
                  访问



                  如图所示,admin就算搭建好了



                  11、在集群管理
                  中,点击新建集群
                  ,新建一个集群配置。这里的zk地址就是服务端集群的zk地址



                  12、点击操作-主配置
                  ,设置一个配置模版



                  13、点击载入模版`,然后根据需要设置配置文件



                  修改内容如下

                    # canal admin config【1】
                    canal.admin.manager = 192.168.244.26:8089
                    # admin auto register【2】
                    canal.admin.register.auto = true
                    canal.admin.register.cluster = cluster-one
                    # 【3】
                    canal.zkServers = 192.168.244.1:2181
                    # 【4】
                    #canal.instance.global.spring.xml = classpath:spring/memory-instance.xml
                    #canal.instance.global.spring.xml = classpath:spring/file-instance.xml
                    canal.instance.global.spring.xml = classpath:spring/default-instance.xml

                    3. 服务端deployer配置

                    1、修改配置文件

                       vim conf/canal_local.properties

                      修改内容

                        # 当前节点ip
                        canal.register.ip = 192.168.244.25


                        canal.admin.manager = 192.168.244.26:8089
                        canal.admin.port = 11110
                        canal.admin.user = admin
                        # admin密码,使用了mysql的password加密后的密码,与admin/conf/applicaiton.yml中设置的密码对应
                        canal.admin.passwd = 4ACFE3202A5FF5CF467898FC58AAB1D615029441
                        # 开启自动注册模式
                        canal.admin.register.auto = true
                        # 指定注册的集群名
                        canal.admin.register.cluster = cluster-one
                        # 注册到admin上的服务名,默认为当前ip
                        canal.admin.register.name =

                        如果要调整admin密码,可以通过如下mysql指令设置

                          # mysql5.0
                          select password('xxx')
                          # mysql8.0
                          select upper(sha1(unhex(sha1('xxx'))))

                          2、启动服务

                            ./bin/startup.sh local

                            注意这里指定了local
                            参数,或者可以将canal.properties文件替换为canal_local.properties



                            服务端启动完成后,将客户端adapter重启一遍

                            4. 管理端admin配置

                            1、一般情况server会自动注册到admin中



                            2、如果没有自动注册的话,就点击新建Server
                            手动添加一下



                            3、之前我们就可以在操作-日志
                            中查看到server的日志情况



                            4、并且可以在主配置
                            中统一修改集群下的服务端deployer的配置文件,也可以统一的查看集群下的服务端实例

                            5、在Instance
                            管理中新增一个实例,也就是我们之前在服务端的conf文件夹下配置的,每一个子文件夹就代表了一个实例,每个实例都有自己的instance.properties
                            配置文件,这里新增的实例就是这个配置文件



                            6、点击操作-启动
                            就可以启用该实例



                            从上述我们可以了解到admin管理的就是我们的服务端deployer服务,已经各个服务下配置的实例,一个服务可以配置多个实例。

                            5. 客户端adapter配置

                            而针对客户端adapter,admin是不做管理的,如上我们配置了一个cluster
                            的实例,如果要实现数据同步,我们还需要配置该实例对应的客户端来将该数据同步到目标数据源

                            这里需要注意的是,如果配置好admin后,启动客户端,出现报错:

                            IllegalStateException: Failed to load property source from location 'classpath:/application.yml'



                            这是由于conf/application.yml
                            配置文件被canal-deployer下的canal.propertity
                            文件内容替换了,发生的原因是canal_manager
                            数据库数据出现问题,将该数据库重新导入一遍即可

                            1、我这里直接用navicat
                            连接后删除了canal_manager,然后重新执行了canal_manager.sql

                            2、当然库删除后数据被清空了,之前在admin管理页面中操作的配置就要重新来一遍了,即如下内容:

                            新建集群,设置主配置添加Server添加Instance

                            3、然后将之前让大家备份的application.yml替换为现有的文件

                              scp application.yml root@192.168.244.25:/var/local/canal1.1.6/adapter/conf/
                              scp application.yml root@192.168.244.26:/var/local/canal1.1.6/adapter/conf/

                              4、然后重新启动adapter

                                ./bin/startup.sh
                                tail -f logs/adapter/adapter.log

                                日志显示启动正常



                                6. 测试

                                1、我这里的同步配置是基于canal搭建主从|集群架构[3]中搭建的环境的,实现的是基于集群的从mysql同步至es,所以我们在此基础上测试

                                上述环境是同步mysql中的user表到es中的同名索引中

                                2、我们在数据库中新增一条数据



                                3、adapter中有日志输出



                                4、观察kibana中索引,数据添加成功



                                总结

                                我们针对canal-admin的演示就到此结束了,可能对于刚刚接触canal的同学来说上手还是有一定的陌生感,但是把握学习的一个要点:只要你用的多,自然就熟悉了。很多以前不理解的知识点,会在你不断的实战用自然而然的消化吸收

                                如果你觉得这篇文章对你有用的话,希望点赞支持一下

                                扫码进群,交流答疑

                                References

                                [1]
                                 canal搭建主从|集群架构: https://wu55555.blog.csdn.net/article/details/127181054
                                [2]
                                 canal_manager.sql github下载地址: https://github.com/alibaba/canal/blob/master/admin/admin-web/src/main/resources/canal_manager.sql
                                [3]
                                 canal搭建主从|集群架构: https://wu55555.blog.csdn.net/article/details/127181054


                                文章转载自Elasticsearch之家,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                评论