canal 高可用配置

如果 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 配置正確 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章