Skip to content

Manager配置介绍

He Wang edited this page Mar 31, 2022 · 8 revisions

通道配置说明

多种同步方式配置

a. 单向同步

单向同步为最基本的同步方式,目前支持mysql -> mysql/oracle的同步.

基本配置方式就如操作视频中所演示的,操作步骤:

  1. 配置一个channel
  2. 配置一个pipeline
    对应node机器选择时,建议遵循:S/E节点选择node需尽可能离源数据库近,T/L节点选择node则离目标数据库近. 如果无法提供双节点,则选择离目标数据库近的node节点相对合适.
  3. 配置一个canal
  4. 定义映射关系.
    canal中配置解析的数据库ip需要和映射关系中源表对应的数据库ip一致. ps. 映射关系进行匹配的时候是基于表名,虽然数据库ip不匹配也会是有效.

b. 双向同步

双向同步可以理解为两个单向同步的组合,但需要额外处理避免回环同步. 回环同步算法: Otter双向回环控制 .

同时,因为双向回环控制算法会依赖一些系统表,需要在需要做双向同步的数据库上初始化所需的系统表.

获取初始sql:

wget https://raw.github.com/alibaba/otter/master/node/deployer/src/main/resources/sql/otter-system-ddl-mysql.sql

配置上相比于单向同步有一些不同,操作步骤:

  1. 配置一个channel
  2. 配置两个pipeline
    注意:两个单向的canal和映射配置,在一个channel下配置为两个pipeline. 如果是两个channel,每个channel一个pipeline,将不会使用双向回环控制算法,也就是会有重复回环同步.
  3. 每个pipeline各自配置canal,定义映射关系

c. 双A同步

双A同步相比于双向同步,主要区别是双A机房会在两地修改同一条记录,而双向同步只是两地的数据做互相同步,两地修改的数据内容无交集.

所以双A同步需要额外处理数据同步一致性问题. 同步一致性算法:Otter数据一致性 ,目前开源版本主要是提供了单向回环补救的一致性方案.

双A同步相比于双向同步,整个配置主要是一些参数上有变化,具体步骤:

  1. 配置一个channel

  2. 配置两个pipeline
  3. * 注意:除了需要定义一个主站点外,需要在高级设置中将一个pipeline的“支持DDL”设置为false,另一个设置为true,否则将提示“一个channel中只允许开启单向ddl同步!”错误
  4. 每个pipeline各自配置canal,定义映射关系

d. 级联同步

单向同步/双向同步,都是针对一个channel下的多pipeline配置进行控制,是否可以使用多个channel完成类似级联同步的功能.

几种级联同步.

  • A->B->C ,A单向同步到B,B再单向同步到C
  • A<->B->C,A和B组成一个双向,B再单向同步到C
  • A<->B<-C,A和B组成一个双向,C将数据单向同步B,也就是B是一个接受多M同步写入的的节点,目前mysql不支持
  • A<->B->C,B-/->D,A和B组成一个双向,B再单向同步到C,但A同步到B的数据不同步到D,但B地写入的数据同步到D,目前mysql不支持.

对应操作步骤:

  1. 目前channel之间的级联同步,不需要设置任何参数,只要通过canal进行binlog解析即可.
  2. 针对级联屏蔽同步,需要利用到自定义同步标记的功能,比如A->B,B同步到C但不同步到D。需要在A->B的同步高级参数里定义NOT_DDD,然后在B同步到D的高级参数里也定义NOT_DDD.
    原理:这样在B解析到A->B写入的同步标记为NOT_DDD,与当前同步定义的NOT_DDD进行匹配,就会忽略此同步.


e. 多A同步

基于以上的单向/双向/双A/级联同步,可以随意搭建出多A同步,不过目前受限于同步数据的一致性算法,只能通过星形辐射,通过级联同步的方式保证全局多A机房的数据一致性.
比如图中B和C之前的一致性同步,需要通过主站点A来保证.


