基于 MySQL 多通道主主复制的机房容灾方案

news2024/9/22 1:23:56

文章中介绍了多种 MySQL 高可用技术,并介绍了根据自身需求选择多通道主主复制技术的过程和注意事项。

作者:徐良,现任中国移动智慧家庭运营中心数据库高级经理,多年数据库运维优化经验,历任华为、一线互联网公司高级 DBA。目前主要负责中移智家基于规模的价值运营场景下数据库稳定性、容灾优化、异地多活等相关工作。

爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

本文约 2800 字,预计阅读需要 7 分钟。

背景介绍

在云网融合大数据时代,数据已经成为重要的生产要素。特别是棱镜门、永恒之蓝、汶川大地震这类造成大规模数据丢失和泄漏的人为或自然灾害事件发生后,中国相继出台了一系列的法律法规,对各组织机构的数据安全保护条件进行限定,如 2016 年颁布的《中华人民共和国网络安全法》、 2021 年全国人民代表大会通过的《数据安全法》等。

当发生灾难时,容灾备份能够确保数据不丢失。要实现应用的容灾,一个关键就是通过数据库的实时同步和复制,在 A 地出现机房故障和问题的时候可以平滑快速的迁移到 B 地。虽然这种远程数据复制和同步存在一定的延迟,但是基本可以满足业务连续性的需求。

容灾的基础概述

容灾的定义

容灾是指当数据中心发生各种未知灾难的时候,确保数据不丢失或少丢失,同时 IT 业务系统能够不间断运行或快速切换恢复。

灾难的衡量指标

评估一个灾备系统可靠性的两个重要指标是 RTO 与 RPO。

RTO (Recovery Time Objective) 恢复时间目标。RTO 是指灾难发生后,从系统宕机导致业务停顿之刻开始,到系统恢复至可以支持业务部门运作,业务恢复运营之时,此两点之间的时间。RTO 可简单地描述为企业能容忍的恢复时间。

RPO (Recovery Point Objective) 恢复点目标。RPO 是指灾难发生后,容灾系统能把数据恢复到灾难发生前时间点的数据,它是衡量企业在灾难发生后会丢失多少生产数据的指标。RPO可简单地描述为企业能容忍的最大数据丢失量。

RTO 针对的是服务时间的丢失,RPO 针对的是数据的丢失,两者是衡量容灾系统的两个主要指标,但它们没有必然的关联性。

容灾的等级分类

2007 年 11 月 1 日开始正式实施的国家标准 (GB/T 20988-2007) 是我国灾难备份与恢复行业的第一个国家标准。

等级说明
第 1 级基本级。备份介质场外存,安全保障、 定期验证。
第 2 级备份场地支持。网络和业务处理系统可在预定时间内调配到备份中心。
第 3 级电子传输和部分设备支持。灾备中心配备部分业务处理和网络设备,具备部分通讯链路。
第 4 级电子传输和完整设备支持。数据定时批量传送,网络/系统始终就绪。温备中心模式。
第 5 级实时数据传输及完整设备支持。采用远程复制技术,实现数据实时复制,网络具备自动或集中切换能力,业务处理系统就绪或运行中。
第 6 级数据零丢失和远程集群支持。数据实时备份,零丢失,系统 /应用远程集群,可自动切换,用户同时接入主备中心。

灾难与 RTO、RPO 的关系

灾难恢复能力等级RTORPO
12 天以上1 天至 7 天
224 小时以后1 天至 7 天
312 小时以上数小时至 1 小时
4数小时至 2 天数小时至 1 小时
5数分钟至 2 天0 至 30 分钟
6数分钟0

两地三中心容灾

两地三中心能够组合本地高可用,同城灾备中心,异地灾备中心,提高可用性,提升业务连续性,重点业务多采用“两地三中心”(即生产数据中心、同城灾备中心、异地灾备中心)建设方案。这种模式下,多个数据中心是主备关系,针对灾难的响应与切换周期根据异常情况灵活处理,能够实现更优的 RTO 与 RPO 整体目标。

MySQL 常见的主从形式

MySQL 本身就自带有主从复制的功能,解决了几个关键的问题:数据一致性、检查点机制、可靠网络传输等,可以帮助我们实现高可用切换和读写分离。

