基于MySQL和Otter实现生产环境安全的数据同步及查询

在线网址:

https://www.syncnavigator.cn/chm/index.htm

 

官网下载:https://www.syncnavigator.cn

创建第一个同步项目


使用 HKROnline SyncNavigator 创建一个数据库同步项目。只需要通过简单的配置,创建完成后您可以随时执行数据库同步任务。

1. 点击 "SyncNavigator(Client)" 图标进入系统。

2. 在登录界面中输入连接到的服务器地址,点击 "确定" 按钮开始连接。

  • 注意:这里不是登陆您的数据库,而是登陆到本软件的管理端。
  • 默认情况下直接点击 "连接" 按钮即可(本机默认已经安装)。
  • 默认服务器登录用户名为 "admin" 密码为空。
  • 本机服务器地址 = 127.0.0.1 。
  • 您可以使用域名或者IP地址作为服务器地址。如果指定了端口号可以使用 IP:Port 方式填写。

3. 切换到 "同步管理" 面板中点击 "新建" 按钮开始创建同步项目。


4. 首先切换到 "来源数据库" 选项卡。填写同步的来源数据库信息。 

  • 一般情况下只需要输入数据库地址,数据库名称,登录用户名,登录密码。

  • 数据库地址: 连接到的数据库地址。可以是域名或者IP地址。如果指定了端口号可以使用 IP:Port 方式填写。
  • 数据库名称: 使用的数据库名称。如果已经指定了默认的登录数据库可以为空。
  • 登录用户名: 登录数据库服务器使用的用户名。如果需要使用Windows账户登录请变更 "登录方式"
  • 连接测试: 测试输入的信息是否正确。如果连接失败则会返回具体错误信息。

 

5. 切换到 "目标数据库" 选项卡。以相同的方式填写同步的目标数据库。 

  • 您只需要创建一个新的目标数据库,软件会自动创建最大兼容的表结构。

  • 如果您希望目标数据库与来源数据库表结构完全一致,您只需要在目标数据库创建一个空表结构即可。
  • 当您使用 MySQL 作为来源数据库时,同步的表至少需要一个主键。
  • 目标数据库不应包含外键约束,因为它可能导致部分数据无法同步。
  • 如果您的目标数据库与来源数据库结构(如字段类型,约束)不兼容,这可能导致部分数据无法同步。
  • 假设您设置来源库为 192.168.1.2 ,设置目标数据库为 192.168.1.3, 那么数据将从192.168.1.2 同步到 192.168.1.3。如果您的方向设置错误,可能会导致数据被覆盖。

6. 切换到 "同步内容设置" 选项卡。选择需要同步的数据库表。

 

一、Otter的特性

1、纯JAVA开发,占时资源比较高

2、基于Canal获取数据库增量日志数据,Canal是阿里另一款开源产品

下面是Canal的原理图:

已经为大家精心准备了大数据的系统学习资料,从Linux-Hadoop-spark-......,需要的小伙伴可以点击

基于MySQL和Otter实现生产环境安全的数据同步及查询_第1张图片

基于MySQL主备复制原理:

基于MySQL和Otter实现生产环境安全的数据同步及查询_第2张图片

 

Canal工作原理:

 

3、典型管理系统架构,manager(web管理)+node(工作节点)

1)manager运行时推送同步配置到node节点,负责配置监控

2)node节点将同步状态反馈到manager上,负责处理任务

4、基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作

5、使用aria2多线程传输技术,对网络依赖带宽依赖较低

二、Otter能解决什么问题

1、异构库同步

MySQL -> MySQL/Oracle。(目前开源版本只支持MySQL增量,目标库可以是MySQL或者Oracle,取决于Canal的功能)

2、单机房同步 (数据库之间RTT < 1ms)

 

3、异地机房同步(是Otter最大的亮点之一,可以解决国际化问题把数据从国内同步到国外提供用户使用,在国内场景可以做到数据多机房容灾)

机房容灾

4、双向同步(双向同步是在数据同步中最难搞的一种场景,Otter可以很好的应对这种场景,Otter有避免回环算法和数据一致性算法两种特性,保证双A机房模式下,数据保证最终一致性)

1)避免回环算法 (通用的解决方案,支持大部分关系型数据库)

2)数据一致性算法 (保证双A机房模式下,数据保证最终一致性,亮点)

5、文件同步

站点镜像 (进行数据复制的同时,复制关联的图片,比如复制产品数据,同时复制产品图片)

单机房复制示意图:

基于MySQL和Otter实现生产环境安全的数据同步及查询_第3张图片

说明:

 

异地机房复制示意图:

基于MySQL和Otter实现生产环境安全的数据同步及查询_第4张图片

说明:

 

关于Otter的调度模型、数据入库算法、一致性、高可用性和扩展性等内容,可以登录GitHub了解。

