MySQL两地三中心方案初步设计

MySQL两地三中心方案初步设计这是学习笔记的第2057篇文章今天梳理了下两地三中心的一些方案设计,算是抛砖引玉吧。整体内容会按照如下的方式来进行设计:首先说下方案的背景,我参考了一些资料(参见…

大家好,又见面了,我是你们的朋友全栈君。

这是学习笔记的第 2057 篇文章


  今天梳理了下两地三中心的一些方案设计,算是抛砖引玉吧。

整体内容会按照如下的方式来进行设计:

640?wx_fmt=png

首先说下方案的背景,我参考了一些资料(参见附件)。

方案背景

随着互联网业务快速发展,多IDC的业务支撑能力和要求也逐步提升,行业内的“两地三中心”方案较为流行。

其中两地是指同城、异地;三中心是指生产中心、同城容灾中心、异地容灾中心。

在早期,比较典型的是国内外银行多采用“两地三中心”建设方案。这种模式下,多个数据中心是主备关系,即存在主次,业务部署优先级存在差别,针对灾难的响应与切换周期非常长,RTO与RPO目标无法实现业务零中断,资源利用率低下,投资回报无法达到预期。两地三中心本质上是一种通过简单资源堆砌提高可用性的模式,对高可用的提高、业务连续性的保证仍然只是量变,业务连续性及容灾备份一直没有实质性的跨越。

目前,以银行为代表的、包括政府、公共交通、能源电力等诸多行业用户,开始将关注点转向“分布式多活数据中心”

通过双活的方案,具有两类特点。一是多IDC中心之间地位均等,在正常模式下协同工作,并行的为业务访问提供服务,实现了对资源的充分利用,避免一个或两个备份中心处于闲置状态,造成资源与投资浪费,通过资源整合,多活数据中心的服务能力往往双倍甚至数倍于主备数据中心模式;二是在一个数据中心发生故障或灾难的情况下,其他数据中心可以正常运行并对关键业务或全部业务实现接管,达到互为备份的效果,实现用户的“故障无感知”。

结合公司目前的业务运营情况,IDC机房主要在xxxx,xxx,同时在xxxx区域部署有一些IDC机房,其中数据中心主要以xxx为主,所以在两地三中心方案中,同城双活较为符合发展的趋势。

而两地三中心方案的设计,不光需要数据库层基于分布式进行改造,同时在业务层,系统层,网络层都需要相关的方案适配。

640?wx_fmt=png

目标和计划:

ü 两地三中心的设计原则为同城双活,异地容灾,其中同城暂定为HB30,HB21,异地容灾暂定为华中或华东的IDC节点

ü 改造设计需要和业务端进行密切配合,从业务场景出发选择合适的方案

ü 考虑跨机房的支持,需要引入consul方案,实现service_name的高可用管理

ü 同城双活的数据要求为最终一致性,异地容灾暂不对业务开放,在30分钟内可以快速恢复业务

ü 可以设定短期目标和长期目标,短期目标可以充分借助开源红利和业务场景进行落地,在落地过程中不断的迭代改进;长期目标可以选择更为通用,技术挑战较大,业务效果好的方案(如异地多活)。 

ü 为了确保方案的有效,需要定期进行演练

方案简介

两地三中心方案中,基于设定的短期目标可以明确同城双活和异地容灾的方案组合。

则设计重点为同城双活,即在同城的数据中心之间,一般通过高速光纤相连,在网络带宽有保障的前提下,网络延迟一般在可接受范围内,两个机房之间可以认为在同一个局域网内。

在设计上可以和应用层结合起来,有两种部署模式:分为应用层双活和数据库双活,应用层双活和数据库单活。

1)

.应用层双活和数据库单活方案:

应用层双活,数据库单活:两个机房的应用程序同时对外提供服务,但是只有一个机房的数据库提供读写,另外一个机房的应用程序需要跨机房访问数据库,数据库之间单向复制。该模式在网络延迟相对低的同城环境下表现良好,但是如果距离超过100 公里,机房之间的网络延迟就会超过2ms(或者更高),此时对于跨机房访问的数据库请求,性能有较大影响。