一主一从

一主一从能够提供备库,主库故障后可以进行故障切换,避免数据丢失。

一主多从

一主多从常见的主从架构,使用起来简单有效,不仅可以实现 HA,而且还能读写分离,进而提升集群的并发能力。

多主一从

多主一从可以将多个 MySQL 数据库备份到一台存储性能比较好的服务器上,方便统一分析处理。

双主复制

双主复制,也就是互做主从复制,每个 master 既是 master,又是另外一台服务器的 slave。这样任何一方所做的变更,都会通过复制应用到另外一方的数据库中。同一时刻可以只有一个是主,另外一个是备,实例主动维护进行主从切换的时候无需进行特别的配置,秒级切换方便日常升级维护。

级联复制

级联复制模式下,部分 slave 的数据同步不连接主节点,而是连接从节点。主节点有太多的从节点,就会损耗一部分性能用于 replication ,这个时候可以让 3~5 个从节点连接主节点,其它从节点作为二级或者三级与从节点连接,这样不仅可以缓解主节点的压力,并且对数据一致性没有负面影响。

两地三中心 MySQL 主从复制

MySQL 常见高可用方案优劣

对比目前主流的数据库高可用方案,都有各自的优势和劣势,但在支持异地容灾方面都不够简单易用:

高可用方案优势劣势
主从 + Keepalived部署简单,没有主实例宕机后选主的问题。一主多从在切换之后,其他从实例需要重新配置连接新主。
MHA支持一主多从、主服务崩溃时不会导致数据不一致。SSH 存在安全隐患,官方不在维护。
组复制 MGR无延迟,数据强一致性强依赖网络,只能用在 GTID 模式下,大事务和 DDL 操作有阻塞风险。
MySQL InnoDB Cluster弥补组复制无法提供具有自动化故障转移功能的中间件。组件多,成熟案例少。
Orchestrator支持一主多从,解决了管理节点的单点问题,支持命令行和 Web 界面管理复制。功能复杂,不方便集成进自有系统。

MySQL 主从初始化消息

通过抓取消息和分析代码,发现 MySQL 从库和主库建立同步通道过程中,分别进行网络连接建立、授权,实例唯一性、时钟、字符集、binlog 配置校验等工作。其中实例唯一性校验过程从库会获取主库的 server id。

MySQL binlog 日志结构

MySQL 的主从复制是基于 binlog 文件,而 binlog 文件是由多个 binlog event 构成,binlog event 的整体结构由 head+data+footer 三部分组成。head 包含产生 event 的数据库实例 server id,在主从复制作为区分 event 是否为自己实例生成的重要依据。

之前通过主从初始化消息能够获取主从管道对端主库的 server id,此时和从库从管道内接受的 event 的 server id 进行对比,能够识别该 event 是否是当前对端主库产生的。

两地三中心 MySQL 主从方案 1

两地三中心建设相对容易,日常的演练和数据回流等配置比较繁琐,容易出错。本方案通过机房内建立 MySQL 主主复制,此时主从切换无需繁琐的命令,只需要设置 read_only;同城机房间也是建立主主复制,方便容灾演练回切,无需复杂的配置。同理,与两地三中心 MySQL 也建立主主复制,方便演练和回切。该方案使用原生的 MySQL 复制,成熟度高;未过多引入第三方组件,具备规模化运维潜力。但原生的 MySQL 主从在多条链路存在主主复制时,会出现复制回路问题,导致数据冲突和不一致。

两地三中心 MySQL 主从方案 2

为解决复制回路问题,在主机房边界节点实例上,本方案使用上文中根据对端主库 server id 判断是否和 event 的 server id 相同,对 IDC1 边界 MySQL 复制逻辑进行限制,只同步管道内临近主产生的 binlog 日志,级联主日志丢弃,1 个同步管道只同步单台 master 日志,解决回路问题。其他节点无需开启这个功能。

边界节点 MySQL 复制逻辑代码补丁

本补丁基于社区版 MySQL 5.7.40 升级,修改 sys_vars.cc 文件,增加 replicate_server_mode 配置项(默认为 0),兼容原有复制模式,配置为 1 时主从同步仅同步管道内对端主产生的 binlog event。

