多级复制的数据不同步问题

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 昨天刚到公司,开发的同事就找到我,让我帮他看看某一台mysql的库,似乎数据是不同步了。大体的意思是,A地库中的数据会同步到B地,B地的数据会同步到C地,C地就是开发最终需要访问的数据,这些业务都是独立的,但是一部分数据是需要同步的。
昨天刚到公司,开发的同事就找到我,让我帮他看看某一台mysql的库,似乎数据是不同步了。大体的意思是,A地库中的数据会同步到B地,B地的数据会同步到C地,C地就是开发最终需要访问的数据,这些业务都是独立的,但是一部分数据是需要同步的。听起来比较拗口,实现方式也比较有意思。
采用了下面的方式来实现。列出一部分的架构图。
图中的数据分布在三个区域,可以理解跨越了三个大洲,各个洲有自己的业务,也就是Area1,2,3,我们用区域ABC来替代。由于需要同步一部分数据到北京来。就是区域C通过区域B是作为中转的。因为区域A到区域C的网络带宽很差,需要代理中转,数据库都是使用了aws
这个图比较有意思的就是区域A中的备库,其实在这个架构中既是从库,同时又是区域B的主库。但是指同步一部分数据比如A,B

按照这样的结构图,目前发现是Area3中的数据没有同步过来,所以排查的思路也就很清晰了。
首先查看了Area1中的备库
mysql> select count(*) from fact_recharge;
+----------+
| count(*) |
+----------+
|  3295669 |
+----------+
1 row in set (6 min 10.75 sec)
但是在Area3中进行查询,发现差得倒不是很多。
> select count(*)from fact_recharge;
+----------+
| count(*) |
+----------+
|  3294066 |
+----------+
1 row in set (10.80 sec)
如果算作异地的同步,还说明不了问题所在。
继续登录到Area2进行排查。发现通过终端ssh连接很缓慢。
ssh: connect to host 46.1.22.90 port 22: Connection timed out
好不容易登录上去,赶紧抓取了一个top结果。
发现CPU都是空闲,负载非常低。
top - 18:47:27 up 108 days, 14:45,  2 users,  load average: 0.05, 0.05, 0.00
Tasks: 539 total,   2 running, 537 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3%us,  0.7%sy,  0.0%ni, 99.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3932160k total,  3917400k used,    14760k free,   108268k buffers
Swap:  8393920k total,  2587788k used,  5806132k free,   580288k cached
这个时候通过本地的网络去连接缓慢,但是从top来看却显然不是系统负载高,因为用的是aws的服务,所以让运维的同学帮忙去看看。
过了一会,他们反馈,网络问题解决了。
这个时候连接Area2,发现速度就快多了。查看备库的状态,发现没有问题,于是继续排查问题,看看Area3的备库是否正常。
发现结果slave的状态是Reconnecting,这就意味着Area3备库还在尝试做同步,但是似乎还是没有奏效。
> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Reconnecting after a failed master event read
                  Master_Host: 46.1.22.90
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: binlog.000311
          Read_Master_Log_Pos: 598159165
               Relay_Log_File: mysql-relay-bin.001428
                Relay_Log_Pos: 61280882
        Relay_Master_Log_File: binlog.000311
             Slave_IO_Running: Connecting
            Slave_SQL_Running: Yes
Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 2003
                Last_IO_Error: error reconnecting to master 'repl@46.1.22.90:3306' - retry-time: 60  retries: 86400       
这个时候查看最近的IO_Error已经超时,反复尝试了多次了。
同时查看错误日志,发现一段内容,可见确实是出现了网络的问题。
151104 13:56:45 [ERROR] Slave I/O: error reconnecting to master 'repl@46.1.22.90:3306' - retry-time: 60  retries: 86400, Error_code: 2003
这个时候如果确认网络没有问题之后,可以尝试stop slave,start slave来重新开启数据应用
但是还是没有奏效。使用telnet也没有反应,还有报错。
telnet 46.1.22.90 3306
Trying 46.1.22.90...
telnet: connect to address 46.1.22.90: No route to host
telnet: Unable to connect to remote host: No route to host
如果使用ssh的22端口来处理,发现端口是通的。
# telnet 46.1.22.90 22
Trying 46.1.22.90...
Connected to wg_in_46.1.22.90 (46.1.22.90).
Escape character is '^]'.
SSH-2.0-OpenSSH_4.3
Protocol mismatch.
Connection closed by foreign host.
反复排查,最后发现Area2上的防火墙被开启了,过滤了一些访问。重新设置就好了。
所以早上的问题因为网络问题导致了数据的不同步,但是初步的网络问题解决了,不知道怎么的,又把防火墙设置进行了修改,导致Area3的备库压根连不到Area2,所以日志始终接收不了。
网络问题修复后,也不用设置stop slave,start slave,同步就开始自动更新了。
初始状态是
> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Queueing master event to the relay log
自动重连后,根据状态就发现确实开始应用数据日志了。
> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
当然同步之后,简单确认之后就可以告知研发,问题已经得到了解决。
这个问题虽然比较简单,但是作为MySQL新手还是需要好好了解一下开源中的数据复制实现方式与方法。这个问题的分析中根据业务的架构实现还是需要很熟练的掌握,这样在问题发生的时候才不至于太手忙脚乱。
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
JavaScript 前端开发
同步结构3-12
同步结构3-12
|
3月前
|
SQL Java 数据管理
|
5月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版产品使用问题之任务在同步过程中新增同步表后选择全量初始化历史数据,是否会阻塞原先其余表的增量同步
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
实时计算 Flink版产品使用问题之任务在同步过程中新增同步表后选择全量初始化历史数据,是否会阻塞原先其余表的增量同步
|
5月前
|
Linux
仅同步最近5分钟的文件如何操作
【6月更文挑战第28天】仅同步最近5分钟的文件如何操作
23 0
|
6月前
|
存储 Kubernetes 调度
K8S常见的持久化(存储)方案用法详解
K8S常见的持久化(存储)方案用法详解
581 3
|
分布式数据库 数据库
复制延迟案例(1)-最终一致性
该案例违反因果律。 想象先生和夫人之间的对话: Mr Mrs,你能看到多远未来? Mrs 通常约10s,Mr.
92 0
|
CDN
多主复制下处理写冲突(1)-同步与异步冲突检测及避免冲突
多主复制的最大问题:可能发生写冲突,这是必须要解决的。
142 0
|
算法 Java Nacos
Raft采用日志复制形式同步数据|学习笔记
快速学习Raft采用日志复制形式同步数据
Raft采用日志复制形式同步数据|学习笔记
|
JavaScript
js如何拷贝元数据后,更改数据不对元数据有影响
js如何拷贝元数据后,更改数据不对元数据有影响
下一篇
无影云桌面