针对同城网络延迟低,可以看作是同一个局域网的特点,对于应用双活+数据库单活的方案,应用跨机房访问数据库,一旦某个机房故障,则将另外一个机房的应用访问请求切换到本机房的数据库,从而实现同城任何一个数据中心出现故障,都不会影响到整体业务的运行。

由于同城之间网络条件相对较好,MySQL 数据库原生的复制模式能够满足大部分业务场景,MySQL 5.7 推出的并行复制可以有效解决容灾机房日志回放慢的问题,在5.7.17推出的MGR/InnoDB Cluster则可以实现数据的强一致需求。

方案一:MGR集群多活架构

整个架构是基于分布式方案来设计,节点通信基于协议Paxos,MGR作为InnoDB Cluster的核心组件,目前支持单主模式和多主模式,本方案优先采用单主模式,节点数至少2-9个节点。

640?wx_fmt=png

基于MGR的多活的设计方案如下,在数据库层通过优先在本机房的实例节点设置权重,优先切换到同机房,在同机房出现故障的情况下,切换到同城异机房。

640?wx_fmt=png

以上方案的实施成本较低,对业务的侵入较少,适用于跨机房容灾的初级阶段的用户。

2) 应用层双活,数据库双活方案

应用层双活和数据库双活:两个机房的应用程序同时对外提供服务,两个机房的数据库也同时提供读写,每个机房的应用程序读写同一个机房内的数据库,两个数据库之间双向复制,通过一致性协议解决双向写冲突问题,该模式理论上实现了数据库多点写入,但是在实际跨机房场景中,尤其是在写冲突密集的业务场景下,性能下降非常大,不适用于跨机房的OLTP 系统。

而对于应用双活+数据库多活的方案,需要重点考虑数据延迟和数据同步的问题。首先需要在业务上做隔离,数据目标为最终一致性,目前存在如下的五类方案。

方案一:MGR集群多活架构

可以基于MGR的多活特性,数据的写入可以在多个节点之间进行复制,实现数据强一致性需求,并且在节点间通信出现延迟的情况下,会自动实现服务降级。

对于此类方案,我们可以采用同机房多写,同城异机房只读的方案。

640?wx_fmt=png

方案二:分布式数据同步

基于分布式设计方案,可以引入数据组件syncer和writer,实现机房多活的业务需求,syncer和writer为数据的发布者和消费者,基于分布式协议进行处理。

在处理过程中有三类关键技术:

1)数据的处理基于分布式ID,能够唯一定位数据处理操作,并且该操作具备递增趋势。

2)同步组件的稳定性,同步组件可以理解为一种通用服务,需要考虑不同机房间的数据延迟和数据冲突处理机制,保证同步组件服务的稳定,高效。

3)同步组件的高可用,对于同步组件需要根据业务特点做权重处理,考虑不通IDC的业务情况,并重点考虑同步组件的数据冗余设计,保证发生异常时能够及时恢复数据。

此种方案短期内难以实现,但是长期来看,可以支持机房多活,业务价值更高。

640?wx_fmt=png

方案三:双主模式的多活

对于数据库原生的双主模式,两个节点均可以写入数据,可以实现跨机房的数据复制,延迟较低,在业务层需要做隔离,在故障发生时能够快速切换到同机房的Slave节点。

此方案对于两个IDC机房的场景中较为实用,但是机房多活的场景不适合。

640?wx_fmt=png

方案四:业务交叉的双活方案

此种方案是双活技术的变通实现,即存在两类业务A和B,数据存储在database级别(schema层级),分别在不通的IDC节点完成数据写入,比如业务A在IDC1完成写入,业务B在IDC2完成写入,两个节点之间存在跨机房的复制节点,在出现问题时,能够通过域名的方式切换到指定的IDC节点。