修改 log_event.cc 文件的 Log_event::do_shall_skip 函数,判断当前 event 的 server_id 和本通道对端主库 master 的 server_id 不相同时忽略,仅同步对端主库产生的 event,避免多通道主主时数据回路的问题。

总结

该 MySQL 数据同步方案优化了 MySQL 本身的日志同步机制,引入多通道主主复制技术,降低了机房容灾演练和回切时数据同步关系调整带的复杂性;每个通道仅同步临近主库 binlog event,解决了数据回路问题,支撑重点业务两地三中心容灾;无需引入第三方 HA,同步等组件,减少了相关软硬件和网络要求;补丁代码量 100 行以内,仅需对主机房边界节点升级,风险可控。具备规模实例运维场景下成熟,低成本,简单可靠的特点,能够和公司一键切换平台快速集成。未来也具备支撑三地五中心等更高等级容灾要求的能力。但该方案不支持多层级联复制,同时也不支持列、记录级等更精细化灵活控制的能力。

更多技术文章,请访问:https://opensource.actionsky.com/

关于 SQLE

SQLE 是一款全方位的 SQL 质量管理平台,覆盖开发至生产环境的 SQL 审核和管理。支持主流的开源、商业、国产数据库,为开发和运维提供流程自动化能力,提升上线效率,提高数据质量。

SQLE 获取

类型地址
版本库https://github.com/actiontech/sqle
文档https://actiontech.github.io/sqle-docs/
发布信息https://github.com/actiontech/sqle/releases
数据审核插件开发文档https://actiontech.github.io/sqle-docs/docs/dev-manual/plugins/howtouse

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1153164.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Nokogiri和OpenURI库进行HTTP爬虫

目录 一、Nokogiri库 二、OpenURI库 三、结合Nokogiri和OpenURI进行爬虫编程 四、高级爬虫编程 1、并发爬取 2、错误处理和异常处理 3、深度爬取 总结 在当今的数字化时代,网络爬虫已经成为收集和处理大量信息的重要工具。其中,Nokogiri和OpenUR…

softmax的高效CUDA编程和oneflow实现初步解析

本文参考了添加链接描述,其中oneflow实现softmax的CUDA编程源代码参考链接添加链接描述 关于softmax的解读以及CUDA代码实现可以参考本人之前编写的几篇文章添加链接描述,添加链接描述,添加链接描述 下面这个图片是之前本人实现的softmax.cu经过接入python接口,最终和pytor…

Javascript基础-BOM

文章目录 BOM——Browser Object Model定时器--延时函数 JS执行机制具体流程 三个常见对象location对象navigator对象history对象 本地存储介绍sessionStoragesessionStorage 存储复杂数据类型字符串拼接 正则表达式元字符 BOM——Browser Object Model 浏览器对象模型&#x…

【LeetCode:26. 删除有序数组中的重复项 | 双指针】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

怎么从外面远程访问服务器设备?

怎么从外面远程访问服务器设备? “我家里有一台服务器设备,当我在学校时需要远程访问家里的服务器。请问是否可以从外网远程访问家里的服务器设备,有什么方法可以实现吗?” 远程访问服务器设备,一种典型…

20量子比特!芬兰成功研发第二台量子计算机

