快速,持续,稳定,傻瓜式
支持Mysql,Sqlserver数据同步

使用otter实现MySQL跨机房双向同步 工作流程 环境 目标 名词解释 安装 配置 配置mysql 导入 manager 系统表 导入 node 同步算法依赖的系统表 管理配置 添加zookee

请联系QQ:1793040 索取软件

  • 工作流程
  • 环境
  • 目标
  • 名词解释
  • 安装
  • 配置
    • 配置mysql
    • 导入 manager 系统表
    • 导入 node 同步算法依赖的系统表
  • 管理配置
    • 添加zookeeper主机
    • 添加node
    • 添加数据源
    • 添加数据表
    • 添加Canal配置
    • 添加channel配置
    • 添加pipeline配置
    • 添加映射关系
    • 启动同步
  • 关于双A同步(数据的一致性问题)
  • 相关参考

otter是一款基于Java且免费、开源基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库的解决方案。

工作流程

otter基于zookeeper解决分布式状态调度,由manager(web管理)和node(工作节点)组成。manager运行时推送同步配置到node节点上,node节点将同步状态反馈到manger上。

  • 主机A: 192.168.1.101
  • 主机B: 192.168.1.102
  • 系统: ubuntu 14.04.5
  • MySQL: 5.6.33
  • Zookeeper: 3.4.9
  • otter: 4.2.14

实现主机A(manager+node+zookeeper)和主机B(node)两台主机上的mysql数据库的双向同步。

  • Pipeline:从源端到目标端的整个过程描述,主要由一些同步映射过程组成
  • Channel:同步通道,单向同步中一个Pipeline组成,在双向同步中有两个Pipeline组成
  • DataMediaPair:根据业务表定义映射关系,比如源表和目标表,字段映射,字段组等
  • DataMedia : 抽象的数据介质概念,可以理解为数据表/mq队列定义
  • DataMediaSource : 抽象的数据介质源信息,补充描述DateMedia
  • ColumnPair : 定义字段映射关系
  • ColumnGroup : 定义字段映射组
  • Node : 处理同步过程的工作节点,对应一个jvm

MySQL(主机A、主机B)


JDK(主机A、主机B)


aria2, otter的node端需要(主机A, 主机B)


zookeeper (主机A)


manager (主机A)


node (主机A、主机B)


配置mysql

在 my.cnf (/etc/mysql/my.cnf) 的节点下启用binlog和外部访问


建立用户otter,并设置外部访问权限


导入 manager 系统表

这里只需要导入主机A


导入 node 同步算法依赖的系统表

需要同步的两个数据库(主机A、主机B)都需要导入


打开并点击右上角图标进行管理员登录,默认帐号为

添加zookeeper主机

点击 机器管理-> zookeeper管理-> 添加

  • 集群名字: mysql_test
  • ZooKeeper集群: 192.168.1.101:2181; (多个分行)

点击保存

添加node

点击 机器管理-> node管理-> 添加

  • 机器名称: 101
  • 机器IP: 192.168.1.101
  • 机器端口: 2088
  • 下载端口: 9090
  • zookeeper集群: mysql_test

其他默认,点击保存,同理添加主机B

添加数据源

点击 配置管理-> 数据源配置-> 添加

  • 数据库名字: mysql_101
  • 类型: MySQL
  • 用户名: otter
  • 密码: 123456
  • URL: jdbc:mysql://192.168.1.101:3306
  • 编码: UTF8

点击保存,同理添加主机B的数据源

添加数据表

点击 配置管理-> 数据表配置-> 添加

这里添加主机A的数据表

  • schema name: test
  • table name:.* (这里是指同步所有数据表,所以两个数据库的数据表结构要完全一样)
  • 数据源: mysql_101

测试查询并保存,同理添加主机B的数据表

添加Canal配置

点击 配置管理-> Canal配置-> 添加

添加主机A的Canal配置

  • canal名称: mysql_101
  • zookeeper集群: mysql_test
  • 数据库地址: 192.168.1.101:3306;
  • 数据库帐号: otter
  • 数据库密码: otter (这里的帐号和密码都是来自otter-system-ddl-mysql.sql,生产环境请自行修改)
  • 位点自义定设置如下:

进入mysql命令行,使用如下命令查询binlog位点目录名及起始位置


显示当前时间戳:


生成的位点信息如下:


其他选项使用默认,同理添加主机B的Canal配置

添加channel配置

一个channel配置两个pipeline。

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

点击 同步管理-> channel管理-> 添加

  • channel name: 101<>102

其他选项使用默认。

添加pipeline配置

点击 同步管理-> 101<>102-> 添加

  • pipeline名字: 101102
  • Select机器: mysql_101
  • Load机器: mysql_102
  • canal名字: mysql_101
  • 高级设置-> 支持ddl同步: 否

其他使用默认,点击保存,同理添加反向(102101)的pipeline配置

添加映射关系

点击 同步管理-> 101<>102-> 101102-> 添加

  • 源数据表: mysql_101数据源的数据库
  • 目标数据表:mysql_102数据库的数据库

点击保存,同理添加反向pipeline的映射关系

启动同步

回到 同步管理,点击名字为的channel后面的,即可开启同步。

然后就可以在101和102的名为的数据库中建立测试表来查看两台机器是否实现同步。

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

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

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

  • channel配置中的 “是否开启数据一致性” 设置为: 是
  • channel中的两个pipeline配置中需要将基中一个设置为主站点,并且在高级设置中,将其中一个设置为false,另一个设置为 true
  • 每个pipeline各自配置canal,定义映射关系

相关推荐

咨询软件
 
QQ在线咨询
售前咨询热线
QQ1793040