CANAL 高可用

Canal 是阿里巴巴mysql數據庫binlog的增量訂閱&消費組件, 你能夠從這兒瞭解它.mysql

Canal 的常見使用場景之一就是數據同步, 例如咱們使用 canal 就是爲了把 mysql 的數據同步到 elasticsearch 中. 使用 canal 作數據同步的時候無疑會涉及到三個部分: 數據源(mysql), canal server(接收 mysql binlog), canal client(接收 canal server 發送的解析過的 binlog 消息).git

爲了保證數據同步高可用, canal 針對上述三個部分設計了對應的高可用方案.github

Canal server 和 client 高可用

Canal server 和 client 端的高可用方案依賴 zookeeper, 啓動 canal server 和 client 的時候都會 zookeeper 讀取信息. Canal 在 zookeeper 存儲的數據結構以下:sql

/otter
└── canal
    └── destinations
        └── flight_segment  # canal 實例名稱 
            ├── 1001 # canal client 信息
            │   ├── cursor # 當前消費的 mysql binlog 位點
            │   ├── filter # binlog 過濾條件
            │   └── running  # 當前正在運行的 canal client 服務器
            ├── cluster # canal server 列表
            │   └── 10.93.61.86:11111 
            └── running # 當前正在運行的 canal server 服務器

Canal server 和 client 啓動的時候都會去搶佔 zk 對應的 running 節點, 保證只有一個 server 和 client 在運行, 而 server 和 client 的高可用切換也是基於監聽 running 節點進行的.數據庫

mysql 多數據源高可用

Canal 一個實例能夠配置兩個數據源, master 和 standby. 假如 master 數據源宕機了, canal 的 MysqlDetectingTimeTask 就會調用 HeartBeatHAController 觸發一個在 master 和 standby 數據源之間的自動切換.bash

MysqlDetectingTimeTask 其實就是在 canal server 和 mysql 之間維護心跳信息, 當 mysql 掛了以後觸發一次自動切換.服務器

固然, 爲了作到上述三種高可用 Canal 作了不少工做, 在這兒就不展開講了, 之後有機會的話會仔細分析一下.數據結構

CANAL 高可用 - Agentdelasticsearch

參考連接:
Canal HA 模式ide

相關文章
相關標籤/搜索