【MySQL】数据库机房架构与跨城容灾详解(实战篇)(MySQL专栏启动)

【MySQL】数据库机房架构与跨城容灾详解(实战篇)(MySQL专栏启动)

📫作者简介: 小明java问道之路,专注于研究 Java/ Liunx内核/ C++及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。

📫 热衷分享,喜欢原创~ 关注我会给你带来一些不一样的认知和成长。

🏆 InfoQ签约作者、CSDN专家博主/后端领域优质创作者/内容合伙人、阿里云专家/签约博主、51CTO专家 🏆

🔥如果此文还不错的话,还请👍 关注、点赞、收藏三连支持👍一下博主~
专栏系列(点击解锁)
学习路线(点击解锁)
知识定位
🔥MySQL从入门到精通🔥
MySQL从入门到精通
全面讲解MySQL知识与实战
🔥计算机底层原理🔥
深入理解计算机系统CSAPP
构件计算机体系和计算机思维
Linux内核源码解析
围绕Linux内核讲解计算机底层原理与并发
🔥数据结构与企业题库精讲🔥
数据结构与企业题库精讲
结合工作经验深入浅出,适合各层次,笔试面试算法题精讲
🔥互联网架构分析与实战🔥

企业系统架构分析实践与落地
行业前沿视角,专注于技术架构升级路线、架构实践
互联网企业防资损实践
金融公司的防资损方法论、代码与实践。

本文目录

本文导读

一、容灾级别

二、同城多活——一地三中心

1、同城多活原理

2、一地三机房架构

三、两地三中心

四、三地五中心

五、数据兜底核对(数据轧差)

1、业务数据轧差

2、DBA数据核对

总结

本文导读

我们在实际生产环境中,要求不允许丢失任何数据。也就是说,当MySQL数据库由于各种原因而无法使用时(发生宕机、网络异常等),不仅需要快速恢复业务,还需要确保数据一致性。

本文主要讲解数据库机房架构与跨城容灾,包括主从复制的强一致性、同城多活、两地三中心、三地五中心、数据兜底逻辑等进行逐步讲解。

一、容灾级别

高可用性用于处理各种停机问题,停机时间可分为服务器停机、机房停机,甚至城市停机。

机房级宕机:例如机房光纤被阻断、切断,机房整体停电、主备或双备用电源也不可用;

城市级宕机:一般指整个城市的进出口网络和骨干交换机发生故障(这种故障的概率很小)。

如果我们综合考虑,高可用性将成为一种灾难恢复机制,相应的高可用性体系结构的评估标准将提高。主要有三种方案:机房容灾、同城容灾、多地容灾

机房容灾:机房内的数据库服务器不可用,因此切换到同一机房的数据库服务器,以确保业务连续性;

同城容灾:机房不可用,切换本地机房数据库服务器,确保业务连续性;

多地容灾:单个城市的机房整体不可用。切换到跨城市机房的数据库实例以确保业务连续性。

二、同城多活——一地三中心

1、同城多活原理

前面我们谈到的高可用设计,都只是机房内的容灾。详情请参考《MySQL参数调优与实战详解》、《MySQL复制原理与主备一致性同步工作原理解析》、《MySQL复制与高可用水平扩展架构实战》、《MySQL日志系统以及InnoDB背后的技术

本文主要是同城和跨城的容灾设计,事实上,同城双服务器(同城双活)热备系统与上述文章中双服务器热备用系统没有本质区别,但物理距离要远得多,同城专用网速仍然很快。

【MySQL】数据库机房架构与跨城容灾详解(实战篇)(MySQL专栏启动)

双机热备份提供灾难恢复能力,双机互备份避免了过度的资源浪费。

这种设计没有考虑到机房网络的抖动,如果机房1和机房2之间的网络抖动,则事务提交需要从机房2中的服务器接收日志,因此事务提交将被挂起。同时机房网络抖动非常普遍,因此同城灾备核心业务应采用多活架构。如下图所示:

【MySQL】数据库机房架构与跨城容灾详解(实战篇)(MySQL专栏启动)

这种架构如果三个机房位于一个城市,则称为” 一地三中心“。如果它们位于两个相邻的城市,则称为”两地三中心”。然而,这种同城/同大区灾难恢复要求机房网络之间的延迟不应超过5ms。

