數據同步——otter

參考文獻:Otter-入門篇1(阿里開源項目Otter介紹)java

1、背景

本人是一名應屆畢業生,,還在努力挖坑。最近兩個月被外派到其餘公司作一個升級系統,作到如今一個多月。學到的東西不少,想總結的東西也不少,但是。。。時間是讓人猝不及防的東西。好吧,如今先來總結otter數據同步。升級系統須要作到內網數據庫(主)和外網的n個數據庫(從)進行數據同步,考慮的方案有:
  1. 直接在項目配置n個從數據庫加1個主庫,可是碼代碼太麻煩了,有工具多好使。
  2. 用percona-tookit
    下載連接:https://www.percona.com/downl...
    github demo:https://github.com/mrjgreen/d...(表示還沒看。。)
  3. 用otter(分佈式數據庫同步系統),純java編寫,支持windows,linux。阿里開源項目,數據同步的解決方案。連接:http://pan.baidu.com/s/1eR5ccQe
    密碼:r5cp,github:https://github.com/alibaba/otter

2、Otter是什麼?

Ottter是由阿里巴巴開源的一個數據同步產品,它的最初的目的是爲了解決跨國異地機房雙A架構,兩邊可寫的場景,開發時間從2011年7月份一直持續到如今,目前阿里巴巴B2B內部的本地/異地機房的同步需求基本全上了Otter。Otter基於數據庫增量日誌解析,支持mysql/oracle數據庫進行同步,在最新的v4.2.13已經支持mysql5.7以及阿里雲提供的RDS數據庫(使用RDS童鞋的福音)。

Otter工做原理:node

  1. 基於Canal開源產品,獲取數據庫增量日誌數據。 什麼是Canal,
    請點擊https://github.com/alibaba/canal
  2. 典型管理系統架構,manager(web管理)+node(工做節點)
    manager運行時推送同步配置到node節點
    node節點將同步狀態反饋到manager上
  3. 基於zookeeper,解決分佈式狀態調度的,容許多node節點之間協同工做.(otter node依賴於zookeeper進行分佈式調度,須要安裝一個zookeeper節點或者集羣)

總體架構

  • db : 數據源以及須要同步到的庫
  • Canal : 用戶獲取數據庫增量日誌,目前主要支持mysql
  • manager : 配置同步規則設置數據源同步源等
  • zookeeper : 協調node進行協調工做
  • node : 負責任務處理處理接受到的部分同步工做

3、Canel是什麼?

阿里的開源項目。mysql數據庫binlog的增量訂閱&消費組件基於日誌增量訂閱&消費支持的業務:數據庫鏡像、數據庫實時備份、級索引 (賣家和買家各自分庫索引)、search build、業務cache刷新、價格變化等重要業務消息。github:https://github.com/alibaba/canal

首先來看mysql主備複製的原理:
mysql主備複製mysql

再看canel的原理:

圖片描述

原理相對比較簡單:
模擬mysql slave的交互協議,假裝本身爲mysql slave,向mysql master發送dump協議
mysql master收到dump請求,開始推送binary log給slave(也就是canal)
canal解析binary log對象(原始爲byte流).

4、otter環境搭建(所需文件已在上方下載連接)

先看看安裝後的目錄

目錄

  1. 安裝好mysql
  2. 安裝好jdk,配置環境變量,zookeeper和Otter-manager都須要依賴java
  3. 安裝配置zookeeper,這裏配置的是單機模式,它還有集羣模式,能夠看
    http://blog.csdn.net/mark_lq/...http://blog.csdn.net/kongxx/a...
    圖片描述linux

    修改bin/zkEnv.sh腳本:
       將ZOO_LOG_DIR="."修改成ZOO_LOG_DIR="/tmp/zookeeper/data"
       將ZOO_LOG4J_PROP=」INFO,CONSOLE」修改成ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
       修改bin/zkServer.sh腳本:
       將ZOOBIN="${BASH_SOURCE-$0}"修改成ZOOBIN=`readlink -f "${BASH_SOURCE-$0}"`
       修改bin/zkCli.sh腳本:
       將ZOOBIN="${BASH_SOURCE-$0}"修改成ZOOBIN=`readlink -f "${BASH_SOURCE-$0}"`
       啓動:到bin目錄,./zkServer.sh start
  4. 安裝配置manager
    先安裝manager
    圖片描述
    再安裝ottermanager的數據庫
    圖片描述
    這裏可能會有權限問題,grant一下權限就ok
    修改配置文件otter.properties
    圖片描述
    啓動:到bin目錄 ./startup.sh
    日誌能夠去/tmp/manager/logs/manager.log查看
    啓動成功後,打開http://192.168.0.212:8080/,便可訪問到
    圖片描述
  5. 安裝配置aria2,保證須要同步的數據經過極快的速度同步到須要同步的服務器上。
    安裝,windows上安裝須要配置環境變量。這個也是個神器哦
    圖片描述
  6. 安裝配置node節點,node主要負責接受manage下發任務的處理
    圖片描述
    注意:這裏配置完後,需到manager管理頁面進行配置node信息,而後再來開啓node創建鏈接!

