1、Otter目前支持了什麼html
1. 單向同步, mysql/oracle互相同步node
2. 雙向同步,無衝突變動mysql
3. 文件同步,本地/aranda文件git
4. 雙A同步,衝突檢測&衝突補救github
5. 數據遷移,中間表/行記錄同步web
導歷史表還須要程序代碼實現嗎? 還在用mysql的主從複製嗎? Otter都能爲你解決。算法
典型的場景是帳戶信息表和帳戶交易明細表,更新帳戶餘額後須要登記一條帳戶明細,而且保證在一個事務裏,用戶能夠經過交易明細表查看交易記錄,可是交易明細表的數據量是逐步遞增的,用戶量多的系統,幾個月下來的數據超過千萬了,表數據量一多就致使查詢和插入變慢,而一開始就對帳戶明細作分表處理就難於保證強一致性事務,經過otter能夠將記錄同步導歷史表,而且進行分表處理,用戶往年的交易記錄就能夠查詢歷史表了,而原交易明細表就能夠刪除一個月甚至幾天前的數據;sql
實際測試中,otter的同步速度相比於mysql的複製,約有5倍左右的性能提高,這取決於其同步算法的實現. 拋棄了強一致性,獲得了性能提高。數據庫
2、官方安裝文檔瀏覽器
https://github.com/alibaba/otter/wiki/Manager_Quickstart
https://github.com/alibaba/otter/wiki/Node_Quickstart
演示視頻:http://video.tudou.com/v/XMTc4NjU1MjM4NA==.html
3、總體架構
原理描述:
基於Canal開源產品,獲取數據庫增量日誌數據。
典型管理系統架構,manager(web管理)+node(工做節點)
a. manager運行時推送同步配置到node節點
b. node節點將同步狀態反饋到manager上
基於zookeeper,解決分佈式狀態調度的,容許多node節點之間協同工做.
名詞解釋:
Channel:同步通道,單向同步中一個Pipeline組成,在雙向同步中有兩個Pipeline組成;Pipeline:從源端到目標端的整個過程描述,主要由一些同步映射過程組成;
DataMediaPair:根據業務表定義映射關係,好比源表和目標表,字段映射,字段組等;
DataMedia: 抽象的數據介質概念,能夠理解爲數據表/mq隊列定義;
DataMediaSource: 抽象的數據介質源信息,補充描述DateMedia;
ColumnPair: 定義字段映射關係;
ColumnGroup: 定義字段映射組;
Node: 處理同步過程的工做節點,對應一個jvm;
4、環境準備
1. otter manager依賴於mysql進行配置信息的存儲,因此須要預先安裝mysql,並初始化otter manager的系統表結構
a. 安裝mysql
b. 初始化otter manager系統表:https://raw.github.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql
2. 整個otter架構依賴了zookeeper進行多節點調度,因此須要預先安裝zookeeper,不須要初始化節點,otter程序啓動後會自檢.
manager須要在otter.properties中配置zookeeper集羣機器
3. 安裝jdk1.6+
5、下載安裝
下載頁面:https://github.com/alibaba/otter/releases/
下載manager:wget https://github.com/alibaba/otter/releases/download/v4.2.14/manager.deployer-4.2.14.tar.gz
建立manager目錄 : mkdir ~/manager
tar zxvf manager.deployer-4.2.14.tar.gz -C ~/manager
下載node: wget https://github.com/alibaba/otter/releases/download/v4.2.14/node.deployer-4.2.14.tar.gz
建立node目錄: mkdir ~ /node
tar zxvf node.deployer-4.2.14.tar.gz -C ~ /node
6、修改配置文件運行
(1) Manager
1) otter.properties配置修改 vi ~/manager/conf/otter.properties
##修改成正確訪問ip,生成URL使用,node的配置須要用到
otter.domainName= 127.0.0.1
##manage頁面的訪問端口
otter.port =8080
##修改成正確數據庫信息
otter.database.driver.class.name = com.mysql.jdbc.Driver
otter.database.driver.url = jdbc:mysql://127.0.01:3306/ottermanager
otter.database.driver.username = root
otter.database.driver.password = hello
##爲node鏈接manager的端口, node的配置須要用到
otter.communication.manager.port= 1099
##配置zookeeper集羣機器
otter.zookeeper.cluster.default= 127.0.0.1:2181
其它使用默認配置便可
2) Manager啓動
Linux : sh ~/manager/bin/startup.sh
Windows:startup.bat
查看日誌: vi ~/manager/logs/manager.log
啓動成功後瀏覽器訪問http://127.0.0.1:8080,出現otter的頁面
訪問:http://127.0.0.1:8080/login.htm,初始密碼爲:admin/admin,便可完成登陸. 目前:匿名用戶只有只讀查看的權限,登陸爲管理員才能夠有操做權限
3) 關閉manager
sh ~/manager/bin/stop.sh
(2)Node
node會受ottermanager進行管理,因此須要預先安裝otter manager,完成manager安裝後,須要在manager頁面爲node定義配置信息,並生一個惟一id。
1) 添加zookeeper
首先確保你的zookeeper已啓動成功。
otter依賴zookeeper,訪問manager頁面的機器管理頁面,選擇菜單進入「機器管理→zookeeper管理」頁面:
點擊添加進入「添加Zookeeper集羣」頁面
2) 添加node
Zookeeper添加成功後,進入「機器管理→Node管理」頁面:
點擊添加進入添加機器頁面
3) 配置nid
機器添加完成後,跳轉到機器列表頁面,獲取對應的機器序號nid:
經過這幾步操做,獲取到了node節點對應的惟一標示,稱之爲node id,簡稱nid,好比我添加的機器對應序號爲1
執行echo 1 >~/node/conf/nid , 保存到conf目錄下的nid文件;
4) otter.properties配置修改 vi ~/otter/conf/otter.properties
# node的安裝目錄
otter.nodeHome = ${user.dir}/node
#manager的服務地址
otter.manager.address = 127.0.0.1:1099
5) 啓動
Linux:sh~/node/bin/startup.sh
Windows:startup.bat
打開日誌: vi ~/node/logs/node/node.log,出現如下的錯誤,表示manager頁面的ip配置不正確,此時修改ip爲對應的host ip後,再次啓動便可。
訪問: http://127.0.0.1:8080/,查看「機器管理-Node管理」頁面,對應的節點狀態,若是變爲了已啓動,表明已經正常啓動。
關閉:sh ~/node/bin/stop.sh
7、配置一個同步任務
搭建一個數據庫同步任務,源數據庫必須開啓binlog,而且binlog_format爲ROW,即在mysql的配置文件加上如下兩行
log-bin=mysql-bin
binlog-format=ROW
若是源庫已開啓binlog,經過mysql客戶端命令show master status查看
1. 添加canal
Otter使用canal開源產品獲取數據庫增量日誌數據,能夠把cannal看做是源庫的一個僞slave。
原理: canal模擬mysql slave的交互協議,假裝本身爲mysql slave,向mysql master發送dump協議,mysql master收到dump請求,開始推送binarylog給slave(也就是canal), canal解析binary log對象(原始爲byte流)。
Canal官方文檔:https://github.com/alibaba/canal/wiki
1) 在Otter Manager「配置管理-canal配置」頁面點擊添加:
2) 進入添加cannal頁面:
Node集成了cannal,因此不須要單獨下載cannal;
Cannal 存儲機制分爲memory和file,也能夠在運行模式選項選擇做爲獨立服務運行;
勾選其餘參數設置,能夠設置cannal的服務端口;
必須配置位點信息,不然若是你的數據庫已有存量數據,第一次運行時須要等待比較長的時間,能夠經過鏈接源庫客戶端執行sql獲取,以下:
2. 添加數據源
源庫和目標庫的schema須要一致,否則沒法執行ddl語句
3. 添加數據表配置
「配置管理-數據表配置」進入數據表管理頁面:
點擊添加,進入添加數據表頁面:
table示例說明
4. 添加一個channel
以下圖,點擊添加按鈕進入添加channel頁面,輸入Channel Name後保存,則成功添加一個channel;
5. 配置一個pipeline
添加channel成功後,點擊Channel名字,進入Pipeline管理頁面,添加一個pipeline;
進入添加pipeline頁面
如上圖填好所需信息,勾選高級設置,能夠選是否過濾ddl同步等選項,點擊保存,成功後會返回Pipeline管理頁面。
6. 添加映射關係
添加pipeline成功後,點擊Pipeline名字
進入映射關係列表頁面,點擊添加
進入添加映射關係頁面
點擊保存返回映射關係列表頁面,若是源數據表是隻同步一個表能夠點擊下一步,選擇須要同步的字段映射關係;
7. 啓用同步
以上配置,一個簡單的同步任務就完成了,返回Channel管理頁面
點擊「啓用」,運行狀態就變爲「運行」;
如今能夠新增一個表,插入記錄,查看數據是否同步過去了。
點擊Channel名字,進入Pineline管理頁面,可點擊「監控」查看同步狀態