Canal入門(四)

Canal入門(四)

實際上,在實際應用開發中,單體架構的很少存在,我們要爲其做一個HA高可用的架構,保障其中一臺宕機後,不影響正常使用。

Canal的HA模式配置

1、機器準備

a. 運行canal的機器: 10.20.144.22 , 10.20.144.51.

b. zookeeper地址爲10.20.144.51:2181

c. mysql地址:10.20.144.15:3306

2、 按照部署和配置,在單臺機器上各自完成配置,演示時instance name爲example

修改canal.properties,加上zookeeper配置

canal.zkServers=10.20.144.51:2181
canal.instance.global.spring.xml = classpath:spring/default-instance.xml

創建example目錄,並修改instance.properties

canal.instance.mysql.slaveId = 1234 ##另外一臺機器改成1235,保證slaveId不重複即可
canal.instance.master.address = 10.20.144.15:3306

注意: 兩臺機器上的instance目錄的名字需要保證完全一致,HA模式是依賴於instance name進行管理,同時必須都選擇default-instance.xml配置

3、啓動兩臺機器的canal

ssh 10.20.144.51
sh bin/startup.sh
--------
ssh 10.20.144.22
sh bin/startup.sh

啓動後,你可以查看logs/example/example.log,只會看到一臺機器上出現了啓動成功的日誌。

2013-03-19 18:18:20.590 [main] INFO  c.a.o.c.i.spring.support.PropertyPlaceholderConfigurer - Loading properties file from class path resource [canal.properties]
2013-03-19 18:18:20.596 [main] INFO  c.a.o.c.i.spring.support.PropertyPlaceholderConfigurer - Loading properties file from class path resource [example/instance.properties]
2013-03-19 18:18:20.831 [main] INFO  c.a.otter.canal.instance.spring.CanalInstanceWithSpring - start CannalInstance for 1-example 
2013-03-19 18:18:20.845 [main] INFO  c.a.otter.canal.instance.spring.CanalInstanceWithSpring - start successful...

查看一下zookeeper中的節點信息,也可以知道當前工作的節點爲10.20.144.51:11111

[zk: localhost:2181(CONNECTED) 15] get /otter/canal/destinations/example/running  
{"active":true,"address":"10.20.144.51:11111","cid":1}

4、客戶端鏈接, 消費數據

可以直接指定zookeeper地址和instance name,canal client會自動從zookeeper中的running節點,獲取當前服務的工作節點,然後與其建立鏈接:

CanalConnector connector = CanalConnectors.newClusterConnector("10.20.144.51:2181", "example", "", "");

鏈接成功後,canal server會記錄當前正在工作的canal client信息,比如客戶端ip,鏈接的端口信息等

[zk: localhost:2181(CONNECTED) 17] get /otter/canal/destinations/example/1001/running
{"active":true,"address":"10.12.48.171:50544","clientId":1001}

數據消費成功後,canal server會在zookeeper中記錄下當前最後一次消費成功的binlog位點. (下次你重啓client時,會從這最後一個位點繼續進行消費)

[zk: localhost:2181(CONNECTED) 16] get /otter/canal/destinations/example/1001/cursor
{"@type":"com.alibaba.otter.canal.protocol.position.LogPosition","identity":{"slaveId":-1,"sourceAddress":{"address":"10.20.144.15","port":3306}},"postion":{"included":false,"journalName":"mysql-bin.002253","position":2574756,"timestamp":1363688722000}}

5、重啓一下canal server

停止正在工作的10.20.144.51的canal server

ssh 10.20.144.51 
sh bin/stop.sh

這時10.20.144.22會立馬啓動example instance,提供新的數據服務

[zk: localhost:2181(CONNECTED) 19] get /otter/canal/destinations/example/running
{"active":true,"address":"10.20.144.22:11111","cid":1}

與此同時,客戶端也會隨着canal server的切換,通過獲取zookeeper中的最新地址,與新的canal server建立鏈接,繼續消費數據,整個過程自動完成

mysql多節點解析配置

1、mysql機器準備

​ 準備兩臺mysql機器,配置爲M-M模式,比如ip爲:10.20.144.25:3306,10.20.144.29:3306

[mysqld] 
xxxxx ##其他正常master/slave配置
log_slave_updates=true ##這個配置一定要打開

2、canal instance配置

# position info
canal.instance.master.address = 10.20.144.25:3306
canal.instance.master.journal.name = 
canal.instance.master.position = 
canal.instance.master.timestamp = 
canal.instance.standby.address = 10.20.144.29:3306
canal.instance.standby.journal.name =
canal.instance.standby.position =
canal.instance.standby.timestamp =
##detecing config
canal.instance.detecting.enable = true ## 需要開啓心跳檢查
canal.instance.detecting.sql = insert into retl.xdual values(1,now()) on duplicate key update x=now() ##心跳檢查sql,也可以選擇類似select 1的query語句
canal.instance.detecting.interval.time = 3 ##心跳檢查頻率
canal.instance.detecting.retry.threshold = 3  ## 心跳檢查失敗次數閥值,超過該閥值後會觸發mysql鏈接切換,比如切換到standby機器上繼續消費binlog
canal.instance.detecting.heartbeatHaEnable = true ## 心跳檢查超過失敗次數閥值後,是否開啓master/standby的切換. 

注意:

​ a. 填寫master/standby的地址和各自的起始binlog位置,目前配置只支持一個standby配置.

​ b. 發生master/standby的切換的條件:(heartbeatHaEnable = true) && (失敗次數>=retry.threshold).

​ c. 多引入一個heartbeatHaEnable的考慮:開啓心跳sql有時候是爲client檢測canal server是否正常工作,如果定時收到了心跳語句,那說明整個canal server工作正常

3、啓動 & 測試

​ 比如關閉一臺機器的mysql , /etc/init.d/mysql stop 。在經歷大概 interval.time * retry.threshold時間後,就會切換到standby機器上

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