5、otter配置單向同步

概念步驟:先開啓mysql——>開啓zookeeper——>開啓manager——>配置node——>啓動node——>後續
機器/數據庫實例(mysql5.6):192.168.0.212(master),192.168.5.223(slave)
這裏須要改一下配置文件,my.inf(linux,在etc/my.inf),my.ini(windows)git

log_bin = mysql-bin    #打開日誌
binlog_format = ROW  #設置row模式的日誌格式
server-id = 2 #id不能重複

我在212上安裝了mysql,zookeeper,manager,aria2,node。場景是這樣的,212做爲管理後臺的服務器,在上面的數據庫有otter_manager的數據庫,和管理後臺的數據庫,223做爲接口服務器,數據庫有升級接口數據庫。此時管理後臺每加數據須要同步到接口這來。github

打開manager的web頁面,登陸在右上角,默認用戶名密碼都是admin
  1. 添加zookeeper
    圖片描述
  2. 添加node
    圖片描述
    看序號,序號爲2,則去conf下執行echo 2 > nid,對應且惟一。還有修改配置文件otter.properties,otter.manager.address = 192.168.0.212:1099,確認manager的地址。好了,接下來能夠去啓動node,若一直都是未啓動狀態能夠查閱/tmp/node/logs中的日誌
  3. 給兩臺數據庫實例建兩個結構格式同樣的數據庫
  4. 數據源配置——添加數據源
    從庫
    圖片描述
    主庫
    圖片描述
    添加完後
    圖片描述
  5. 數據表配置——添加數據表
    須要同步到的表
    圖片描述
    須要同步的表圖片描述
    添加後
    圖片描述
  6. 配置同步規則——canel配置
    圖片描述
  7. 同步管理——添加channel——添加Pipeline——源和目標表的配置
    圖片描述
    保存後點擊channel1進去添加Pipeline
    圖片描述
    添加後點擊Pipeline進去配置源和目標表
    圖片描述
  8. 啓用channel
    圖片描述
  9. 測試單向同步完美成功。如若失敗,請去監控管理——日誌記錄查看日誌。

6、otter配置單向同步

概念步驟:先開啓mysql——>開啓zookeeper——>開啓manager——>配置node——>啓動node——>後續
機器:192.168.0.212(master),192.168.5.223(slave)
說明:我在212上安裝了mysql,zookeeper,manager,aria2,node,在223上安裝了aria2,node,雙向同步,須要配置n個node,由於manager是下派任務給node去執行的。場景是這樣的,212做爲管理後臺的服務器,在上面的數據庫有otter_manager的數據庫,和管理後臺的數據庫,223做爲接口服務器,數據庫有升級接口數據庫。此時管理後臺每加數據須要同步到接口這來。web

  1. 添加zookeeper,同上
  2. 添加兩個node,對應兩臺數據庫
    圖片描述
    分別去node安裝路徑的conf下執行echo 1 > nid,echo 2 > nid,對應且惟一。而且otter.properties的otter.manager.address = 192.168.0.212:1099要對應安裝manager的地址。接着啓動
    圖片描述
  3. 給兩臺數據庫實例建兩個結構格式同樣的數據庫,ottmanage(主庫),ottupdate(從庫)
  4. 數據源配置配置——添加數據源
    圖片描述
  5. 數據表配置——添加數據表
    圖片描述
    圖片描述
  6. 配置同步規則——canel配置(兩個,每個對應一個數據庫信息,從配置的數據庫中,拉取bin-log信息)
    圖片描述
  7. 同步管理——添加channel
  8. 點擊添加好的channel,添加Pipeline
    圖片描述
    圖片描述
    注意:第二個這裏要點擊高級設置,取消ddl支持,由於雙向同步中,一個channel只容許有一個ddl,即只容許有一個主站。
  9. 點擊Pipeline1,添加主庫要往從庫同步的數據源映射關係配置
  10. 點擊Pipeline2,添加從庫要往主庫同步的數據源映射關係配置
  11. 因爲是雙向同步,因此還須要點擊使用文檔-》數據庫初始化頁面,在雙機房的數據庫同時執行初始化SQL。
  12. 啓動,和可能遇到的問題,通常日誌記錄那隻會記錄異常記錄。
    圖片描述
    圖片描述
相關文章
相關標籤/搜索