(图片来源:网络) 近期,芬兰国家技术研究中心(VTT)宣布,已顺利研发芬兰第二台量子计算机,该计算机具有20个超导量子比特,由芬兰国家技术研究中心(VTT&#xf…

java如何获取调用接口的ip?

获取调用者的ip 场景:想知道哪个ip访问的某个接口时,就需要打印出来看看,这时就可以使用这个方法了。 案例: //HttpServletRequest 入参加上,请求对象public ForkResponse queryXXX(RequestBody XXXX xxxx, HttpServletRequest …

Ps:快速选择工具​

对那些有清晰轮廓的对象进行抠图,在 Ps 中传统的方法是钢笔工具和快速选择工具 Quick Selection Tool。其中,快速选择工具以其使用简单快捷而受到众人喜爱。 快捷键:W ◆ ◆ ◆ 常用操作方法与技巧 1、将快速选择工具的笔刷从目标对象的内部…

用前端框架Bootstrap和Django实现用户注册页面

01-新建一个名为“mall_backend”的Project 命令如下: CD E:\Python_project\P_001\myshop-test E: django-admin startproject mall_backend02-新建应用并注册应用 执行下面条命令依次创建需要的应用: CD E:\Python_project\P_001\myshop-test\mall…

Nacos常规问题汇总

一、Nacos常规问题 Nacos是什么 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。详情可以参考Nacos官网介绍。 Nacos如何支持多环境 在日常使用中常常需要不同的环…

“破解我!“---160个CrackMe练习002-Afkayas.1.Exe

文章目录 前言题目分析程序分析Keygen 前言 系列之002,记录学习。 题目分析 一道一星的题目 惯例查壳。 32-bit的文件,用的是 VB 写的。 关于Visual Basic: Visual Basic(VB)是由微软公司开发的包含环境的事件驱动…

酒店预订订房小程序源码系统 带完整搭建教程

酒店预订订房小程序源码系统是一种基于互联网技术的线上预订平台,旨在为用户提供方便快捷的酒店预订服务。该系统通常包括前端用户界面、后端服务器和数据库三个部分,其中前端界面主要展示酒店信息、订房需求信息、订单信息等,后端服务器负责…

国风AI绘画平台Trik;「一个女孩的一生」走红;音视频转文字的精准处理指南;神经网络原理动画 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🉑 智谱AI推出第三代基座大模型ChatGLM3,瞄向了 GPT-4V https://github.com/THUDM/ChatGLM3 10月27日,智谱AI宣布…

EVM6678L 开发教程: 烧写 IBL(Intermediate Bootloader)

目录 EVM6678L 开发教程: 烧写 IBL烧写出厂IBL修改IBL引导格式 EVM6678L 开发教程: 烧写 IBL 参考: C:\ti\mcsdk_2_01_02_06\tools\boot_loader\ibl\doc\README.txtC:\ti\mcsdk_2_01_02_06\tools\boot_loader\ibl\doc\evmc6678-instructions.txtC:\ti\mcsdk_2_01_02_06\tools…

js 异常数组 [空白,Array(10),空白,Array(10),空白]

异常数组 [空白,Array(10),空白,Array(10),空白] 的解决方案

Elasticsearch(二)---搭建

搭建es 不允许root用于运行 创建esuser用户: useradd esuser 设置密码 passwd esuser 让esuser拥有sudo的权限,需要修改/etc/sudoers文件 需要先给/etc/sudoers添加写的权限 [rootnode1 ~]# vim /etc/sudoers 改完之后将写权限删除 三台服务器上操…

halcon canny 和opencv c++ canny 实现对比

Opencv和C实现canny边缘检测_opencv边缘增强-CSDN博客 一、canny实现步骤 1、图像必须是单通道的,也就是说必须是灰度图像 2、图像进行高斯滤波,去掉噪点 3、sobel 算子过程的实现,计算x y方向 、梯度(用不到,但是…

如何选购适合自己的内衣洗衣机?性价比高内衣洗衣机推荐

内衣洗衣机,在几年前或许是个新事物,但近两年却是成为了很普遍的家电产品,由于近几年内衣洗衣机需求量的增加,我们在商场的电子产品区都能见到它,就像普通的家庭洗衣机那样,直接摆在展台上销售,…

分布式:一文掌握分布式ID生成方案

目录 背景1、UUID2、数据库自增ID2.1、主键表2.2、ID自增步长设置 3、号段模式4、Redis INCR5、雪花算法6、美团(Leaf)7、百度(Uidgenerator)8、滴滴(TinyID)总结比较 背景 在复杂的分布式系统中,往往需要对大量的数据进行唯一标识,比如在对一个订单表进…

从零开始的目标检测和关键点检测(一):用labelme标注数据集

从零开始的目标检测和关键点检测(一):用labelme标注数据集 1、可视化标注结果2、划分数据集3、Lableme2COCO,将json文件转换为MS COCO格式 前言:前段时间用到了mmlab的mmdetction和mmpose,因此以一个小的数…