otter双向同步配置

使用otter实现MySQL跨机房双向同步

  • 本文档基于已经搭建单向同步的基础进行双向同步功能扩展
  • 如果需要进行单向同步搭建,请参考上一篇文档(《otter单向同步配置》)
  • 保证所有node运行机器已经安装aria2

 

 在要进行双向同步的数据库执行以下语句 (记得修改密码)(主从库都要执行)


/* 供 otter 使用, otter 需要对 retl.* 的读写权限,以及对业务表的读写权限*/

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

/* 2. 用户授权 给同步用户授权 */
    

/* 业务表授权,这里可以限定只授权同步业务的表 */
    

/* 3. 创建系统表 */
    
    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;

 

 配置数据源

  • 尽量使用专用账号,避免重复配置数据源
  • 同一个数据源的表只需要配置一次
  • 点击验证,如果报字符类型不一致问题,可忽略

开始添加数据源

otter双向同步配置_第1张图片

配置数据源

otter双向同步配置_第2张图片
数据源列表

otter双向同步配置_第3张图片

 配置表

  • schema name 配置数据库名(支持正则.* 匹配整个实例下所有数据库)
  • table name配置表名,支持正则配置
  •  如: .* 匹配全库
  •  (yibai_product_map|yibai_product) 最外层一定要加括号,否则无法同步"|"后面的部分,
  •  保证 Find schema and tables: 有你需要同步的所有表

 

开始添加数据表

otter双向同步配置_第4张图片
配置数据表

otter双向同步配置_第5张图片

 

 配置canal

  • canal用于取binlog,
  • canal名字保存后不能修改,尽量做到见名知意
  • 此处账号要有 主从复制权限
  • 数据库地址为同步源库数据库地址

添加canal

otter双向同步配置_第6张图片

配置canal

otter双向同步配置_第7张图片

canal列表 双向需要配置两个canal 分别负责读取不同库的binlog

otter双向同步配置_第8张图片

 

支持主备切换

主备切换配置

otter双向同步配置_第9张图片

 

配置Channel

开始添加Channel

otter双向同步配置_第10张图片

开始配置Channel

  •  双向同步需要开启数据一致性算法 

otter双向同步配置_第11张图片

 配置Pipeline

进入pipeline(点击channel名称)

otter双向同步配置_第12张图片

添加pipeline

           otter双向同步配置_第13张图片           

配置pipeline(主库)

  •  配置一个单相同步的通道
  •  选择node, 此处选择多个是用于分担压力和保证高可用
  •  也可以选择单个
  •  选择主站点,同步会以主站点数据为准
  •  选择对应的源库canal
  •  消费批次支持修改


otter双向同步配置_第14张图片
pipeline高级配置(主库)

  •  主库要支持ddl


otter双向同步配置_第15张图片

pipeline配置从(从库)

  •  与主库唯一的不同在于 主站点选择否

otter双向同步配置_第16张图片

pipeline高级配置(从库)

  •  从库要取消ddl的支持
  •  跳过ddl异常

otter双向同步配置_第17张图片

 配置映射关系

- 点击Pipeline进入映射配置

- 映射关系配置1

  •  选择源库和目标库
  •  权重越大越晚执行,用于业务关联表配置
  •  点击下一步

otter双向同步配置_第18张图片

- 映射关系配置2

  •  如果是单表可以看到对应的字段
  •  将需要同步的字段对应拉入到下面对应框中,支持不同字段名称的同步
  •  如果配置了多个表则无法看到字段,直接点击下一步即可


otter双向同步配置_第19张图片

- 映射配置3

otter双向同步配置_第20张图片

- 映射配置4

  •  此处用于配置组合字段
  •  如果需要变更某个字段后相关字段也要跟着更新,可以配置组合字段
  •  全字段的组合,与Channel中的行模式一致
  •  点击保存即可


otter双向同步配置_第21张图片

- 配置多个映射

  •     字段映射支持配置多个表
  •     需要表源库是相同的数据库实例
  •     双向同步需要相同的主库,

otter双向同步配置_第22张图片

 

- 到此处配置完成

channel启动
 - 点击启动

otter双向同步配置_第23张图片

- 启动后检查是否异常  日志查看

  •  日志只记录异常,根据时间和channel名称可以确认你新开启的同步任务是否异常
  •  如果发生异常,点击日志内容,即可看到异常内容

otter双向同步配置_第24张图片

- 监控查看

  •  此处可以看到同步延时等信息
  •  采集一般60s 采集一次,
  •  如果数据库日志没有变更不会采集
  •  如果channel挂起也不会进行采集
  •  内存不足/数据库压力较大 可能会部分channel不进行采集
  •  如果发现为进行日志采集请及时确认原因

otter双向同步配置_第25张图片

 

- pipeling监控

 点击监控可以看到各个监控指标 

otter双向同步配置_第26张图片

- 监控指标

otter双向同步配置_第27张图片

- 同步进度

  •  如果同步异常,重新导入表做同步,或者需要变更同步起始位点
  •  先关闭同步任务
  •  删除此处position 位点状态
  •  删除后在canal 中配置新的位点,启动同步任务即可

otter双向同步配置_第28张图片

你可能感兴趣的:(otter)