一、背景
使用CanalAdmin
來搭建一個canal集群丈牢。
二删豺、機器情況
服務(wù)名 | 機器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 |
三立砸、實現(xiàn)步驟
1戈咳、下載canal admin
# 下載
$ wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.admin-1.1.5.tar.gz
# 解壓,解壓會產(chǎn)生多個目錄 bin、conf等癞蚕,最好新建一個文件夾蕊爵,然后在解壓
tar -zxvf canal.admin-1.1.5.tar.gz
2、配置canalAdmin
3桦山、初始化canal admin數(shù)據(jù)庫
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, 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 應(yīng)用下 canal.adminUser 的值
canal.admin.user = admin
# canal admin 應(yīng)用下 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 應(yīng)用下 canal.adminUser 的值
canal.admin.user = admin
# canal admin 應(yīng)用下 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 后紫谷,發(fā)現(xiàn)已經(jīng)注冊到 canal admin上了,這是因為canal.deployer
里的配置文件canal_local.properties
里的canal.admin.register.auto = true
導(dǎo)致的捐寥。即上一步的配置笤昨。
10、在admin上配置一個instance
可以使用 admin 上的 載入模板
來實現(xiàn)握恳。
# 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數(shù)據(jù)庫帳號(此處的用戶名和密碼為 安裝canal#mysql配置相關(guān)#創(chuàng)建canal用戶 這一步創(chuàng)建的用戶名和密碼)
canal.instance.dbUsername=canal
# mysql數(shù)據(jù)庫密碼
canal.instance.dbPassword=canal
# mysql 數(shù)據(jù)解析編碼
canal.instance.connectionCharset = UTF-8
# mysql 數(shù)據(jù)解析關(guān)注的表睡互,Perl正則表達式根竿,即我們需要關(guān)注那些庫和那些表的binlog數(shù)據(jù)陵像,也可以在canal client api中手動覆蓋
canal.instance.filter.regex=.*\\..*
# table black regex
# mysql 數(shù)據(jù)解析表的黑名單,表達式規(guī)則見白名單的規(guī)則
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上統(tǒng)一維護。
3稼病、本地canal.deployer的啟動采用 bin/startup.sh local
即帶上 local
參數(shù)选侨。
cd /Users/huan/soft/canal/ha-deployer/deployper02
bin/startup.sh local
4、集群模式下然走,雖然有多個canal server
援制,但是只有一個是處于active
狀態(tài),客戶端連接的canal server
是自動連接active狀態(tài)的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>)拆檬,只會看到一臺機器上出現(xiàn)了啟動成功的日志洪己。
5、數(shù)據(jù)消費成功后秩仆,canal server會在zookeeper中記錄下當前最后一次消費成功的binlog位點. (下次你重啟client時码泛,會從這最后一個位點繼續(xù)進行消費)
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個一樣的客戶端噪珊,只有一個可以消費到數(shù)據(jù)。
五齐莲、參考鏈接
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