数据库系列:数据库高可用及无损扩容

news2024/9/24 13:18:18

1 背景

在大型互联网场景中,数据库的高可用性显得尤为重要,为了保证稳定性,一般需要采用强化的架构模式,以保证数据层能够提供持续有效的稳定支撑。

2 高可用架构的基本演进过程

2.1 基本的数据库架构

每个服务对应一个存储服务实例(基本是数据库单实例模式),使用 IP+Port 进行连接和调用,这就是大家常见的数据库直连。


用户计算服务(svc) 配置IP+端口指向数据库实例地址,进行访问和操作。

2.1 Scale Up + Scale Out 模式

互联网场景下,理论上访问量和数据量都是不断膨胀的过程。随着数据量的增大,数据库一般要进行纵向(Scale Up)和 横向(Scale Out) 的拆分,
分库分表之后可能会将数据拆分到不同的数据库实例,甚至不同的IDC上,这样可以 降低数据量,提高执行性能的目的。详细参考笔者这篇《MySQL全面瓦解28:分库分表》。

如上图,库表拆分之后,使用不同的条件可以路由到不同的IP,这样来实现业务上的数据隔离,这种条件可以是用户的角色,业务的类别,
甚至直接对数据取模或者hash,只要确保链接到对应的数据库上即可。这边举个例子:(value % 2 == 0) = condition1,(value % 2 == 1) = condition2

2.3 主从或主主 + Keepalived 架构

以上只是解决了数据库大容量的问题,将数据库的风险降低,性能提升。并没有实质的解决可用性问题,如果其中一个数据库实例出现故障,
依然会造成大面积的不可用。
在互联网架构中,比较常见的一种方式就是,使用 双主或者主从同步 + keepalived + vip的模式来保证存储层的好可用性:


如上图,两个库(主主或者主从)使用相同的虚拟IP,当主库挂掉的时候,虚ip自动转移到另一个主库(或者转移到从库上,并将从库切为主库),这个切换过程对业务应该是透明无感的,也不会造成使用上的异常,以此保证数据库的高可用性。

2.4 分片分库模式下的高可用性

可以继续从2.3演化出分片分库模式下的高可用架构,如下:


如果数据库继续膨胀,流量继续扩展,还可以继续扩容,找到最恰当的分片模式。

2.5 其他常见的高可用模式

2.5.1 MHA

MHA(Master High Avaliable) 是一款 MySQL 开源高可用程序,MHA 在监测到主实例无响应后,会自动将同步最靠前(即数据偏移量最少)的 Slave 提升为 Master,然后其他所有的 Slave 重新指向新 Master。架构模式如下:

2.5.2 PXC

PXC(Percona XtraDB Cluster)是一种开源的 MySQL 高可用解决方案。它将 Percona Server、Percona XtraBackup 与 Galera 库集成在一起,以实现多主复制的 MySQL 集群。
缺点是只支持InnoDB引擎模式,且多主数据同步必然会有性能损耗、同步延迟和数据差异风险。
另外,这种多主同步模式具有典型的木桶效应,系统的吞吐被最差的节点左右。
架构如下:

2.5.3 MGR/InnoDB Cluster

MySQL 5.7 退出了高可用的的模式 MGR(MySQL Group Replication),他具备了多节点数据写入和强一致性的特点,这一点跟与 PXC 相似。同时采用Group Communication System(GCS协议)进行数据同步来保证消息的原子性。
MGC需要使用到InnoDB Cluster模式,才能实现真正的高可用,高可用架构图参考下面:


备注:图片来自官网,就不再画了。

2.6 高可用模式下的平滑扩容

互联网大流量场景下我们经常会发现存储层容易出现瓶颈,这个时候就需要扩容。
相对于停服扩容来说,无损、透明、平滑的数据库扩容才是我们实际追求的目标。


步骤如下:

  • 增加数据库分片3,进行数据架构初始化和数据同步
  • 增加数据库主从配置,将2个库的数据库配置,改为3个库的数据库配置,并注意旧库与新库的映射关系。
  • 服务层 reload(重新加载)配置,完成扩容工作。
  • 删除分片之后的冗余数据,必要的话进行数据库缩容。
  • 服务层根据条件映射到不同的数据库实例中。

3 总结

数据库存储层实现可用性有很多种办法。除了最基本的 主从/主主 + Keepalived 架构 之外,还有 MHA 、 PXC 、MGR/InnoDB Cluster 等,后面我们一一拆解。
实现高可用,意味着后续的迁移、扩容、业务调整,都应该是可以平滑的,对业务无感的。

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

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

相关文章

FinancesOnline 2022/2023 10大IT趋势预测

在过去几十年的时间里,全世界的计算能力达到了万亿倍的增长。太空、军事和工业研究促成了范式的转变。与此同时,新冠肺炎大流行等不可预见的事件迫使人们去迎接新的技术,采用与以往不同的技术路径,这导致了IT趋势越来越难以跟上。…

阿里云轻量服务器--Docker--Rabbitmq安装

1 Rabbitmq 介绍: RabbitMQ 是一个开源的消息代理软件,通常用于构建分布式系统,支持多种消息传递协议,并支持多种编程语言。RabbitMQ 基于 AMQP (Advanced Message Queuing Protocol) 协议开发,是一个高可用、高可靠、…

3.完成ODS层数据采集操作

