CanalAdmin搭建Canal Server集群

1、背景

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

2、机器状况

服务名 机器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,<br/>127.0.0.1:3181,<br/>127.0.0.1:4181 本地zk集群
mysql 127.0.0.1:3306 本地mysql

3、实现步骤

一、下载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

二、配置canalAdmin

canal admin 配置

三、初始化canal admin数据库

初始化canal admin数据库

四、启动canal admin

bin/startup.sh

五、登陆canal admin

image-20210603095458497

六、新建集群

新建集群

七、集群配置

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

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 =

八、canal server端配置

下载canal servergithub

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

一、第一台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

二、第二台canal server的配置

vim canal_local.propertiesspring

# 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

九、启动canal server

bin/startup.sh local

canal server

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

十、在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_.*

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

激活中的canal server

4、注意事项

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

主配置路径

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

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

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

四、集群模式下,虽然有多个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>),只会看到一台机器上出现了启动成功的日志。

五、数据消费成功后,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}}

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

5、参考连接

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

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

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

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