一、Canal Admin 安裝與配置
1.1 下載
wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.admin-1.1.4.tar.gz
tar zxvf canal.admin-$version.tar.gz
1.2 配置
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.137.1:3306
database: canal_manager
username: canal
password: canal
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://${spring.datasource.address}/${spring.datasource.database}?useUnicode=true&characterEncoding=UTF-8&useSSL=false
hikari:
maximum-pool-size: 30
minimum-idle: 1
canal:
adminUser: admin
adminPasswd: admin
1.3 初始化元數據庫
數據庫腳本位於 conf/canal_manager.sql
1.4 啟動
sh bin/stop.sh
如果啟動成功,可以通過 IP:8089 訪問,默認密碼:admin/123456
二、canal 配置
canal.properties 添加配置:
# canal admin config
canal.admin.manager = 127.0.0.1:8089
canal.admin.port = 11110
canal.admin.user = admin
canal.admin.passwd = 4ACFE3202A5FF5CF467898FC58AAB1D615029441
# admin auto register
canal.admin.register.auto = true
canal.admin.register.cluster =
重啟 canal
或者不修改 canal.properties 配置,直接使用下面命令啟動(使用 canal_local.properties 的配置):
sh bin/startup.sh local
或者刪除 canal.properties 將 canal_local.properties 重命名為 canal.properties, 重啟 canal
注意:需要確保配置的 MySQL 賬戶具有 canal_manager 庫的插入權限,否則報錯:
ERROR com.alibaba.otter.canal.deployer.CanalLauncher - ## Something goes wrong when starting up the canal Server:
com.alibaba.otter.canal.common.CanalException: load manager config failed.
Caused by: com.alibaba.otter.canal.common.CanalException: requestGet for canal config error: Error[INSERT command denied to user 'canal'@'192.168.137.101' for table 'canal_node_server']
直接 canal.properties 添加配置的話,默認的 example 實例會失效:
com.alibaba.otter.canal.common.CanalException: instance : example config is not found
需要在 Canal Admin 手動添加實例
三、更進一步
3.1 Canal Admin 設計理念:
canal-admin的核心模型主要有:
- instance,對應 canal-server 里的 instance,一個最小的訂閱 MySQL 的隊列
- server,對應 canal-server,一個 server 里可以包含多個 instance
- 集群,對應一組 canal-server,組合在一起面向高可用 HA 的運維
instance 因為是最原始的業務訂閱訴求,它會和 server/集群 這兩個面向資源服務屬性的進行關聯,比如 instance A 綁定到 server A 上或者集群 A 上
有了任務和資源的綁定關系后,對應的資源服務就會接收到這個任務配置,在對應的資源上動態加載 instance,並提供服務(動態加載的過程,有點類似於之前的 autoScan 機制,只不過基於 canal-admin 之后可就以變為遠程的 web 操作,而不需要在機器上運維配置文件)
將 server 抽象成資源之后,原本 canal-server 運行所需要的 canal.properties/instance.properties 配置文件就需要在 web ui 上進行統一運維,每個 server 只需要以最基本的啟動配置 (比如知道一下 canal-admin 的 manager 地址,以及訪問配置的賬號、密碼即可)
3.2 面向 user/passwd 的安全 ACL 機制
canal.properties 中的 canal.admin.passwd 對應的是 application.yml 中的 canal.adminPasswd,使用 MySQL 的 password 方法加密(記得去掉第一個首字母的星號):
select password('admin')
+-------------------------------------------+
| password('admin') |
+-------------------------------------------+
| *4ACFE3202A5FF5CF467898FC58AAB1D615029441 |
+-------------------------------------------+
canal.admin.user/canal.admin.passwd,這是一個雙向認證,canal-server 會以這個密文和 canal-admin做請求,同時canal-admin 也會以密碼原文生成加密串后和 canal-server 進行 admin 端口鏈接,所以這里一定要確保這兩個密碼內容的一致性
Canal Admin 后台登錄密碼也是使用 MySQL 的 password 方法加密的,用戶名密碼存儲在 canal_manager 庫的 canal_user 表
參考