将原始数据导入mysql 1 选中mysql 运行脚本 2 验证结果 数据存储格式和压缩方案 存储格式 分类 1.行式存储(textFile) 缺点:可读性较好 执行 select * 效率比较高 缺点:耗费磁盘资源 执行 select 字段 效率比较低 2.列式存储(orc) 优点:节省磁盘空间. 执行 select 字段…

配电网可靠性评估(4)—(顶刊复现)基于线性规划的配电网可靠性评估

之前的博客中介绍了配电网可靠性评估的三种方法、分别是解析法中的最小路法,以及序贯蒙特卡罗模拟法及非序贯蒙特卡洛模拟法,顺带提到了含有分布式电源的配电网可靠性评估方法。 配电网可靠性评估(一)最小路法和非序贯蒙特卡洛模…

Elai.io:AI视频生成平台

【产品介绍】 Elai.io是一个基于人工智能的AI视频生成平台,可以让你只用文本就能制作出有真人主持的专业视频。无论你是想做教育、营销、企业沟通或者其他类型的视频内容,Elai.io都可以帮你节省时间和成本,提高效率和质量。Elai.io的技术结合…

618数码产品攻略,列举几款2023年618必入的数码产品

​一年一度大型促销的618节日转眼间第一波就已经过去了,在这种各类优惠活动接踵而至的日子里,很多人都是准备着更换新东西的时刻,不过也会存在着一部分人,想要入手数码好物,但又不知道该如何去挑选,毕竟现在…

2.2 事件驱动的reactor网络设计模型

在网络io、io多路复用select/poll/epoll、基于事件驱动的reactor中介绍了多种网络I/O方式,特别是事件驱动的reactor。其开发效率比直接使用IO多路复用要高,它一般是单线程的,设计目标是希望一个线程使用CPU的全部资源。 并且,相对…

Rxjava2系列:RXjava2.1.7源码下载

找到github项目地址:https://github.com/ReactiveX/RxJava/ 找到右侧的release,点击打开。 搜索2.1.7 (2.1.7是这篇文章:RxJava 是如何实现线程切换的(上)的源码版本) 找到Assert,下载 解…

计算机专业应届毕业生有没有必要参加IT培训?

大学学习的计算机专业,毕业还需要进行IT培训吗?我想,这个问题也困扰着你们吧。那今天小课就带着你们分析一下,计算机专业毕业的应届生到底有没有必要进行培训。 了解企业的技术需求 考虑培训不培训,首先要了解一下现在…

Vue.js 中的数据双向绑定是如何实现的?

Vue.js 中的数据双向绑定是如何实现的? Vue.js 是一款流行的前端框架,它的核心功能之一是数据双向绑定。本文将介绍 Vue.js 中数据双向绑定的实现原理,并附上相关代码实例。 什么是数据双向绑定? 在传统的前端开发中&#xff0c…

Matlab论文插图绘制模板第98期—大小不同多子图(Subplot)

上一篇文章分享了Matlab多子图的绘制模板: 但假如子图的大小不是相同的,该怎么操作呢? 本期就来分享一下大小不同多子图的绘制模板。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中,…

java SSM 房屋管理系统统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM 房屋管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和 数据库,系统主要采用B…

Linux - 第22节 - 网络基础(其他重要协议或技术)

1.DNS协议 • DNS(Domain Name System,域名系统)协议,是一个用来将域名转化为IP地址的应用层协议。 • DNS协议属于应用层协议,由UDP实现其域名解析功能。 1.1.DNS背景 TCP/IP中通过IP地址和端口号的方式,来…

地震勘探基础(七)之地震静校正

地震静校正 首先,为什么要进行地震静校正处理呢?主要的原因是地震勘探中激发和接收的观测面不完全是水平的。尤其是在山区、沙漠和黄土原地区。而且近地表还存在风化层或低、降速带低、降速带的厚度和速度会发生变化,这就导致反射波的传播时…

HTML5 FormData对象

利用FormData对象,你可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单". 创建一个FormData对象 你可以先创建一个空的FormData对象,然后使用append()方法向该对象里添加字段,如下: var oMyForm new FormData();oMyForm.append(&…

Web服务器的工作原理

Web服务器的工作原理 什么是web服务器、应用服务器和web容器?什么是Servlet?他们有什么作用?什么是ServletContext?它由谁创建?ServletRequest和ServletResponse从哪里进入生命周期?如何管理Session&#x…

界面开发框架Qt新手入门教程:Dir视图使用实例

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 点击获取Qt Widget组…

容器(第一篇)docker安装、基础操作命令

docker是什么? docker是一个go语言开发的应用容器引擎。 docker的作用? ①运行容器里的应用; ②docker是用来管理容器和镜像的一种工具。 容器 与 虚拟机 的区别? 容器 虚拟机所有容器共享宿主机…

AIGC大模型之——以文生图介绍

一、什么是以文生图? 以文生图是AIGC ( AI Generated Content )框架中的一个关键技术,通过文字描述,将文字转化为图像并展示出来。以文生图具有白动化程度高、精度高、可扩展性强、可定制化等优势,具有广泛的应用前景&…

PyTorch 提示和技巧:从张量到神经网络

张量和梯度 我们将深入探讨使用 PyTorch 构建自己的神经网络必须了解的 2 个基本概念:张量和梯度。 张量 张量是 PyTorch 中的中央数据单元。它们是类似于数组的数据结构,在功能和属性方面与 Numpy 数组非常相似。它们之间最重要的区别是 PyTorch 张量…