otter用于跨云RDS for mysql之间配置双主实时同步

2    1525    8

Tags:

👉 本文共约4235个字,系统预计阅读时间或需16分钟。

问题引出

客户需要将华为云rds for MySQL和天翼云rds for MySQL做一个双向同步,当华为云rds宕机的时候,可以切换到天翼云继续提供服务,而且此时,天翼云的数据也可以自动同步到华为云rds,平时只使用华为云的rds,和双A方案有点差异,需要注意的是rds环境不能安装任何的软件,所以,我目前想到的方案有:

1、用MySQL自带的主从复制。这个方案最简单,但是不可行,因为华为云和天翼云都禁用了super权限,在执行change master的时候会报权限不足的错误,“ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operation”。

2、使用华为云或天翼云自带的数据同步功能。这个也不可行,翻阅了一下文档,同步只能全量+增量同步,这对于双向同步来说不可行。

3、使用ogg远程捕获投递。ogg for MySQL从MySQL 5.7和ogg 19c开始支持远程捕获(Remote Capture)和远程投递(Remote Delivery),所以配置双向同步,该方案经过验证也是可行的!

4、使用阿里的开源工具otter,这个方案经过验证是可行的。阿里数据同步工具Otter和Canal简介请参考:https://www.xmmup.com/alishujutongbugongjuotterhecanaljianjie.html

otter和ogg优缺点

1、otter不能同步无主键的表(会导致同步任务停止),而ogg可以

2、otter可以单向同步ddl语句,而ogg对于MySQL 5.7不可以(5.7需要安装插件),ogg对MySQL 8.0支持DDL同步

3、otter有图形界面操作,OGG只有命令行操作,但是ogg的微服务也可以全程图形化

搭建otter环境配置双向同步

本次环境架构图如下:

otter用于跨云RDS for mysql之间配置双主实时同步

准备环境

购买2台RDS for MySQL环境

这里,我做测试直接买了2台华为云的rds,大家把rds-3388-0001当做华为云rds,另一台当做天翼云rds吧:

otter用于跨云RDS for mysql之间配置双主实时同步

购买1台ECS环境作为otter环境

这里,我做测试直接买了1台华为云的ecs:

otter用于跨云RDS for mysql之间配置双主实时同步

开放端口:8088,web页面使用

开放端口:2088,2089,2090,这几个端口对rds开放,同时2个rds的3306需要对这台ecs开放。

下面开始配置:

启动成功后浏览器访问 http://139.9.130.227:8088/login.htm,出现otter的页面,用户名和密码都是admin

image-20210902170707389

配置otter

修改Node

选择机器管理的node管理:

otter用于跨云RDS for mysql之间配置双主实时同步

otter用于跨云RDS for mysql之间配置双主实时同步

由于ECS和2台rds通信只能使用外网IP,所以,这里启用外部IP, 如上图。

启动node

otter用于跨云RDS for mysql之间配置双主实时同步

启动命令:

管理界面显示节点状态已经启动:

image-20210902171428339

添加数据源

添加2个rds的数据源: 填写正确的数据库连接信息。

otter用于跨云RDS for mysql之间配置双主实时同步

otter用于跨云RDS for mysql之间配置双主实时同步

这里填写的mysql用户不一定要用root,只要有操作需同步数据的库表的相关权限即可。

otter用于跨云RDS for mysql之间配置双主实时同步

添加需要同步的数据表

image-20210812184504456

image-20210903084409117

注意:如果同步整个数据库的表,则将schema name和table name都设置成“.*”,不建议对整个库同步,因为有系统库不建议同步。

image-20210902171629408

配置双向同步

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

同时,因为双向回环控制算法会依赖一些系统表,需要在需要做双向同步的数据库上初始化所需的系统表,也可以直接从界面获取(可以点击使用文档-》数据库初始化页面),获取初始sql:

界面获取:

otter用于跨云RDS for mysql之间配置双主实时同步

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

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

双向需要注意:

一个channel 添加两个 pipeline ,

两个为双向同步,如果要用DDL同步,一个pipeline开启ddl同步,另一个不要开启,且建议开启跳过ddl异常,DryRun模式 不要开启

同时在配置双向同步的时候,建议执行otter-system-ddl-mysql.sql增加同步控制库,若是单向同步,则不需要运行该脚本。

双向同步建议在需要同步的两个数据库中新建retl数据库。

添加canal

Otter使用canal开源产品获取数据库增量日志数据,可以把cannal看作是源库的一个伪slave。

原理: canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议,mysql master收到dump请求,开始推送binarylog给slave(也就是canal), canal解析binary log对象(原始为byte流)。

若要配置双向同步,则必须添加2个canal,若配置单向同步,则配置一个canal即可。

otter用于跨云RDS for mysql之间配置双主实时同步

otter用于跨云RDS for mysql之间配置双主实时同步

otter用于跨云RDS for mysql之间配置双主实时同步

image-20210831164514441

添加channel、pipline以及映射关系

otter用于跨云RDS for mysql之间配置双主实时同步

若是单向同步,则可以不开启数据一致性!

otter用于跨云RDS for mysql之间配置双主实时同步

otter用于跨云RDS for mysql之间配置双主实时同步

image-20210902172354705

注意这里的选项:

otter用于跨云RDS for mysql之间配置双主实时同步

otter用于跨云RDS for mysql之间配置双主实时同步

otter用于跨云RDS for mysql之间配置双主实时同步

2个Pipeline都需要添加映射关系:

otter用于跨云RDS for mysql之间配置双主实时同步

image-20210902172814580

启动channel

otter用于跨云RDS for mysql之间配置双主实时同步

otter用于跨云RDS for mysql之间配置双主实时同步

验证

验证是否同步:

双向同步配置完成。

otter用于跨云RDS for mysql之间配置双主实时同步

添加监控

otter用于跨云RDS for mysql之间配置双主实时同步

otter用于跨云RDS for mysql之间配置双主实时同步

压测

使用mysqlslap

创建了一个简单的表使用mysqlslap进行测试。

测试100w条插入:

image-20210902115810043

延迟、tps等如下:

image-20210902120655442

image-20210902120640374

otter用于跨云RDS for mysql之间配置双主实时同步

otter用于跨云RDS for mysql之间配置双主实时同步

otter用于跨云RDS for mysql之间配置双主实时同步

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

使用sysbench

由于DDL是单向同步,所以,在华为云rds需要做建表操作,然后可以在天翼云rds做压测:

image-20210902141815244

otter用于跨云RDS for mysql之间配置双主实时同步

image-20210902141538161

image-20210902141709234

otter用于跨云RDS for mysql之间配置双主实时同步

otter用于跨云RDS for mysql之间配置双主实时同步

总体来说,如果不做太多的字段重命名、二次处理,otter性能本身还是不错的。

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

2 条回复

  1. 头像 DuDu说道:

    请教一下,在启动后,点击登录会报错,请问博主有遇到类似的情况吗?是否缺失包:
    HTTP ERROR 500
    Problem accessing /login.htm. Reason:

    Caused by:
    com.alibaba.citrus.service.pipeline.PipelineException: Failed to execute action module

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部