如果 WINDOWS 同機器部署多個 Canal 服務,注意,不是 Canal 實例,請修改端口參數:
1. 修改 canal.propeties 文件中的 canal.port、canal.metrics.pull.port、canal.admin.jmx.port 各配置項,指向其它端口
2. 修改 startup.bat 中 -Xrunjdwp:transport=dt_socket,address=9099 中的 9099 爲其它端口
1. 修改 canal.properties
canal.zkServers=120.78.200.102:2181,120.78.200.102:2182,120.78.200.102:2183 # zookeeper IP 及端口列表
canal.instance.global.spring.xml = classpath:spring/default-instance.xml # 只能是 default-instance.xml,其它不支持 HA
2. 修改instance.properties,兩臺機器上的 instance 目錄的名字需要保證完全一致,HA模式是依賴於instance name進行管理
# canal.instance.mysql.slaveId = 1234 ## v1.0.26+ will autoGen
canal.instance.master.address = 120.78.200.102:3306 # 數據庫地址,不同實例可不一樣
3. 啓動兩臺機器的 Canal
sh bin/startup.sh
注意,只會有一臺機器提示啓動成功
4. 查看 zookeeper 節點信息
bin/zkCli.sh -server 127.0.0.1:2181 # 連接 Zookeeper
[zk: 127.0.0.1:2181(CONNECTED) 56] ls /otter/canal/destinations/zyloops/cluster
[172.19.0.1:22222, 192.168.31.13:11111, 192.168.31.13:22222]
可以看到 zookeeper 中已經存在三個 Canal 服務地址,因爲我在本機啓動了兩個 Canal,在雲服務器啓動了一個,所以這裏顯示了三個,繼續查看當前是哪個在提供服務
[zk: 127.0.0.1:2181(CONNECTED) 58] get /otter/canal/destinations/zyloops/running
{"active":true,"address":"172.19.0.1:22222","cid":2}
可以看到,當前工作的是雲服務上的 Canal
爲了確定當前服務確實在正確地提供服務,可以查看數據推送進度,本次部署採用 Kafka 的方式,所以我們去查看一下 Kafka 中的消息是否正確發佈了
[root@ii ~]# docker exec -it 20 bash
bash-4.4# /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic zyloops
打開消費端,等待消息到來。然後去數據數據進行數據更新操作,比如更新操作
UPDATE t_clz SET `name` = '55 grade3383' WHERE user_id = 1;
可以看到消息正常產出
[root@ii ~]# docker exec -it 20 bash
bash-4.4# /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic zyloops
{"data":[{"id":"11613","user_id":"1","name":"55 grade3383"}],"database":"x1","es":1564044392000,"id":3,"isDdl":false,"mysqlType":{"id":"int(11)","user_id":"int(11)","name":"varchar(50)"},"old":[{"name":"55 grade83"}],"pkNames":["id"],"sql":"","sqlType":{"id":4,"user_id":4,"name":12},"table":"t_clz","ts":1564044392179,"type":"UPDATE"}
說明服務運行正常,現在我們停掉雲服務器上的 Canal
sh bin/stop.sh
重新查看 zookeeper
[zk: 127.0.0.1:2181(CONNECTED) 59] get /otter/canal/destinations/zyloops/running
{"active":true,"address":"192.168.31.13:11111","cid":2}
[zk: 127.0.0.1:2181(CONNECTED) 60]
可以看到,已經自動切換到本機監聽端口爲 11111 的 Canal,繼續進行數據更新操作
UPDATE t_clz SET `name` = '我是誰' WHERE user_id = 1;
Kafka 輸出
[root@ii ~]# docker exec -it 20 bash
bash-4.4# /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic zyloops
{"data":[{"id":"11613","user_id":"1","name":"55 grade3383"}],"database":"x1","es":1564044392000,"id":3,"isDdl":false,"mysqlType":{"id":"int(11)","user_id":"int(11)","name":"varchar(50)"},"old":[{"name":"55 grade83"}],"pkNames":["id"],"sql":"","sqlType":{"id":4,"user_id":4,"name":12},"table":"t_clz","ts":1564044392179,"type":"UPDATE"}
{"data":[{"id":"11613","user_id":"1","name":"55 grade3383"}],"database":"x1","es":1564044392000,"id":1,"isDdl":false,"mysqlType":{"id":"int(11)","user_id":"int(11)","name":"varchar(50)"},"old":[{"name":"55 grade83"}],"pkNames":["id"],"sql":"","sqlType":{"id":4,"user_id":4,"name":12},"table":"t_clz","ts":1564044517759,"type":"UPDATE"}
{"data":[{"id":"11613","user_id":"1","name":"我是誰"}],"database":"x1","es":1564044595000,"id":2,"isDdl":false,"mysqlType":{"id":"int(11)","user_id":"int(11)","name":"varchar(50)"},"old":[{"name":"55 grade3383"}],"pkNames":["id"],"sql":"","sqlType":{"id":4,"user_id":4,"name":12},"table":"t_clz","ts":1564044594437,"type":"UPDATE"}
說明 HA 配置正確