1. 程式人生 > >利用otter實現跨機房數據同步

利用otter實現跨機房數據同步

otter 跨機房 數據同步

Otter:

otter是阿裏開源的一個分布式數據庫同步系統,尤其是在跨機房數據庫同步方面,有很強大的功能。它是基於數據庫增量日誌解析,實時將數據同步到本機房或跨機房的mysql/oracle數據庫。


環境:(由於環境隱私原因,環境中使用的外部IP隱藏)

網絡圖:

技術分享圖片

實驗環境:

A機房(公司內網)《===》B機房(雲服務環境內網)

數據源(mysql需開啟binlog,binlog_format=ROW):

Mysql_A:192.168.1.20:3306(外部IP:xx.xx.xx.xx:3306)

Mysql_B:192.168.123.12:3306(外部IP:yy.yy.yy.yy:3306)

角色分布:

Zookeeper:192.168.1.20:3181(外部IP:xx.xx.xx.xx:3181)

Manager:192.168.1.19:2333

Node1(雲服務):192.168.123.12(外部IP:yy.yy.yy.yy:2088)

Node2(公司內網):192.168.1.228:2088(外部IP:xx.xx.xx.xx:2088)

註:由於在現實環境中,考慮到跨機房同步的問題,所以很多時候需要使用到外部IP來進行服務之間的訪問,因此mysql,zookeeper以及nodes都需講相應的端口開放到外網(其中node需開放2088以及9090端口)。


部署otter:

Otter打包

1,下載:https://github.com/alibaba/otter

2,打包機器上安裝mvn打包工具。

3,解壓otter包,並搭建otter所需環境。

#unzip otter-4.2.15.zip
# cd otter-4.2.15/lib
# sh install.sh
# cd ../ && mvn clean install


4,打包。

# mvn clean install -Dmaven.test.skip -Denv=release

打包成功後會在target目錄下生成managernode的代碼包:

技術分享圖片



Manager安裝

1,把打好的manager代碼包傳至manager節點,並解壓。

# tar -zxvf manager.deployer-4.2.16-SNAPSHOT.tar.gz -C /usr/local/otter-manager

2,在mysql中,新建otter所需的庫,並執行otter提供的初始化sql。(初始化sql在otter的代碼包中能找到)

Mysql > create database otter_fjhb;
Mysql > source /path/otter-4.2.15/manager/deployer/src/main/resources/sql/otter-manager-schema.sql

3,Manager配置文件,配置manager端口以及mysql和zookeeper的連接信息。

技術分享圖片


4,啟動manager。

# /usr/local/otter-manager/bin/starup.sh


Node安裝

1,打開manager頁面,配置zookeeper信息,註意node節點需能訪問zookeeper信息,這裏的zk需填寫外部IP來訪問。

技術分享圖片

2,添加node1(華為雲),啟用外部IP。

技術分享圖片

添加node2(華博內網),啟用外部IP:

技術分享圖片

3,進入node服務器,把打包好的node包傳上去,並解壓配置。

# tar -zxvf node.deployer-4.2.16-SNAPSHOT.tar.gz -C /usr/local/otter-node

4,配置manager的地址。

技術分享圖片


5,配置nid (根據node id配置來配置)。

# echo '1' > conf/nid

6,安裝aria2工具(在node節點之間提供文件傳輸通道)。

# tar -zxvf aria2-1.33.1.tar.gz
# cd aria2-1.33.1/ && ./configure &&make && make install

7,啟動node。

# /path/bin/startup.sh

8,Node正確啟動後,可以查看node狀態。

技術分享圖片

註:安裝node要先在manager頁面上配置node信息,否則啟動node的時候會報錯:‘在manager上找不到node x’。



Otter單向數據同步

這裏配置華博內網mysql到華為雲內網mysql的單向數據同步。

其中有如下步驟:

1:配置同步雙方的mysql數據源:配置管理à數據源配置。

這裏填寫的mysql用戶不一定要用root,只要有操作需同步數據的庫表的相關權限即可。

技術分享圖片

技術分享圖片

2:配置同步雙方的相關mysql數據源表,配置管理==》數據表配置。這裏可以配置一個schema下的單張表,也可匹配schema下的所有表,這裏我們配置同步所有表。

技術分享圖片

技術分享圖片


3:配置canal,定義源數據庫,配置管理canal配置。

這裏填寫的mysql用戶不一定是root,但需擁有可執行show master status的權限。

技術分享圖片


4:新增channel、pipline以及映射關系。

技術分享圖片


根據同步的流程位置選擇select機器和load機器,離源mysql近的應為select機器,離目的mysql近的應為load機器。

技術分享圖片


根據同步關系選擇數據源表:

技術分享圖片

技術分享圖片


完成以上配置後返回channel管理,啟用channel,該channel中的pipline就會自動去尋找源mysql中的binglog position位置,兩邊的mysql就開始進入同步狀態了。

技術分享圖片

技術分享圖片



Otter雙向數據同步

雙向同步本質上就是配置兩個單向同步。本質上可以配置兩個channel並分別配置pipline來實現,但是這種情況下,會有數據回環同步的問題。Otter裏面提供了otter雙向回環控制功能,可通過在一個channel裏配置兩個pipline來實現。

這裏實現的是華博內網和華為雲雙向的數據同步,步驟和單向同步類似。

1:配置同步雙方的mysql數據源。

技術分享圖片技術分享圖片

2:配置同步雙方的相關mysql數據源表。

技術分享圖片技術分享圖片

3:配置canal,定義源數據庫。

由於是雙向同步,因此需配置兩個canal。

技術分享圖片技術分享圖片

4:新增channel、pipline以及映射關系。

新增channel。

技術分享圖片

添加pipline,這裏根據同步方向不同,添加兩個pipline。其中一個Pipline高級設置中的的“支持DDL同步”選項需關閉,否則channel會報“一個channel中只允許開啟單向ddl同步!”錯誤。

技術分享圖片技術分享圖片

在兩個pipline中分別添加映射關系,添加完效果如下,形成一個雙向的channel。

技術分享圖片

啟用channel,狀態中會顯示這是一個雙向channel,在完成定位後,雙向同步開始工作。無論在哪個端的mysql操作數據,都會同步到另一端。但註意,由於其中的一個pipline個關閉了ddl同步功能,這裏的ddl操作是單向同步的。

技術分享圖片

技術分享圖片


後記:

以上操作是搭建公司兩個環境mysql數據庫同步的otter時順手寫的文檔。其實otter還針對其他同步場景有不同的配置,比如雙A配置,主從配置等等,這裏由於還未測試過,沒有寫出來,希望後期後空可以做一下相關的實驗。最終的結果效果測試沒有放上來,是基於效果截圖不直觀的考慮。如果正確配置的話,應該同步效果都是沒問題的。

跨機房的otter配置,有個很大的問題就是網絡訪問問題,比如:manager需要能訪問node,node之間需要能互相訪問,manager和node需要能訪問zookeeper,load node需要能訪問源mysql等。如何把所有的關節打通是一個比較繁瑣的問題,大家可以多留意manager和node的日誌。

另外,otter在使用過程中會出現許多不穩定的問題,比如pipline修改配置會造成同步延遲,pipline重啟會導致定位異常等。建議給manager和node節點分配大一點的內存使用。

利用otter實現跨機房數據同步