資料同步——otter
阿新 • • 發佈:2018-12-29
一、背景
本人是一名應屆畢業生,,還在努力挖坑。最近兩個月被外派到其他公司做一個升級系統,做到現在一個多月。學到的東西很多,想總結的東西也很多,可是。。。時間是讓人猝不及防的東西。好吧,現在先來總結otter資料同步。升級系統需要做到內網資料庫(主)和外網的n個數據庫(從)進行資料同步,考慮的方案有:
- 直接在專案配置n個從資料庫加1個主庫,但是碼程式碼太麻煩了,有工具多好使。
- 用percona-tookit
下載連結:https://www.percona.com/downl…,
github demo:https://github.com/mrjgreen/d…(表示還沒看。。) - 用otter(分散式資料庫同步系統),純java編寫,支援windows,linux。阿里開源專案,資料同步的解決方案。連結:
密碼:r5cp,github:https://github.com/alibaba/otter
二、Otter是什麼?
Ottter是由阿里巴巴開源的一個數據同步產品,它的最初的目的是為了解決跨國異地機房雙A架構,兩邊可寫的場景,開發時間從2011年7月份一直持續到現在,目前阿里巴巴B2B內部的本地/異地機房的同步需求基本全上了Otter。Otter基於資料庫增量日誌解析,支援mysql/oracle資料庫進行同步,在最新的v4.2.13已經支援mysql5.7以及阿里雲提供的RDS資料庫(使用RDS童鞋的福音)。
Otter工作原理:
- 基於Canal開源產品,獲取資料庫增量日誌資料。 什麼是Canal,
請點選 - 典型管理系統架構,manager(web管理)+node(工作節點)
manager執行時推送同步配置到node節點
node節點將同步狀態反饋到manager上 - 基於zookeeper,解決分散式狀態排程的,允許多node節點之間協同工作.(otter node依賴於zookeeper進行分散式排程,需要安裝一個zookeeper節點或者叢集)
- db : 資料來源以及需要同步到的庫
- Canal : 使用者獲取資料庫增量日誌,目前主要支援mysql
- manager : 配置同步規則設定資料來源同步源等
- zookeeper : 協調node進行協調工作
- node : 負責任務處理處理接受到的部分同步工作
三、Canel是什麼?
阿里的開源專案。mysql資料庫binlog的增量訂閱&消費元件基於日誌增量訂閱&消費支援的業務:資料庫映象、資料庫實時備份、級索引 (賣家和買家各自分庫索引)、search build、業務cache重新整理、價格變化等重要業務訊息。github:https://github.com/alibaba/canal
首先來看mysql主備複製的原理:
再看canel的原理:
原理相對比較簡單:
模擬mysql slave的互動協議,偽裝自己為mysql slave,向mysql master傳送dump協議 mysql master收到dump請求,開始推送binary log給slave(也就是canal) canal解析binary log物件(原始為byte流).
四、otter環境搭建(所需檔案已在上方下載連結)
先看看安裝後的目錄
- 安裝好mysql
- 安裝好jdk,配置環境變數,zookeeper和Otter-manager都需要依賴java
- 安裝配置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
- 安裝配置manager
先安裝manager
再安裝ottermanager的資料庫
這裡可能會有許可權問題,grant一下許可權就ok
修改配置檔案otter.properties
啟動:到bin目錄 ./startup.sh
日誌可以去/tmp/manager/logs/manager.log檢視
啟動成功後,開啟http://192.168.0.212:8080/,即可訪問到 - 安裝配置aria2,保證需要同步的資料通過極快的速度同步到需要同步的伺服器上。
安裝,windows上安裝需要配置環境變數。這個也是個神器哦 - 安裝配置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作為介面伺服器,資料庫有升級介面資料庫。此時管理後臺每加資料需要同步到介面這來。
開啟manager的web頁面,登入在右上角,預設使用者名稱密碼都是admin
- 新增zookeeper
- 新增node
看序號,序號為2,則去conf下執行echo 2 > nid,對應且唯一。還有修改配置檔案otter.properties,otter.manager.address = 192.168.0.212:1099,確認manager的地址。好了,接下來可以去啟動node,若一直都是未啟動狀態可以查閱/tmp/node/logs中的日誌 - 給兩臺資料庫例項建兩個結構格式一樣的資料庫
- 資料來源配置——新增資料來源
從庫
主庫
新增完後 - 資料表配置——新增資料表
需要同步到的表
需要同步的表
新增後 - 配置同步規則——canel配置
- 同步管理——新增channel——新增Pipeline——源和目標表的配置
儲存後點擊channel1進去新增Pipeline
新增後點擊Pipeline進去配置源和目標表 - 啟用channel
- 測試單向同步完美成功。如若失敗,請去監控管理——日誌記錄檢視日誌。
六、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作為介面伺服器,資料庫有升級介面資料庫。此時管理後臺每加資料需要同步到介面這來。
- 新增zookeeper,同上
- 新增兩個node,對應兩臺資料庫
分別去node安裝路徑的conf下執行echo 1 > nid,echo 2 > nid,對應且唯一。並且otter.properties的otter.manager.address = 192.168.0.212:1099要對應安裝manager的地址。接著啟動 - 給兩臺資料庫例項建兩個結構格式一樣的資料庫,ottmanage(主庫),ottupdate(從庫)
- 資料來源配置配置——新增資料來源
- 資料表配置——新增資料表
- 配置同步規則——canel配置(兩個,每一個對應一個數據庫資訊,從配置的資料庫中,拉取bin-log資訊)
- 同步管理——新增channel
- 點選新增好的channel,新增Pipeline
注意:第二個這裡要點選高階設定,取消ddl支援,因為雙向同步中,一個channel只允許有一個ddl,即只允許有一個主站。 - 點選Pipeline1,新增主庫要往從庫同步的資料來源對映關係配置
- 點選Pipeline2,新增從庫要往主庫同步的資料來源對映關係配置
- 由於是雙向同步,所以還需要點選使用文件-》資料庫初始化頁面,在雙機房的資料庫同時執行初始化SQL。
- 啟動,和可能遇到的問題,一般日誌記錄那隻會記錄異常記錄。