美文网首页中台建设
CanalAdmin搭建Canal Server集群

CanalAdmin搭建Canal Server集群

作者: huan1993 | 来源:发表于2021-06-08 08:40 被阅读0次

    一、背景

    使用CanalAdmin来搭建一个canal集群。

    二、机器情况

    服务名 机器ip 备注
    canal admin 127.0.0.1:8089 canal admin 机器
    canal server 1 127.0.0.1:11111 本地canal server机器
    canal server 2 127.0.0.1:11113 本地canal server机器
    zk 127.0.0.1:2181,
    127.0.0.1:3181,
    127.0.0.1:4181
    本地zk集群
    mysql 127.0.0.1:3306 本地mysql

    三、实现步骤

    1、下载canal admin

     # 下载
     $ wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.admin-1.1.5.tar.gz
     # 解压,解压会产生多个目录 bin、conf等,最好新建一个文件夹,然后在解压
     tar -zxvf canal.admin-1.1.5.tar.gz
    

    2、配置canalAdmin

    canal admin 配置

    3、初始化canal admin数据库

    初始化canal admin数据库

    4、启动canal admin

    bin/startup.sh
    

    5、登录canal admin

    image-20210603095458497

    6、新建集群

    新建集群

    7、集群配置

    多个canal server同一个 canal 配置。(此处主要配置的是 canal.properties)

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

    8、canal server端配置

    下载canal server

     $ wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.deployer-1.1.5.tar.gz
    

    1、第一台canal server的配置

    vim canal_local.properties

    # register ip
    # canal server注册到外部zookeeper、admin的ip信息
    canal.register.ip = 127.0.0.1
    # canal server 的端口
    canal.port = 11111
    # canal server 的metrics 端口
    canal.metrics.pull.port = 11112
    # canal admin config
    canal.admin.manager = 127.0.0.1:8089
    # admin端口,canal 1.1.4版本新增的能力,会在canal-server上提供远程管理操作,默认值11110
    canal.admin.port = 11110
    # canal admin 应用下 canal.adminUser 的值
    canal.admin.user = admin
    # canal admin 应用下 canal.adminPasswd 下的值,但是需要通过 select password('${canal.adminPasswd}')获取,需要去掉前面的*号
    canal.admin.passwd = 4ACFE3202A5FF5CF467898FC58AAB1D615029441
    # admin auto register
    # 是否开启自动注册模式
    canal.admin.register.auto = true
    # 可以指定默认注册的集群名,如果不指定,默认注册为单机模式,集群的名字需要在 canal admin上存在
    canal.admin.register.cluster = canal_local
    # 注册到 canal admin 上server的名字,唯一有意义即可
    canal.admin.register.name = canal_server_01
    

    2、第二台canal server的配置

    vim canal_local.properties

    # register ip
    # canal server注册到外部zookeeper、admin的ip信息
    canal.register.ip = 10.223.40.76
    # canal server 的端口
    canal.port = 11113
    # canal server 的metrics 端口
    canal.metrics.pull.port = 11114
    # canal admin config
    canal.admin.manager = 127.0.0.1:8089
    # admin端口,canal 1.1.4版本新增的能力,会在canal-server上提供远程管理操作,默认值11110
    canal.admin.port = 11110
    # canal admin 应用下 canal.adminUser 的值
    canal.admin.user = admin
    # canal admin 应用下 canal.adminPasswd 下的值,但是需要通过 select password('${canal.adminPasswd}')获取,需要去掉前面的*号
    canal.admin.passwd = 4ACFE3202A5FF5CF467898FC58AAB1D615029441
    # admin auto register
    # 是否开启自动注册模式
    canal.admin.register.auto = true
    # 可以指定默认注册的集群名,如果不指定,默认注册为单机模式,集群的名字需要在 canal admin上存在
    canal.admin.register.cluster = canal_local
    # 注册到 canal admin 上server的名字,唯一有意义即可
    canal.admin.register.name = canal_server_01
    

    9、启动canal server

    bin/startup.sh local
    
    canal server

    本地启动 canal server 后,发现已经注册到 canal admin上了,这是因为canal.deployer里的配置文件canal_local.properties里的canal.admin.register.auto = true导致的。即上一步的配置。

    10、在admin上配置一个instance

    可以使用 admin 上的 载入模板来实现。

    # mysql集群配置中的serverId概念,需要保证和当前mysql集群中id唯一 (v1.1.x版本之后canal会自动生成,不需要手工指定)
    # canal.instance.mysql.slaveId=0
    # mysql主库链接地址
    canal.instance.master.address=127.0.0.1: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_.*
    

    11、查看那个canal server是正在运行中的

    激活中的canal server

    四、注意事项

    1、集群模式下,canal.properties中的canal.instance.global.spring.xml 的值必须是 classpath:spring/default-instance.xml。主配置下,也需要指定zk的地址,不需要指定canal.destinations的值。

    主配置路径

    2、本地的canal.deployer 使用的配置文件是canal_local.properties,建议写最小的配置,其余的在admin上统一维护。

    3、本地canal.deployer的启动采用 bin/startup.sh local即带上 local参数。

    cd /Users/huan/soft/canal/ha-deployer/deployper02
    bin/startup.sh local
    

    4、集群模式下,虽然有多个canal server,但是只有一个是处于active状态,客户端连接的canal server是自动连接active状态的canal server。

    • 可以在zookeeper上通过如下命令查看。
    get /otter/canal/destinations/{instance的名字}/running
    {"active":true,"address":"127.0.0.1:11111"}
    
    • 也可以在多个canal server下的logs目录下,看instance的日志(<u>eg: logs/customer/customer.log</u>),只会看到一台机器上出现了启动成功的日志。

    5、数据消费成功后,canal server会在zookeeper中记录下当前最后一次消费成功的binlog位点. (下次你重启client时,会从这最后一个位点继续进行消费)

    get /otter/canal/destinations/{instance的名字}/1001/cursor
    {"@type":"com.alibaba.otter.canal.protocol.position.LogPosition","identity":{"slaveId":-1,"sourceAddress":{"address":"localhost","port":3306}},"postion":{"gtid":"","included":false,"journalName":"mysql-bin.000016","position":123620,"serverId":1,"timestamp":1622699246000}}
    

    6、canal client也支持HA,同时启动2个一样的客户端,只有一个可以消费到数据。

    五、参考链接

    1、https://github.com/alibaba/canal/wiki/Canal-Admin-QuickStart

    2、https://github.com/alibaba/canal/wiki/AdminGuide

    3、https://github.com/alibaba/canal/wiki/Canal-Admin-Guide

    4、https://github.com/alibaba/canal/wiki/Canal-Admin-ServerGuide

    相关文章

      网友评论

        本文标题:CanalAdmin搭建Canal Server集群

        本文链接:https://www.haomeiwen.com/subject/uokqeltx.html