自定义数据同步(自 由 门)

主要功能是在不修改原始表数据的前提下,触发一下数据表中的数据同步。

可用于:

  • 同步数据订正
  • 全量数据同步. (自 由 门触发全量,同时otter增量同步,需要配置为行记录模式,避免update时因目标库不存在记录而丢失update操作)

主要原理:

a. 基于otter系统表retl_buffer,插入特定的数据,包含需要同步的表名,pk信息。

b. otter系统感知后会根据表名和pk提取对应的数据(整行记录),和正常的增量同步一起同步到目标库。

目前otter系统感知的自 由 门数据方式为:

  • 日志记录. (插入表数据的每次变更,需要开启binlog,otter获取binlog数据,提取同步的表名,pk信息,然后回表查询整行记录)

retl_buffer表结构:

  CREATE TABLE retl_buffer 
   (    
    ID BIGINT AUTO_INCREMENT,   ## 无意义,自增即可
    TABLE_ID INT(11) NOT NULL,   ## tableId, 可通过该链接查询:http://otter.alibaba-inc.com/data_media_list.htm,即序号这一列,如果配置的是正则,需要指定full_name,当前table_id设置为0. 
    FULL_NAME varchar(512),  ## schemaName + '.' +  tableName  (如果明确指定了table_id,可以不用指定full_name)
    TYPE CHAR(1) NOT NULL,   ## I/U/D ,分别对应于insert/update/delete
    PK_DATA VARCHAR(256) NOT NULL, ## 多个pk之间使用char(1)进行分隔
    GMT_CREATE TIMESTAMP NOT NULL, ## 无意义,系统时间即可
    GMT_MODIFIED TIMESTAMP NOT NULL,  ## 无意义,系统时间即可
    CONSTRAINT RETL_BUFFER_ID PRIMARY KEY (ID) 
   )  ENGINE=InnoDB DEFAULT CHARSET=utf8;

全量同步操作示例:

insert into retl.retl_buffer(ID,TABLE_ID, FULL_NAME,TYPE,PK_DATA,GMT_CREATE,GMT_MODIFIED) (select null,0,'$schema.table$','I',id,now(),now() from $schema.table$); 
如果针对多主键时,对应的PK_DATA需要将需要同步表几个主键按照(char)1进行拼接,比如 concat(id,char(1),name)

具体参数详解

channel参数

  1. 同步一致性. ==> 基于数据库反查(根据binlog反查数据库),基于当前变更(binlog数据)。针对数据库反查,在延迟比较大时比较有效,可将最新的版本快速同步到目标,但会对源库有压力.
  2. 同步模式. ==> 行模式,列模式。行模式特点:如果目标库不存在记录时,执行插入。列模式主要是变更哪个字段,只会单独修改该字段,在双A同步时,为减少数据冲突,建议选择列模式。
  3. 是否开启数据一致性. ==> 请查看数据一致性文档:Otter数据一致性
    a. 数据一致性算法
    b. 一致性反查数据库延迟阀值

pipeline参数

  1. 并行度. ==> 查看文档:Otter调度模型,主要是并行化调度参数.(滑动窗口大小)
  2. 数据反查线程数. ==> 如果选择了同步一致性为反查数据库,在反查数据库时的并发线程数大小
  3. 数据载入线程数. ==> 在目标库执行并行载入算法时并发线程数大小
  4. 文件载入线程数. ==> 数据带文件同步时处理的并发线程数大小
  5. 主站点. ==> 双A同步中的主站点设置 
  6. 消费批次大小. ==> 获取canal数据的batchSize参数
  7. 获取批次超时时间. ==> 获取canal数据的timeout参数