数据的副本存储在三个机房中,这里,MySQL的 rpl_semi_sync_master_wait_for_slave_count 半同步复制参数,如果count设置为1,则只要一台半同步备用计算机接收到日志,就可以提交主服务器上的事务。

这种设计确保了除主机房外,其他机房中的数据至少是一个完整的数据。

这样即使机房1和机房2之间存在网络抖动,因为机房1与机房3之间的网络非常好,因此不会影响主服务器上事务的提交。

如果机房1的出口开关或光纤发生故障,那么可以将故障转移到机房2或机房3,因为至少有一条数据是完整的。

2、一地三机房架构

机房2和机房3中的数据用于确保数据一致性,但是,如果要实现读/写分离或备份,则需要为异步复制引入备用节点。因此,生产环境中整体结构如下:

【MySQL】数据库机房架构与跨城容灾详解(实战篇)(MySQL专栏启动)

从图中可以看出,我们添加了两个异步复制节点来分离业务的读写。此外,我们还引入了一个延迟备用机,用于从机房3中的备用机进行异步复制,以从数据删除错误中恢复。由于机房1中的主服务器向四个从属服务器发送日志,因此网卡可能会成为瓶颈,一般需要万兆网卡。

三、两地三中心

只需在两城三中心,通过不同城市设置三个机房,当主服务器停机时,数据库将切换到跨城市,跨城市之间的网络延迟超过25ms。

【MySQL】数据库机房架构与跨城容灾详解(实战篇)(MySQL专栏启动)

四、三地五中心

跨城灾难恢复一般设计为”三地五中心”架构,如下图所示:

【MySQL】数据库机房架构与跨城容灾详解(实战篇)(MySQL专栏启动)

如上图所示,机房1和机房4位于城市1;机房2和机房5位于城市2;机房3位于3号城市,三个城市之间的距离超过200公里,一般允许延迟超过25毫秒。由于有五个机房,ACK设置为2,以确保至少一条数据在两个机房中具有数据。这样,当城市级故障发生时,城市2或城市3中至少有一个完整的数据。

同时,跨城市灾难恢复通常基于同城灾难恢复架构,每个中心都是多活中心。

五、数据兜底核对(数据轧差)

1、业务数据轧差

除了高可用性的灾难恢复架构设计之外,我们还需要做一层底层服务来判断数据的一致性。这里引入数据检查来解决,数据在业务逻辑上是一致的,该担保业务是正确的。

一般使用的方式就是 业务团队 进行异步对账。

例如:1、订单数据与清结算数据进行数据对平(一般为支付金额、优惠金额,结算金额等等);2、扣减库存的数据与下单数据进行数据对平(库存消耗是否等于订单明细);3、发券数据是否超过使用的优惠金额;4、当日正向交易金额与反向(退款)交易金额对比;5、待发货、已发货、已收货是否等于交易总数,等等……

2、DBA数据核对

主服务器和从服务器之间的数据是一致的,确保了从属服务器的数据是安全和可访问的。

一般由 数据库团队(DBA) 负责。

通过主从验证服务以确保主从数据的一致性,此检查不依赖于副本,但也是逻辑检查。检查最近一段时间内主服务器和从服务器上更改的记录,以从逻辑上验证它们是否一致。

通过表 last_modify_date 记录每个记录的最后修改时间。通过根据此条件进行筛选,找到最近更新的记录,然后比较每个记录。同时扫描最新的二进制日志,过滤出最近更新的表和主键,然后检查数据。

总结

我们在实际生产环境中,要求不允许丢失任何数据。也就是说,当MySQL数据库由于各种原因而无法使用时(发生宕机、网络异常等),不仅需要快速恢复业务,还需要确保数据一致性。

前面我们谈到的高可用设计,都只是机房内的容灾。详情请参考《MySQL参数调优与实战详解》、《MySQL复制原理与主备一致性同步工作原理解析》、《MySQL复制与高可用水平扩展架构实战》、《MySQL日志系统以及InnoDB背后的技术》。

本文主要讲解数据库机房架构与跨城容灾,包括主从复制的强一致性、同城多活、两地三中心、三地五中心、数据兜底逻辑等进行逐步讲解。

Original: https://blog.csdn.net/FMC_WBL/article/details/128106562
Author: 小明java问道之路
Title: 【MySQL】数据库机房架构与跨城容灾详解(实战篇)(MySQL专栏启动)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/760599/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球