今天決定引入 canal admin 來管理 canal server, 關(guān)于 canal server 的筆記在我之前寫的文章中 http://www.reibang.com/p/23ae08609e2d, http://www.reibang.com/p/2f3000c6410f
1. 準備 canal admin
- 下載 https://github.com/alibaba/canal/releases/tag/canal-1.1.4 里面的 canal.admin-1.1.4.tar.gz 文件
- 解壓到指定目錄
mkdir canal.admin-1.1.4
tar -xvzf canal.admin-1.1.4.tar.gz -C canal.admin-1.1.4
- 修改 bin/restart.sh
#!/bin/bash
SCRIPT_DIR=$(cd "$(dirname "$0")"; pwd)
sh $SCRIPT_DIR/stop.sh
sh $SCRIPT_DIR/startup.sh
- 修改 conf/application.yml
address: 127.0.0.1:3307
username: root
password: 123456
- 初始化數(shù)據(jù)庫
source conf/canal_manager.sql
2. 使用 canal admin
1. 啟動 canal admin
canal.admin-1.1.4/bin/startup.sh
2. 啟動 canal server
這里要加啟動參數(shù) local, 以最小配置文件 conf/canal_local.properties 啟動 canal server, conf/canal_local.properties 只提供了與 canal admin 通信所需要的相關(guān)配置鸠补,除此之外的 destination/mq 等等配置信息都沒有,canal server 運行需要的更多配置信息全都由 canal admin 提供,也就是 canal_manager.canal_config 表的數(shù)據(jù)
canal.deployer-1.1.4/bin/startup.sh local
3. 登錄 canal admin
- canal_manager.canal_admin 是 canal admin 的用戶表,初始化的時候會創(chuàng)建一個用戶 admin:123456, 可以用這個用戶登錄系統(tǒng)杈曲,登錄之后可以看到已經(jīng)存在一個 canal server, 這就是我們之前啟動的那個
- 在 canal admin 上創(chuàng)建 cluster, server, instance 非常簡單方便,這里不再贅述操作過程蠢护,可以參考官方文檔 https://github.com/alibaba/canal/wiki/Canal-Admin-Guide堤结,這些操作的數(shù)據(jù)最終會保存在 canal_manager 數(shù)據(jù)庫中
3. 分析 canal admin
1. 引入 canal admin 之后 canal server 的數(shù)據(jù)存儲
- 配置信息 (canal.properties/instance.properties) 全部存儲在 canal_manager 數(shù)據(jù)庫中
- 日志信息 (instance.log/meta.log/canal.log/canal_stdout.log) 仍然像引入 canal admin 之前一樣必怜,存儲在 canal.deployer-1.1.4/logs 目錄
- 緩存信息 (h2.mv.db/meta.dat) 也是像引入 canal admin 之前一樣肉拓,存儲在 canal.deployer-1.1.4/conf/instance 目錄
2. canal admin 的數(shù)據(jù)庫 canal_manager
- canal_user: 用戶表,用于保存登錄 canal admin 的用戶, 密碼生成方式 select password('xxxxxx')
- canal_cluster: cluster 表梳庆,用于保存 canal cluster 的基本信息
- canal_node_server: server 表暖途,用于保存 canal server 的基本信息
- canal_config: 全局配置表,用于保存 cluster 和 server 的配置信息膏执,相當(dāng)于 canal.properties 文件
- canal_instance_config: instance 表驻售,用于保存 instance 的基本信息和配置信息,相當(dāng)于 instance.properties 文件
3. canal server 與 canal admin 的認證機制
- canal admin 的 conf/application.yml 里面定義了賬號密碼明文 canal.adminUser:canal.adminPasswd
- canal server 的 conf/canal_local.properties 里面定義了賬號密碼密文 canal.admin.user:canal.admin.passwd
- 密文的生成方式: select password('xxxxxx');
- 雙向認證: canal server 向 canal admin 注冊的時候會以密碼密文做認證, canal admin 對 canal server 做連通性測試的時候也會將密碼明文加密之后做認證 (連通性測試失敗的時候更米,canal admin web 會顯示對應(yīng)的 canal server 處于 "斷開" 狀態(tài))
4. instance 動態(tài)加載機制
- 在引入 canal admin 之前欺栗,可以通過修改 conf/canal.properties 文件設(shè)置 canal.auto.scan = true 來達到動態(tài)加載 instance 的目的,canal server 會主動查詢 canal.conf.dir = ../conf 目錄來增刪 instance
- 在引入 canal admin 之后征峦,之前在 conf/canal.properties 文件里面的 destinations 相關(guān)的配置不再起作用迟几。instance 必須和 canal server 綁定,canal server 運行過程中會根據(jù)綁定關(guān)系動態(tài)加載 instance
5. 疑惑
- canal admin 有一個新功能 : 啟動/停止 instance, 這是之前的裸奔 canal server 不具有的功能栏笆,但是在使用過程中發(fā)現(xiàn)了一些問題
- 在集群模式下通過 canal admin 啟動/停止某一個 instance 是起作用的类腮,canal_manager.canal_instance_config 表里面的數(shù)據(jù)會更新狀態(tài) status = 0, 然后 canal admin 會與 canal server 通信并關(guān)閉進程
- 但是在單機模式下通過 canal admin 啟動/停止某一個 instance, 只會更新 canal_manager.canal_instance_config 表的數(shù)據(jù),并不會真的停止 instance 的對外服務(wù)蛉加,如果有 binlog 更新仍然會寫到 Kafka