一、背景
应用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,<br/>127.0.0.1:3181,<br/>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
3、初始化canal admin数据库
4、启动canal admin
bin/startup.sh
5、登录canal admin
6、新建集群
7、集群配置
多个canal server同一个 canal 配置。(此处次要配置的是 canal.properties)
# 须要批改的配置项# zk 的地址须要指定canal.zkServers = 127.0.0.1:2181,127.0.0.1:3181,127.0.0.1:4181# tcp, kafka, rocketMQ, rabbitMQcanal.serverMode = tcp# 此配置须要批改成 default-instancecanal.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 configcanal.admin.manager = 127.0.0.1:8089# admin端口,canal 1.1.4版本新增的能力,会在canal-server上提供远程管理操作,默认值11110canal.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 configcanal.admin.manager = 127.0.0.1:8089# admin端口,canal 1.1.4版本新增的能力,会在canal-server上提供远程管理操作,默认值11110canal.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 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是正在运行中的
四、注意事项
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/deployper02bin/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