简介:ODPS主备集群双向数据复制导致主备中心网络打爆问题

1. 故障问题描述

客户现场发生了ODPS主备机房相互数据全量复制导致的主备中心网络被打爆的问题,严重影响了日常运行的ODPS任务。在ODPS主备机房的环境中,用户的任务均在主机房中运行,产生的数据默认会落在主机房,通过ODPS replicationService将主机房的数据异步复制到备用机房。那么为什么会有反向同步到主机房数据的情况,需要对该问题开展排查进行根因分析。

2. 故障现象

在排查过程中观察关闭数据前后的机器网络负载状态,当打开数据主备复制的时候,机器的网卡的进出流量很大。

图1

继续排查发现主机房复制作业和备机房复制作业都在运行,而且很多都是没有更新的数据表,这种没有必要的全量数据同步造成大量的网络开销。

图2

图3

图4

3. 故障原因分析

在解决问题之前,我们需要先搞清楚ODPS同城双机房容灾整体技术方案和其中的跨机房数据异步复制工作原理。

3.1 ODPS同城双机房容灾整体技术方案

ODPS产品应用中针对每一种场景的故障或者集群灾难,其故障恢复或者服务切换方案都是不同的。该客户属于ODPS同城双机房容灾方案,我们先看下ODPS同城双机房容灾整体技术方案。

  1. 特点:

    • 主备机房均部署完整的MaxCompute服务(控制集群、计算集群、tunnel、前端)。
    • 主备机房均可以正常使用,但正常状态下,备机房处于静默状态,不处理具体业务请求。
    • 主备机房之间开启数据传输,设置既定的策略定时或按需将数据同步到备机房。
  1. 核心逻辑:

    • 元数据保持同步复制;
    • 业务数据保持异步复制;
    • RTO:可以实现分钟级;
    • RPO:视数据量及同步频率来定,一般为小时级。
  1. 网络要求:
    • 元数据的同步延迟要控制在5ms以内;
    • 业务数据的同步延迟要控制在20ms以内。

图5

  1. 模块具体说明如下:
    • VIP1:指向一组Tunnel数据服务节点的虚拟IP,绑定ODPS tunnel的域名,所有的ODPS数据上传和下载都经过VIP1。
    • VIP2:指向一组ODPS DDL/DML命令服务节点的虚拟IP,绑定ODPS服务的域名,所有的DDL/DML命令都通过VIP2提交给ODPS进行处理。
    • Tunnel前端集群:部署ODPS Tunnel服务进程的一组节点,用于数据上传和下载,会调用用户中心和Meta服务进行用户请求的鉴权,读写计算存储集群的数据。
    • 命令前端集群:部署ODPS DDL/DML命令处理服务的一组前端节点,将DDL/DML操作命令转发给ODPS控制服务进行处理。
    • 控制服务:处理前端发来的DDL/DML命令,对于DML,会进行SQL语法分析、查询优化和查询计划生成,通过提交给计算集群的分布式作业来完成物理执行计划。
    • 用户中心:即UMM服务,负责管理整个阿里云和大数据平台的用户。
    • Meta服务:ODPS采用OTS作为自己的Meta存储服务,负责管理ODPS对象的元数据,包括Project信息,表数据(Table)的schema及其数据存储在飞天集群上的路径,数据在不同飞天集群上的版本信息,用户UDF的元数据信息等等。
    • 计算集群:用于存储和计算的飞天集群,存储所有的数据和UDF程序,所有的DML命令会解析为一个飞天的分布式DAG(有向无环图)作业提交给计算集群来执行。飞天集群最核心的模块包括盘古(Pangu)和伏羲(Fuxi),盘古是一个分布式文件系统,Fuxi负责资源和作业调度管理。
      在这个方案中,主备机房各有一套ODPS服务,它们共享同一个用户中心(UMM)和Meta服务,UMM和OTS都具备各自双机房容灾能力,具体详见它们的容灾方案。

3.2 跨机房数据异步复制工作原理

我们再来看下跨机房数据异步复制工作原理:

  1. 在正常工作状态下,主机房的ODPS提供服务,备机房的ODPS没有服务请求,上层数据业务都只通过两个服务域名使用ODPS:
    • ODPS服务域名:指向命令前端集群的虚拟IP,即系统架构图中的VIP2。
    • Tunnel服务域名:指向Tunnel前端集群的虚拟IP,即系统架构图中的VIP1。
  1. ODPS通过数据异步复制机制,由主机房的Replication Service不断将主机房的ODPS数据同步到备机房的计算集群,ODPS引入数据版本的机制:
    • 同一份数据(表或分区)在多个计算集群上可能具有不同的版本,ODPS Meta服务会维护每份数据的版本信息,表示如下:

{"LatestVersion":*V1*,"Status":{"ClusterA":"*V1*","ClusterB":"*V0*"}}

    • 当一份数据版本更新后,触发一个分布式的跨集群数据复制任务,将数据复制到其他计算集群,通过对复制任务的限制可以进行机房间数据复制流量管控。
  1. 对于ODPS这种大规模离线数据处理系统来说,数据加工往往有突发的情况,在某个时间段产出的数据量可能非常大,受限于机房间的带宽,新上传的和新计算的数据复制到备机房需要一定的时间,ODPS提供实时查看当前未同步的数据表/分区,实时的容灾数据同步率等信息,实时数据同步率主要取决于两个因素的影响:
    • 机房间带宽大小;
    • 主机房ODPS计算集群繁忙程度。

因为数据复制也是以飞天分布式任务来进行的,需要用到主机房的ODPS计算集群的计算资源(主要是CPU和内存),ODPS可以根据这两个因素给出数据同步完成的时间预估。

考虑到集群间带宽,存储等资源的竞争, 需要用户自行选择是否创建容灾project。通过ascm/dtcenter创建project时,可以选择创建单集群project,也可以选择创建多集群project。其中单集群project不支持容灾功能。

容灾project配置:

  1. 通过ascm/dtcenter创建多集群project之后,默认主备集群不会进行数据同步,需要通过bcc页面配置开启数据同步(maxcompute模块下 -> 运维菜单 -> 业务运维 -> 项目管理 -> 项目列表)。

图6

  1. 客户某个project的资源复制配置:

图7

配置项说明,开启资源复制后,以下配置才能生效。

    • SyncObject:配置同步的集群,以及同步数据类型,参照上图将ODPS集群名修改为现场主备集群名称即可开启ODPS数据完全复制。
    • ScanMetaInterval:数据同步间隔,单位为秒。
    • EnableEvent:数据是否实时同步,配置为true时,当主集群数据产生变化,会立刻同步到备集群,同时ScanMetaInterval配置将失效。

注:配置数据同步为实时同步或数据同步间隔配置时间较短会较大程度占用网络带宽,建议当需要同步的数据量较大时,关闭实时同步并调大同步间隔。

  1. 容灾复制风险和实践说明:
    • 如上一节提到的 EnableEvent 如果设置为true,那么project中的数据会在被更改后立刻触发同步,并且每次同步的数据量为该表或该分区的全部数据量。例如:某非分区表中有1T的数据,如果对该表插入1条数据,就需要将这1T的数据都复制到备机房。 如果1分钟内写了10次数据,那一分钟就会复制10次1T的数据到备机房,从而产生9T的待回收数据。混合云上强烈建议关闭实时复制,以减少机房间的带宽和存储压力。改为定时复制的策略,比如设置ScanMetaInterval,6小时一次扫描复制一次。     EnableEvent = false     ScanMetaInterval=21600   #6小时=21600秒
    • 为防止高峰时段ODPS占满集群带宽,可以在adminconsle->跨集群复制全局配置,这里限制ODPS集群间复制的流量带宽,单位是Gb,下图示例:

图8

从具体的备机房往主中心复制作业日志截图中可以看到,集群的名字是大写,而客户在资源复制同步中设置的sourceLocation中是小写,客户侧存在错误配置的问题。

图9

和ODPS的研发同学沟通确认了这个问题的root cause是ODPS的replicationService在发起项目数据异步复制时会拿SyncObject的集群通过ots来校验备用集群对应的project的版本号。这里将大小写不同认为是备机房该项目不存在,于是发起了同步,但是在数据落地存储的时候有数据校验并不会把这些真正存储起来。于是带来了不必要的网络开销,但并不会影响数据质量。

通过bcc修改资源配置,将SyncObject中集群改为大写,并重启ODPS的replicationService后问题得到彻底解决。

图10

4. 问题结论

ODPS主备集群做数据复制同步带宽被打满,root cause是ODPS project资源复制中的集群名是小写,而ODPS project集群的名称是大写,数据同步的时候会认为该project不存在,导致了双向同步,通过测试也验证了这一点。该问题已经通过bcc批量更正项目名中集群信息为大写,同时重启replicationService解决。

需要特别注意:客户在bcc中项目资源复制配置中需要注意保持同步数据集群名字大小写和集群名字匹配。

通过这次问题排查可以很好地了解到当前的ODPS多机房的数据同步方案和多机房的技术容灾架构。

我们是阿里云智能全球技术服务-SRE团队,我们致力成为一个以技术为基础、面向服务、保障业务系统高可用的工程师团队;提供专业、体系化的SRE服务,帮助广大客户更好地使用云、基于云构建更加稳定可靠的业务系统,提升业务稳定性。我们期望能够分享更多帮助企业客户上云、用好云,让客户云上业务运行更加稳定可靠的技术,您可用钉钉扫描下方二维码,加入阿里云SRE技术学院钉钉圈子,和更多云上人交流关于云平台的那些事。

