otter數據訂閱&消費

介紹一款阿里巴巴的數據訂閱&消費工具otter,這款產品當時用於解決阿里中美機房數據庫實時同步問題。

這裏主要講的是用otter增量同步生產數據庫到測試環境數據庫。

otter的定位:

基於數據庫增量日誌分析,實時同步數據

爲什麼不用mysql自帶的主從同步到測試?

因爲測試環境的特殊性,功能比較新,有些新表和新字段,直接從生產同步顯然不能滿足業務需求。otter就能很好解決這個問題,基於binlog分析只對生產有變更的數據進行同步,這樣就不會覆蓋測試環境已修改的數據,測試環境新增字段和表也不會被覆蓋。

otter的工作原理:

01.png

  • 1.基於canal,獲取數據庫增量日誌,otter的核心組件也就是canal。

  • 2.典型的管理系統架構,manager(web管理)+node(節點)

      manager運行時推送同步配置到node節點

      node節點將同步狀態反饋到manager

  • 3.基於zookeeper,解決分佈式狀態調度,允許多node節點之間協同工作。

otter能解決:

  1. 異構庫同步

a. mysql -> mysql/oracle. (目前開源版本只支持mysql增量,目標庫可以是mysql或者oracle,取決於canal的功能)

  1. 單機房同步 (數據庫之間RTT < 1ms)

a. 數據庫版本升級

b. 數據表遷移

c. 異步二級索引

  1. 異地機房同步 (比如阿里巴巴國際站就是杭州和美國機房的數據庫同步,RTT > 200ms,亮點)

a. 機房容災

  1. 雙向同步

a. 避免迴環算法 (通用的解決方案,支持大部分關係型數據庫)

b. 數據一致性算法 (保證雙A機房模式下,數據保證最終一致性,亮點)

  1. 文件同步

a. 站點鏡像 (進行數據複製的同時,複製關聯的圖片,比如複製產品數據,同時複製產品圖片).

實戰:

用途:生產增量同步指定表到測試環境,供測試工程師測試業務,屬於單機房單項同步。

前提,源庫my.cnf開啓,binlog,row模式:

log_bin = mysql-bin    #打開日誌

binlog_format = ROW  #設置row模式的日誌格式

server-id = 2 #id不能重複

在增量之前,做一次數據庫的全量同步,可以用xtrbackup。

  • 1.用docker一鍵安裝啓動otter,自動處理映射,目錄掛載等

curl fsSL https://raw.githubusercontent.com/alibaba/otter/master/docker/run.sh | bash

默認run.sh腳本會通過目錄掛載的方式,將數據文件掛載到當前的data/目錄下(包含zkData/mysql兩個子目錄),所以執行curl之前最好進入到一個自己的工作目錄,比如cd otter

  • 2.訪問otter的manager地址

http://${host}:8080/

  • 3.配置

  • 3.1配置 數據源

02.png

  • 3.2進入配置管理-數據表配置

03.png

  • 3.3進入配置管理-canal配置

66.png

05.png

  • 3.4進入機器管理-node,爲默認配置,otter啓動會默認配好。

06.png

  • 3.5進入同步管理-channel

07.png

  • 3.6點擊相應的channel名字,進入Pipeline配置,高級配置默認就行。

08.png

  • 3.7點擊pipeline名字列表,進入配置映射關係

09.png

  • 3.8配置好後,則同步已開始

注意:表必須設置主鍵才能做同步

  • 4.監控

進入監控-日誌管理,若有異常會有日誌輸出

10.png

  • 5.給出測試數據

CREATE TABLE  `test`.`example` (  `id` int(11)  NOT NULL AUTO_INCREMENT,  `name` varchar(32) COLLATE utf8_bin DEFAULT NULL ,   PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

insert into test.example(id,name) values(null,'hello');

  • 6.效果

源庫中插入數據,目標庫立馬將新數據同步過來

目標庫必須先創建表結構才能同步數據


更多精彩,關注公衆號

gongzhong.jpg


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