pipeline 高级设置
  • 使用batch. ==> 是否使用jdbc batch提升效率,部分分布式数据库系统不一定支持batch协议
  • 跳过load异常. ==> 比如同步时出现目标库主键冲突,开启该参数后,可跳过数据库执行异常
  • 仲裁器调度模式. ==> 查看文档:Otter调度模型
  • 负载均衡算法. ==> 查看文档:Otter调度模型
  • 传输模式. ==> 多个node节点之间的传输方式,RPC或HTTP. HTTP主要就是使用aria2c,如果测试环境不装aria2c,可强制选择为RPC
  • 记录selector日志. ==> 是否记录简单的canal抓取binlog的情况
  • 记录selector详细日志. ==> 是否记录canal抓取binlog的数据详细内容
  • 记录load日志. ==> 是否记录otter同步数据详细内容
  • dryRun模式. ==> 只记录load日志,不执行真实同步到数据库的操作
  • 支持ddl同步. ==> 是否同步ddl语句
  • 是否跳过ddl异常. ==> 同步ddl出错时,是否自动跳过
  • 文件重复同步对比 ==> 数据带文件同步时,是否需要对比源和目标库的文件信息,如果文件无变化,则不同步,减少网络传输量.
  • 文件传输加密 ==> 基于HTTP协议传输时,对应文件数据是否需要做加密处理
  • 启用公网同步 ==> 每个node节点都会定义一个外部ip信息,如果启用公网同步,同步时数据传递会依赖外部ip.
  • 跳过自 由 门数据 ==> 自定义数据同步的内容
  • 跳过反查无记录数据 ==> 反查记录不存在时,是否需要进行忽略处理,不建议开启.
  • 启用数据表类型转化 ==> 源库和目标库的字段类型不匹配时,开启改功能,可自动进行字段类型转化
  • 兼容字段新增同步 ==> 同步过程中,源库新增了一个字段(必须无默认值),而目标库还未增加,是否需要兼容处理
  • 自定义同步标记 ==> 级联同步中屏蔽同步的功能.

Canal参数

  1. 数据源信息
    单库配置: 10.20.144.34:3306;
    多库合并配置: 10.20.144.34:3306,10.20.144.35:3306; (逗号分隔)
    主备库配置:10.20.144.34:3306;10.20.144.34:3307; (分号分隔)
  2. 数据库帐号
  3. 数据库密码
  4. connectionCharset ==> 获取binlog时指定的编码
  5. 位点自定义设置 ==> 格式:{"journalName":"","position":0,"timestamp":0};
    指定位置:{"journalName":"","position":0};
    指定时间:{"timestamp":0};
  6. 内存存储batch获取模式 ==> MEMSIZE/ITEMSIZE,前者为内存控制,后者为数量控制.  针对MEMSIZE模式的内存大小计算 = 记录数 * 记录单元大小
  7. 内存存储buffer记录数
  8. 内存存储buffer记录单元大小
  9. HA机制
  10. 心跳SQL配置 ==> 可配置对应心跳SQL,如果配置 是否启用心跳HA,当心跳SQL检测失败后,canal就会自动进行主备切换.

Node参数

  1. 机器名称 ==> 自定义名称,方便记忆
  2. 机器ip ==> 机器外部可访问的ip,不能选择127.0.0.1
  3. 机器端口 ==> 和manager/node之间RPC通讯的端口
  4. 下载端口 ==> 和node之间HTTP通讯的端口
  5. 外部Ip ==> node机器可以指定多IP,通过pipeline配置决定是否启用
  6. zookeeper集群 ==> 就近选择zookeeper集群

Zookeeper集群参数

  1. 集群名字 ==> 自定义名称,方便记忆
  2. zookeeper集群 ==> zookeeper集群机器列表,逗号分隔,最后以分号结束

主备配置参数

  1. group Key ==> 自定义名称,otter其他地方基于该名称进行引用
  2. master / slave ==> 主备库ip信息

生成了groupKey,1. 可以在数据库配置时,设置url:jdbc:mysql://groupKey=key (更改 key). 2. 在canal配置时,选择HA机制为media,可填入该groupKey进行引用