一、 Otter簡介
otter是一款基於Java且免費、開源基於數據庫增量日誌解析,準實時同步到本機房或異地機房的mysql/oracle數據庫的解決方案。
官方描述:
阿里巴巴B2B公司,因爲業務的特性,賣家主要集中在國內,買家主要集中在國外,所以衍生出了杭州和美國異地機房的需求,同時爲了提升用戶體驗,整個機房的架構爲雙A,兩邊均可寫,由此誕生了otter這樣一個產品。
https://github.com/alibaba/otter
目前支持:
1. 單向同步, mysql/oracle互相同步
2. 雙向同步,無衝突變更
3. 文件同步,本地/aranda文件
4. 雙A同步,衝突檢測&衝突補救
5. 數據遷移,中間表/行記錄同步
架構圖:
原理描述:
- 基於Canal開源產品,獲取數據庫增量日誌數據。 什麼是Canal, 請點擊
- 典型管理系統架構,manager(web管理)+node(工作節點)
a. manager運行時推送同步配置到node節點
b. node節點將同步狀態反饋到manager上 - 基於zookeeper,解決分佈式狀態調度的,允許多node節點之間協同工作.
二、manager
(一)環境準備
- 需要新建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 重複
(九)測試
向源數據庫表添加、修改數據,查看目標數據庫是否也跟着變更。