此种方案对于业务的依赖性较高,不适合机房多活的场景。

640?wx_fmt=png

方案五:基于NewSQL的改造方案

可以参考行业内的NewSQL开源解决方案,原生支持MySQL协议。 

比如PolarDB,Sequoia,TiDB等。 

欢迎大家抛砖引玉,后续跟进阅读量考虑要不要继续展开。:) 

相关链接:

http://www.info2soft.com/6291.html

http://www.h3c.com/cn/d_201307/790142_30008_0.htm

640?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149183.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Eclipse中Editor does not contain a main type 解决方法

    Eclipse中Editor does not contain a main type 解决方法Eclipse中Editordoesnotcontainamaintype解决方法1、问题再现2、原因当前的源代码(所有的包)没有被添加到buildpath中src目录出现错误3、解决方法…

    2022年6月1日
    44
  • 【肝帝一周总结:全网最全最细】十万字python教程,学不会找我!教到你会为止!!内容超多,建议收藏慢慢看![通俗易懂]

    【肝帝一周总结:全网最全最细】十万字python教程,学不会找我!教到你会为止!!内容超多,建议收藏慢慢看![通俗易懂]文章目录前言一定要看python入门python缩进Python注释Python变量1.定义理解2.变量名命名3.分配多个值4.输出变量5.全局变量前言一定要看python能干什么?有什么用?好处在哪?不要我讲了,这不是我在博客该讲的,言简意赅就是:通俗易懂,上手快,实用强。我会根据自己个人理解以及国外官网翻译为中文对大家进行讲解。完整源码我也会在最下面带上地址。内容过多,我不会全部演示,你完全可以复制粘贴到自己的pycharm上运行即可。不管是国内的菜鸟教程还是我在这里的翻译,至少你跟

    2022年5月27日
    32
  • linux线程同步有几种方法_shell多线程执行命令

    linux线程同步有几种方法_shell多线程执行命令Linux中的线程同步机制(一)–Futex引子在编译2.6内核的时候,你会在编译选项中看到[*]Enablefutexsupport这一项,上网查,有的资料会告诉你”不选这个内核不一定能正确的运行使用glibc的程序”,那futex是什么?和glibc又有什么关系呢?1.什么是FutexFutex是FastUserspacemuTexes的缩写

    2022年9月17日
    3
  • 树的叶子结点与完全二叉树结点计算方法[通俗易懂]

    树的叶子结点与完全二叉树结点计算方法[通俗易懂]一:完全二叉树中结点问题分析:设叶子节点个数为n0,度为1的节点个数为n1,度为2的节点个数为n2侧有n0+n1+n2=n(1)对于二叉树有:n0=n2+1(2)由(1)(…

    2022年5月6日
    97
  • 视频识别车牌号(Python)

    视频识别车牌号(Python)提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 使用步骤 总结一、前言视频识别车牌号(有视频和代码)二、使用步骤直接上代码#导入所需要的库fromhyperlprimport*importcv2importnumpyasnp#定义保存图片函数#image:要保存的图片名字#addr;图片地址与相片名字的前部分#num:相片,名字的后缀。int类型defsave_image(i..

    2022年5月20日
    85
  • 动态因果图模型_因果图是谁提出来的

    动态因果图模型_因果图是谁提出来的文章目录1.动态因果图模型1.1引言1.1.1信度网的应用与不足1.1.2因果图的优势1.2模型主要思想1.3模型的表达方式1.3.1因果图与故障诊断1.3.2因果图分类1.3.3因果图形式化表示1.3.4因果图的正规化1.4因果树1.4.1微因果树1.4.2因果树与因果图对比2.动态因果图推理2.1待求解问题的数学形式2.2割集2.2.1一阶割集2.2.2最终割集2.3因果图编译2.3.1逻辑解环2.3.2求最终割集式2.3.3求不交化割集2.4因果图计算简化2

    2022年8月14日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号