1. 程式人生 > >資料同步——otter

資料同步——otter

一、背景

本人是一名應屆畢業生,,還在努力挖坑。最近兩個月被外派到其他公司做一個升級系統,做到現在一個多月。學到的東西很多,想總結的東西也很多,可是。。。時間是讓人猝不及防的東西。好吧,現在先來總結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

二、Otter是什麼?

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

Otter工作原理:

  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 : 負責任務處理處理接受到的部分同步工作

三、Canel是什麼?

阿里的開源專案。mysql資料庫binlog的增量訂閱&消費元件基於日誌增量訂閱&消費支援的業務:資料庫映象、資料庫實時備份、級索引 (賣家和買家各自分庫索引)、search build、業務cache重新整理、價格變化等重要業務訊息。githubhttps://github.com/alibaba/canal

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

再看canel的原理:

圖片描述

原理相對比較簡單:
模擬mysql slave的互動協議,偽裝自己為mysql slave,向mysql master傳送dump協議 mysql master收到dump請求,開始推送binary logslave(也就是canal) canal解析binary log物件(原始為byte流).

四、otter環境搭建(所需檔案已在上方下載連結)

先看看安裝後的目錄

目錄

  1. 安裝好mysql
  2. 安裝好jdk,配置環境變數,zookeeper和Otter-manager都需要依賴java
  3. 安裝配置zookeeper,這裡配置的是單機模式,它還有叢集模式,可以看
    http://blog.csdn.net/mark_lq/…http://blog.csdn.net/kongxx/a…
    圖片描述

     

       修改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建立連線!

五、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)

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

我在212上安裝了mysql,zookeeper,manager,aria2,node。場景是這樣的,212作為管理後臺的伺服器,在上面的資料庫有otter_manager的資料庫,和管理後臺的資料庫,223作為介面伺服器,資料庫有升級介面資料庫。此時管理後臺每加資料需要同步到介面這來。

開啟managerweb頁面,登入在右上角,預設使用者名稱密碼都是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. 測試單向同步完美成功。如若失敗,請去監控管理——日誌記錄檢視日誌。

六、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作為介面伺服器,資料庫有升級介面資料庫。此時管理後臺每加資料需要同步到介面這來。

    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. 啟動,和可能遇到的問題,一般日誌記錄那隻會記錄異常記錄。
      圖片描述
      圖片描述