已经为大家精心准备了大数据的系统学习资料,从Linux-Hadoop-spark-......,需要的小伙伴可以点击

里面有详细的介绍,本文不再赘述,下面重点说明一下otter的安装和使用。

三、安装部署

移动云业务需要数据汇总,需将多个主数据库同步汇总到一个从数据库中,方便数据统计分析。Otter中间件则满足了此需求,相对比多源复制,更加灵活和可塑性。

前面简单介绍了Otter的基本信息,下面开始搭建一个Otter环境,因为一个Otter需要Manage+node+数据库还有很多的依赖,这里我们先来搭建Otter的管理服务器Manager。

1、环境准备

1)阿里软件

Otter(manager、node)软件:https://github.com/alibaba/otter/releases

Manager数据库初始化脚本:https://raw.githubusercontent.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql

2)集群

Zookeeper:http://download.csdn.net/download/jxplus/9451794

3)JAVA

JDK:测试环境使用yum安装1.6以上版本

4)数据库

Mysql5.7:http://dev.mysql.com/downloads/mysql/

5)操作系统

CentOS 7.1.1503 (Core):https://www.centos.org/download/

版本信息

基于MySQL和Otter实现生产环境安全的数据同步及查询

2、软件安装

1)操作系统安装

2)java jdk1.6

安装完成操作系统后,使用yum安装jdk1.6以上版本(含1.6)

yum -y install java-1.6.0-openjdk.x86_64

3)安装MySQL数据库

4)安装集群软件ZooKeeper

下载安装包后解压即可,不需要编译安装。然后进行配置:

① 修改tickTime、clientPort、dataDir参数

vim /zookeeper-3.4.8/conf/zoo.cfg

tickTime :时长单位为毫秒,为zk使用的基本时间度量单位。例如,1 * tickTime是客户端与zk服务端的心跳时间,2 * tickTime是客户端会话的超时时间。

tickTime的默认值为2000毫秒,更低的tickTime值可以更快地发现超时问题,但也会导致更高的网络流量(心跳消息)和更高的CPU使用率(会话的跟踪处理)。

clientPort :zk服务进程监听的TCP端口,默认情况下,服务端会监听2181端口。

dataDir :无默认配置,必须配置,用于配置存储快照文件的目录。

② 执行下面命令启动server

cd /zookeeper-3.4.8/bin/ 

  • 如果需要设置每个表的具体内容可以点击 "详细设置" 按钮进行调整。

  • 您可以设置条件过滤。比如只查询评分大于90的表记录,或者隐藏不需要同步的字段。
  • 如果在这一个步骤未勾选任何表则不会同步任何内容。

    在云平台的日常运维工作中,有很多故障排查和数据核对的场景,为了给全线运维人员(含部分开发和运营分析人员)提供现网数据的实时查询,我们使用mysql和开源工具otter搭建了一套数据查询和管理系统,可以查询平台各资源池现网当前的数据。并与现网保持准实时同步(秒级延时)。

    查询模块的主要组件是Mysql,纳管线上业务系统的核心数据库,用户使用频次极高,此台MYSQL中的部分核心数据还作为其他资源池的源数据,实时同步给异地机房。负责数据实时同步的otter管理节点与MySQL部署在同一物理机上,是云平台所有资源池中查询模块的中枢节点。

    首先,介绍一下开源工具Otter(内容引自GitHub)

    Otter是由阿里提供的基于数据库增量日志解析,准实时同步到本机房或异地机房MySQL数据库的一个分布式数据库同步系统,工作原理如下:

    基于MySQL和Otter实现生产环境安全的数据同步及查询_第5张图片

  • db:数据源以及需要同步到的库;

  • Canal:用户获取数据库增量日志;

  • manager:配置同步规则设置数据源同步源等;

  • zookeeper:协调node进行协调工作;

  • node:负责任务处理处理接受到的部分同步工作。

  • MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看);

  • MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log);

  • MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据。

  • Canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议;

  • MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal );

  • Canal 解析 binary log 对象(原始为 byte 流)。

  • 数据库版本升级;

  • 数据表迁移;

  • 异步二级索引。

  • 数据on-Fly,尽可能不落地,更快的进行数据同步. (开启node loadBalancer算法,如果Node节点S+ETL落在不同的Node上,数据会有个网络传输过程);

  • node节点可以有failover / loadBalancer。

  • 数据涉及网络传输,S/E/T/L几个阶段会分散在2个或者更多Node节点上,多个Node之间通过zookeeper进行协同工作 (一般是Select和Extract在一个机房的Node,Transform/Load落在另一个机房的Node);

  • node节点可以有failover / loadBalancer. (每个机房的Node节点,都可以是集群,一台或者多台机器)。

你可能感兴趣的:(基于MySQL和Otter实现生产环境安全的数据同步及查询)