otter數據同步

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管理」頁面:

          點擊添加進入添加機器頁面

 

  •     機器名稱:能夠隨意定義,方便本身記憶便可
  •     機器ip:對應node節點將要部署的機器ip,若是有多ip時,可選擇其中一個ip進行暴露. (此ip是整個集羣通信的入口,實際狀況千萬別使用127.0.0.1,不然多個機器的node節點會沒法識別)
  •     機器端口:對應node節點將要部署時啓動的數據通信端口,建議值:2088
  •     下載端口:對應node節點將要部署時啓動的數據下載端口,建議值:9090
  •     外部ip :對應node節點將要部署的機器ip,存在的一個外部ip,容許通信的時候走公網處理。
  •     zookeeper集羣:爲提高通信效率,不一樣機房的機器可選擇就近的zookeeper集羣.
  •     node這種設計,是爲解決單機部署多實例而設計的,容許單機多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示例說明     

  • 單表配置:alibaba.product
  • 分表配置:alibaba[1-64].product , alibaba.product[01-32]
  • 正則配置:(.*).(.*)
  • schema name和table name都設置成.*表示全庫同步

 

   4.  添加一個channel

        以下圖,點擊添加按鈕進入添加channel頁面,輸入Channel Name後保存,則成功添加一個channel;

   5.  配置一個pipeline

        添加channel成功後,點擊Channel名字,進入Pipeline管理頁面,添加一個pipeline;

        進入添加pipeline頁面

        如上圖填好所需信息,勾選高級設置,能夠選是否過濾ddl同步等選項,點擊保存,成功後會返回Pipeline管理頁面。

   6.  添加映射關係

        添加pipeline成功後,點擊Pipeline名字

         進入映射關係列表頁面,點擊添加

         進入添加映射關係頁面

       點擊保存返回映射關係列表頁面,若是源數據表是隻同步一個表能夠點擊下一步,選擇須要同步的字段映射關係;

   7.  啓用同步

      以上配置,一個簡單的同步任務就完成了,返回Channel管理頁面

點擊「啓用」,運行狀態就變爲「運行」;

   如今能夠新增一個表,插入記錄,查看數據是否同步過去了。

  點擊Channel名字,進入Pineline管理頁面,可點擊「監控」查看同步狀態

相關文章
相關標籤/搜索