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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 昨天刚到公司,开发的同事就找到我,让我帮他看看某一台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新手还是需要好好了解一下开源中的数据复制实现方式与方法。这个问题的分析中根据业务的架构实现还是需要很熟练的掌握,这样在问题发生的时候才不至于太手忙脚乱。
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
11天前
|
监控 NoSQL Redis
RedisShake如何处理数据同步过程中的冲突和一致性问题
RedisShake保障数据同步一致性,支持全量和增量同步,处理并发冲突(利用乐观锁机制),并进行数据校验。遇到故障能自动恢复和重试,保证不间断同步。同时,提供监控和日志功能,便于识别和解决问题,确保数据完整性。
11 0
|
4月前
|
NoSQL Cloud Native Redis
【性能优化下】组织结构同步优化二,全量同步/增量同步,断点续传实现方式
【性能优化下】组织结构同步优化二,全量同步/增量同步,断点续传实现方式
|
11月前
|
分布式数据库 数据库
复制延迟案例(1)-最终一致性
该案例违反因果律。 想象先生和夫人之间的对话: Mr Mrs,你能看到多远未来? Mrs 通常约10s,Mr.
68 0
|
11月前
|
算法 开发工具 git
多主复制下处理写冲突(3)-收敛至一致的状态及自定义冲突解决逻辑
主从复制模型的数据更新符合顺序性原则:若同一字段有多个更新,则最后一个写操作决定该字段的终值。
83 0
|
11月前
|
CDN
多主复制下处理写冲突(1)-同步与异步冲突检测及避免冲突
多主复制的最大问题:可能发生写冲突,这是必须要解决的。
85 0
|
11月前
|
关系型数据库 MySQL 数据库
多主复制下处理写冲突(4)-多主复制拓扑
复制的拓扑结构描述了写请求从一个节点传播到另一个节点的通信路径。若有两个主节点,如图-7,只有一个合理拓扑结构:M1必须把他所有的写同步到M2,反之亦然。当有两个以上M,各种不同拓扑都可能的。如图-8说明了一些例子。
88 0
多主复制下处理写冲突(4)-多主复制拓扑
|
11月前
|
存储 数据库
数据复制系统设计(2)-同步复制与异步复制
复制的重要可选项: 同步复制,synchronously 异步复制,asynchronously
126 0
|
算法 Java Nacos
Raft采用日志复制形式同步数据|学习笔记
快速学习Raft采用日志复制形式同步数据
171 0
Raft采用日志复制形式同步数据|学习笔记
|
存储 算法 索引
如何实现文件增量同步——算法
问题: 如何增量同步文件,例如一个文本文件有10M,分别存放在A,B两个地方,现在两个文件是完全一样的,但是我马上要在A上对这个文件进行修改,B如何实现自动和A上的文件保持一致,并且网络的传输量最少。
1360 0
|
消息中间件 监控 对象存储
极速同步如何保证反向同步数据一致性
背景 文件网关在一个事务中将客户户端数据写入缓存盘返回,然后以异步的方式在后台线程中上传到OSS,如果存在多个网关共享同时写入一个文件,对象的完整性是由OSS语义来保证的,网关始终能够保证正向同步的数据一致性。
1221 0
极速同步如何保证反向同步数据一致性