otter雙向同步配置

使用otter實現MySQL跨機房雙向同步

  • 本文檔基於已經搭建單向同步的基礎進行雙向同步功能擴展
  • 如果需要進行單向同步搭建,請參考上一篇文檔(《otter單向同步配置》)
  • 保證所有node運行機器已經安裝aria2

 

 在要進行雙向同步的數據庫執行以下語句 (記得修改密碼)(主從庫都要執行)


/* 供 otter 使用, otter 需要對 retl.* 的讀寫權限,以及對業務表的讀寫權限*/

/* 1. 創建database retl */
    CREATE DATABASE retl;

/* 2. 用戶授權 給同步用戶授權 */
    <! CREATE USER retl@'%' IDENTIFIED BY 'retl';
    GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO `retl`@'%';
    GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `retl`.* TO `retl`@'%'; >

/* 業務表授權,這裏可以限定只授權同步業務的表 */
    <! GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO `retl`@'%';   >

/* 3. 創建系統表 */
    <! USE retl; >
    USE otter;
    DROP TABLE IF EXISTS retl.retl_buffer;
    DROP TABLE IF EXISTS retl.retl_mark;
    DROP TABLE IF EXISTS retl.xdual;

    CREATE TABLE retl_buffer
    (
     ID BIGINT(20) AUTO_INCREMENT,
     TABLE_ID INT(11) NOT NULL,
     FULL_NAME varchar(512),
     TYPE CHAR(1) NOT NULL,
     PK_DATA VARCHAR(256) NOT NULL,
     GMT_CREATE TIMESTAMP NOT NULL,
     GMT_MODIFIED TIMESTAMP NOT NULL,
     CONSTRAINT RETL_BUFFER_ID PRIMARY KEY (ID)
    )  ENGINE=InnoDB DEFAULT CHARSET=utf8;

    CREATE TABLE retl_mark
    (
     ID BIGINT AUTO_INCREMENT,
     CHANNEL_ID INT(11),
     CHANNEL_INFO varchar(128),
     CONSTRAINT RETL_MARK_ID PRIMARY KEY (ID)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

    CREATE TABLE xdual (
      ID BIGINT(20) NOT NULL AUTO_INCREMENT,
      X timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (ID)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

/* 4. 插入初始化數據 */
    INSERT INTO retl.xdual(id, x) VALUES (1,now()) ON DUPLICATE KEY UPDATE x = now();

 數據庫配置(主從庫都要修改,請保證server-id不相同)

  • 在需要雙向同的數據庫開啓binlog,並設置爲row模式
  • my.cnf (/etc/mysql/my.cnf) 的 [mysqld] 節點下啓用binlog
# 開啓binlog
log-bin=mysql-bin
# 設置row模式
binlog-format=ROW
character_set_server=utf8
# 雙向同步保證id不相同,避免無法辨別數據庫而回環
server-id=1
# 允許外部訪問
# bind-address = 0.0.0.0

 otter賬號授權
授權需要雙向授權 (主庫)
 

# 如果有多個機器ip請全部授權

# 授予主從複製權限
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO otter@’%’;
# 授予retl 庫操作權限
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `retl`.* TO otter@'ip';
# 授予操作庫增刪查改,alter,index權限 用於更新數據庫記錄
GRANT update, insert, delete, update, alter, indexON mytest.person_info TO otter@'ip';
flush PRIVILEGES;

授權需要雙向授權 (從庫)
 

# 如果有多個機器ip請全部授權

# 授予主從複製權限
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO otter@’%’;
# 授予retl 庫操作權限
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `retl`.* TO otter@'ip';
# 授予操作庫增刪查改,alter,index權限 用於更新數據庫記錄
GRANT update, insert, delete, update, alter, indexON mytest.person_info TO otter@'ip';
flush PRIVILEGES;

 

 配置數據源

  • 儘量使用專用賬號,避免重複配置數據源
  • 同一個數據源的表只需要配置一次
  • 點擊驗證,如果報字符類型不一致問題,可忽略

開始添加數據源

配置數據源


數據源列表

 配置表

  • schema name 配置數據庫名(支持正則.* 匹配整個實例下所有數據庫)
  • table name配置表名,支持正則配置
  •  如: .* 匹配全庫
  •  (yibai_product_map|yibai_product) 最外層一定要加括號,否則無法同步"|"後面的部分,
  •  保證 Find schema and tables: 有你需要同步的所有表

 

開始添加數據表


配置數據表

 

 配置canal

  • canal用於取binlog,
  • canal名字保存後不能修改,儘量做到見名知意
  • 此處賬號要有 主從複製權限
  • 數據庫地址爲同步源庫數據庫地址

添加canal

配置canal

canal列表 雙向需要配置兩個canal 分別負責讀取不同庫的binlog

 

支持主備切換

主備切換配置

 

配置Channel

開始添加Channel

開始配置Channel

  •  雙向同步需要開啓數據一致性算法 

 配置Pipeline

進入pipeline(點擊channel名稱)

添加pipeline

                      

配置pipeline(主庫)

  •  配置一個單相同步的通道
  •  選擇node, 此處選擇多個是用於分擔壓力和保證高可用
  •  也可以選擇單個
  •  選擇主站點,同步會以主站點數據爲準
  •  選擇對應的源庫canal
  •  消費批次支持修改



pipeline高級配置(主庫)

  •  主庫要支持ddl


pipeline配置從(從庫)

  •  與主庫唯一的不同在於 主站點選擇否

pipeline高級配置(從庫)

  •  從庫要取消ddl的支持
  •  跳過ddl異常

 配置映射關係

- 點擊Pipeline進入映射配置

- 映射關係配置1

  •  選擇源庫和目標庫
  •  權重越大越晚執行,用於業務關聯表配置
  •  點擊下一步

- 映射關係配置2

  •  如果是單表可以看到對應的字段
  •  將需要同步的字段對應拉入到下面對應框中,支持不同字段名稱的同步
  •  如果配置了多個表則無法看到字段,直接點擊下一步即可


- 映射配置3

- 映射配置4

  •  此處用於配置組合字段
  •  如果需要變更某個字段後相關字段也要跟着更新,可以配置組合字段
  •  全字段的組合,與Channel中的行模式一致
  •  點擊保存即可


- 配置多個映射

  •     字段映射支持配置多個表
  •     需要表源庫是相同的數據庫實例
  •     雙向同步需要相同的主庫,

 

- 到此處配置完成

channel啓動
 - 點擊啓動

- 啓動後檢查是否異常  日誌查看

  •  日誌只記錄異常,根據時間和channel名稱可以確認你新開啓的同步任務是否異常
  •  如果發生異常,點擊日誌內容,即可看到異常內容

- 監控查看

  •  此處可以看到同步延時等信息
  •  採集一般60s 採集一次,
  •  如果數據庫日誌沒有變更不會採集
  •  如果channel掛起也不會進行採集
  •  內存不足/數據庫壓力較大 可能會部分channel不進行採集
  •  如果發現爲進行日誌採集請及時確認原因

 

- pipeling監控

 點擊監控可以看到各個監控指標 

- 監控指標

- 同步進度

  •  如果同步異常,重新導入表做同步,或者需要變更同步起始位點
  •  先關閉同步任務
  •  刪除此處position 位點狀態
  •  刪除後在canal 中配置新的位點,啓動同步任務即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章