原文链接:https://developer.aliyun.com/article/796081?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

ODPS主备集群双向数据复制导致主备中心网络打爆问题相关推荐

  1. 分盘存储:实现数据库备集群备份文件分散存储

    摘要:为了解决磁盘存储空间限制的问题,提出分盘存储手段,从而实现备集群备份文件分散存储的目的. 1. 摘要 双集群容灾场景下,需要将主集群中的数据备份到备集群.然而,随着主集群数据量的增大,备集群不存 ...

  2. HDFS High Availability(HA)高可用、单点故障、主备集群、脑裂问题、数据同步问题、HDFS HA解决方案—QJM

    HDFS High Availability(HA)高可用 1.1 High Availability背景知识 1.1.1 单点故障.高可用 单点故障(英语:single point of failu ...

  3. 数据架构:从主备,主主到集群的高可用方案

    本文转载自公众号:不止思考 在互联网项目中,当业务规模越来越大,数据越来越多,随之而来的就是数据库压力会越来越大.慢慢就会发现,数据库层可能已经成为了整个系统的关键点和性能瓶颈了,因此实现数据层的高可 ...

  4. 【与达梦同行】达梦数据库主备集群搭建

    达梦数据库主备集群----高性能模式-搭建 文章连接:https://eco.dameng.com/community/post/20221213145437YQ30VJ0HDLCFUV2UMW 环境 ...

  5. 达梦主备集群,主库部分redo被删除或损坏,故障恢复。

    记录一次在虚拟机上安装达梦主备集群,搭建完成后,由于主库新添加3个2G redo.log,造成虚拟机空间不足,无法归档.然后删除3个redo,实例无法启动又到恢复过程.详细步骤如下: 主库报错: 20 ...

  6. 达梦数据库实时主备集群的同步机制和切换机制

    DM数据守护介绍 1. DM 数据守护(Data Watch) 是一种集成化的高可用.高性能数据库解决方案,是数据库异地容灾的首选方案.通过部署 DM 数据守护,可以在硬件故障(如磁盘损坏).自然灾害 ...

  7. 部署DM MPP主备集群

    DM8的DEM上在部署MPP集群时无法和DM7.6的DEM一样可以同时部署DataWatch,所以这里采用手动部署.后面有补充DM7.6部署MPP主备集群步骤截图. 使用两种方式部署MPP主备集群(交 ...

  8. 达梦数据库主备集群确认监视器测试

    目录 1.测试说明 2.测试项目 3.测试结论 1.测试说明 (1) 本次测试环境 主机名 服务ip 心跳ip 数据库名 实例名 dmdb01 主 192.168.226.190 192.168.22 ...

  9. DM8主备集群中主备库 的拆分与合并

    DM8主备集群中主备库的拆分与合并 环境准备 添加数据 新建表空间及用户并赋权 创建表 STUDENT 和 COURSE 插入数据并提交 查询验证数据 对主库进行在线备份 停止集群 停止守护进程 停止 ...

最新文章

  1. Android 搜索框 search dialog 和 search widget
  2. Android 导航栏如何轻松搞定
  3. Silverlight与Flash的技术比较(图)
  4. 设计模式是用来弥补面向对象编程缺陷的方法总结
  5. Linux 主机超全渗透测试命令汇总
  6. AngularJS学习之旅—AngularJS 模块(十五)
  7. sql 日期间隔排查双休_免费教程《图解SQL面试题》
  8. 【PAT乙】1065 单身狗 (25分)
  9. 南方cass简码识别大全_南方CASS简码成图的方法
  10. golang命令行贪吃蛇
  11. word目录的制表符前导符无法改变
  12. 波士顿房价预测python决策树_机器学习第二练---波士顿房价预测
  13. 被低估的EIP-3074,以太坊用户的大利好
  14. 大数据应用实践2: IMDG应用场景
  15. RT-Thread 柿饼GUI
  16. 假如有人把支付宝存储服务器炸了,我们的钱还在吗?
  17. 如何让spyder中途暂停(之前运行出来的结果仍然显示)
  18. 计算机等级成绩科目代码65,北京计算机等级考试成绩评定标准是怎样的
  19. QTextToSpeech 文本转语音输出
  20. [日常技能]手机投屏到电视的5种方法

热门文章

  1. conda切换环境_Python多环境管理,你需要知道的几种方法
  2. 如何获取某个标签下所有的元素id_D3库实践笔记之元素定位与数据绑定 |可视化系列33...
  3. 机器学习(三)逻辑回归以及python简单实现
  4. Premiere Pro CC2017教程(三)
  5. 五、数据对象和属性类型
  6. 肝!十大 Python 机器学习库
  7. CTO问:WebSocket 是啥玩意?
  8. 分享珍藏很久的Python学习知识手册
  9. symfony php 更新内容,Symfony框架中的Doctrine
  10. 分支限界法:单源最短路径--dijkstra算法