數據庫binlog同步工具--otter使用指南

一、 Otter簡介

otter是一款基於Java且免費、開源基於數據庫增量日誌解析,準實時同步到本機房或異地機房的mysql/oracle數據庫的解決方案。

官方描述:

阿里巴巴B2B公司,因爲業務的特性,賣家主要集中在國內,買家主要集中在國外,所以衍生出了杭州和美國異地機房的需求,同時爲了提升用戶體驗,整個機房的架構爲雙A,兩邊均可寫,由此誕生了otter這樣一個產品。
https://github.com/alibaba/otter

目前支持:

    1. 單向同步, mysql/oracle互相同步
    2. 雙向同步,無衝突變更
    3. 文件同步,本地/aranda文件
    4. 雙A同步,衝突檢測&衝突補救
    5. 數據遷移,中間表/行記錄同步

架構圖:

在這裏插入圖片描述

原理描述:

  1. 基於Canal開源產品,獲取數據庫增量日誌數據。 什麼是Canal, 請點擊
  2. 典型管理系統架構,manager(web管理)+node(工作節點)
    a. manager運行時推送同步配置到node節點
    b. node節點將同步狀態反饋到manager上
  3. 基於zookeeper,解決分佈式狀態調度的,允許多node節點之間協同工作.

二、manager

(一)環境準備

  1. 需要新建1個mysql數據庫,存儲otter配置表,和需要同步的源數據庫、目標數據庫不是一個。
    a. 安裝mysql,這裏不展開,網上一搜一大把
    b. mysql創建otter的管理賬戶
    c. 初始化otter manager系統表:
    下載:https://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql
    登錄mysql執行:source otter-manager-schema.sql
    2、新建zookeeper集羣
    不再贅述

(二)manager 安裝

1、下載 otter manager

https://github.com/alibaba/otter/releases
如果gitgub下載不下來,可以自己編譯

git clone git@github.com:alibaba/otter.git
cd otter; 
mvn clean install -Dmaven.test.skip -Denv=release
編譯報錯處理:

a. jar包下載緩慢或者下載不下來

修改maven中央倉庫地址
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>       
    </mirror>

b. google的依賴包無法下載,如jmockit、jtester、ojdbc6

其實官方已經考慮到了,我們從git上pull下來的代碼中有個lib目錄下面就由這幾個jar包,只需要修改pom依賴爲本地jar即可
例如ojdbc6:
			<dependency>
				<groupId>com.oracle</groupId>
				<artifactId>ojdbc6</artifactId>
				<version>11.1.0.7.0</version>
				<scope>system</scope>  
				<systemPath>/home/chen/otter/otter/lib/ojdbc6.jar</systemPath>  
			</dependency>

編譯成功後會在target下產生2個壓縮包:manager和node
在這裏插入圖片描述

2、部署manager

新建目錄manager,
把manager.deployer-xxx.tar.gz解壓到manager下

tar -zxvf manager.deployer-4.2.19-SNAPSHOT.tar.gz -C  /home/chen/otter/manager

在這裏插入圖片描述

3、修改配置

vi conf/otter.properties

otter.domainName = 192.168.150.101   #本機ip
otter.port = 8080  #服務端口
otter.database.driver.url = jdbc:mysql://127.0.0.1:3306/otter #otter配置數據庫
otter.database.driver.username = canal   #配置庫用戶名
otter.database.driver.password = xxx   #配置庫密碼
otter.zookeeper.cluster.default = 127.0.0.1:2181  #zookeeper地址

4、啓動

sh vin/startup.sh

查看日誌
vi logs/manager.log,如下日誌表示啓動成功:

2020-06-12 16:47:30.075 [] INFO  com.alibaba.otter.manager.deployer.JettyEmbedServer - ##Jetty Embed Server is startup!
2020-06-12 16:47:30.075 [] INFO  com.alibaba.otter.manager.deployer.OtterManagerLauncher - ## the manager server is running now ......

5、驗證

瀏覽器訪問
http://192.168.150.101:8080
出現登錄頁面
在這裏插入圖片描述
輸入用戶名密碼 admin/admin,進入管理頁面
在這裏插入圖片描述
需要配置使用的zk、canal、node等地址、端口等信息。
zk配置:
在這裏插入圖片描述
在這裏插入圖片描述
node配置
在這裏插入圖片描述
在這裏插入圖片描述

配置完成後,機器管理第一列就是nid,安裝node時會用到。
在這裏插入圖片描述

三、node

1、之前maven編譯後,會在target目錄生成node.deployer-xxx.tar.gz
2、創建目錄node,把壓縮包解壓到node目錄下

 tar -zxvf node.deployer-4.2.19-SNAPSHOT.tar.gz  -C /home/chen/otter/node

3、修改配置
修改nid (將環境準備中添加機器後獲取到的序號,保存到conf目錄下的nid文件,比如我添加的機器對應序號爲1)

echo 1 > conf/nid

4、啓動

sh bin/startup.sh

5、查看日誌

tail -f  logs/node/node.log
2020-06-16 16:56:25.503 [main] INFO  com.alibaba.otter.node.deployer.OtterLauncher - INFO ## the otter server is running now ......

表示啓動成功
6、驗證
登錄 http://192.168.150.101:8080/nodeList.htm
在這裏插入圖片描述

四、同步任務配置

(一)數據源配置

1、添加數據源

在這裏插入圖片描述

2、添加2個數據源

在這裏插入圖片描述
在這裏插入圖片描述

(二)數據表配置

1、添加數據表

在這裏插入圖片描述

2、添加源表和目標表

在這裏插入圖片描述

在這裏插入圖片描述

(三)canal配置

1、添加canal

在這裏插入圖片描述

2、填寫canal的配置信息

在這裏插入圖片描述
在這裏插入圖片描述

(四)channel管理

1、添加channel

在這裏插入圖片描述
在這裏插入圖片描述

(五)pipeline管理

點擊剛剛創建的channel的查看按鈕
在這裏插入圖片描述
出現如下頁面:
在這裏插入圖片描述
點擊添加
在這裏插入圖片描述
選擇我們添加的機器,和創建的canal。

(六)映射管理管理

點擊剛剛創建的pipeline
在這裏插入圖片描述
顯示如下頁面
在這裏插入圖片描述
點擊添加
在這裏插入圖片描述
選擇源表和目標表,點下一步,
在這裏插入圖片描述
選擇字段對應關係,保存。
所有的配置都完成了。

(七)啓動

點擊同步管理,點擊啓用
在這裏插入圖片描述

(八)修改源mysql binlog配置

修改my.cnf

[mysqld]
log-bin=mysql-bin # 開啓 binlog
binlog-format=ROW # 選擇 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定義,不要和 canal 的 slaveId 重複

(九)測試

向源數據庫表添加、修改數據,查看目標數據庫是否也跟着變更。

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