mysql同步之otter/canal環境搭建完整詳細版


            mysql同步之otter/canal環境搭建完整詳細版

 

一、Otter目前支持了什么

        1. 單向同步, mysql/oracle互相同步

        2. 雙向同步,無沖突變更

        3. 文件同步,本地/aranda文件

        4. 雙A同步,沖突檢測&沖突補救

        5. 數據遷移,中間表/行記錄同步

        導歷史表還需要程序代碼實現嗎? 還在用mysql的主從復制嗎? Otter都能為你解決。

        典型的場景是賬戶信息表和賬戶交易明細表,更新賬戶余額后需要登記一條賬戶明細,並且保證在一個事務里,用戶可以通過交易明細表查看交易記錄,但是交易明細表的數據量是逐步遞增的,用戶量多的系統,幾個月下來的數據超過千萬了,表數據量一多就導致查詢和插入變慢,而一開始就對賬戶明細做分表處理就難於保證強一致性事務,通過otter可以將記錄同步導歷史表,並且進行分表處理,用戶往年的交易記錄就可以查詢歷史表了,而原交易明細表就可以刪除一個月甚至幾天前的數據;

        實際測試中,otter的同步速度相比於mysql的復制,約有5倍左右的性能提升,這取決於其同步算法的實現. 拋棄了強一致性,得到了性能提升。 

二、官方安裝文檔

        https://github.com/alibaba/otter/wiki/Manager_Quickstart

        https://github.com/alibaba/otter/wiki/Node_Quickstart

        演示視頻:http://video.tudou.com/v/XMTc4NjU1MjM4NA==.html

三、整體架構

     原理描述:

           基於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;

四、環境准備

        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+

 

 

五、下載安裝

otter安裝前需要Aria2支持,安裝步驟請參考https://www.cnblogs.com/zzpblogs/p/12895908.html

 

1.mysql

# 開啟binlog log-bin=mysql-bin # 設置模式為ROW binlog-format=ROW # 設置默認字符集 init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake 
# 驗證 mysql> show variables like '%binlog_format%'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | binlog_format | ROW | +---------------+-------+

CREATE USER canal IDENTIFIED BY 'canal';

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';

FLUSH PRIVILEGES;

2.安裝aria2

        下載頁面: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 

六、修改配置文件運行

(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

七、配置一個同步任務

     搭建一個數據庫同步任務,源數據庫必須開啟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管理頁面,可點擊“監控”查看同步狀態

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM