数据库高可用及无损扩容(数据库高可用性包括哪些)
nanshan 2025-07-01 22:14 4 浏览 0 评论
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 等,后面我们一一拆解。
实现高可用,意味着后续的迁移、扩容、业务调整,都应该是可以平滑的,对业务无感的。
转载链接:
https://www.cnblogs.com/wzh2010/p/15886867.html
相关推荐
- 在 Ubuntu 上安装 Zabbix(以 Zabbix 6.4 LTS 版本为例)
-
Zabbix是一个流行的开源监控解决方案,能够监控各种网络参数和服务器健康状态。一、环境准备系统要求Ubuntu20.04/22.04LTS至少2GBRAM(生产环境建议4GB+)至少1...
- 如何在 Ubuntu 24.04 服务器上安装 Apache Solr
-
ApacheSolr是一个免费、开源的搜索平台,广泛应用于实时索引。其强大的可扩展性和容错能力使其在高流量互联网场景下表现优异。Solr基于Java开发,提供了分布式索引、复制、负载均衡及自...
- 如何在 Ubuntu 24.04 LTS 或 22.04/20.04 上安装 Apache Maven
-
Maven是由Apache托管的开源工具,用于管理Java项目。它包含一个项目对象模型(POM):一个配置文件(XML),其中包含项目的基本信息,包括配置、项目依赖项等。Maven可以处理...
- Cursor的终极对手——Trae Pro最新系统提示词
-
前段时间,字节的AI编程神器Trae国际版,终于甩出了Pro订阅计划!很多对它又爱又恨的小伙伴,直呼:终于等到你。爱它,是因为Trae长期免费+体验真香;恨它?还不是那该死的排队等待,...
- AI系统提示词:V0(ai代码提示)
-
以下是对V0系统提示词(SystemPrompt)的分部分讲解与解读,帮助你理解其核心内容和设计意图。V0系统提示词##CoreIdentity-Youarev0,Vercel&...
- 8岁男童失踪第13天,搜救人员发现可疑水库,更恶心的事情发生了
-
Lookingatyourrequest,Ineedtorewritethearticleaboutthe8-year-oldmissingboywhilemaking...
- docker常用指令及安装rabbitMQ(docker安装zabbix)
-
一、docker常用指令启动docker:systemctlstartdocker停止docker:systemctlstopdocker重启docker:systemctlrestart...
- 三步教你用Elasticsearch+PyMuPDF实现PDF大文件秒搜!
-
面对100页以上的大型PDF文件时,阅读和搜索往往效率低下。传统关系型数据库在处理此类数据时容易遇到性能瓶颈,而Elasticsearch凭借其强大的全文检索和分布式架构,成为理想解决方案。通过...
- ElasticSearch中文分词插件(IK)安装
-
坚持原创,共同进步!请关注我,后续分享更精彩!!!前言ElasticSearch默认的分词插件对中文支持很不友好。一段话按规则会以每个中文字符来拆解,再分别建立倒排索引。如"中华人民共和国国歌...
- SpringBoot使用ElasticSearch做文档对象的持久化存储?
-
ElasticSearch是一个基于Lucene的开源搜索引擎,广泛应用于日志分析、全文搜索、复杂查询等领域,在有些场景中使用ElasticSearch进行文档对象的持久化存储是一个很不错的选择...
- Elasticsearch数据迁移方案(elasticsearch copyto)
-
前言最近小编要去给客户部署一套系统涉及到了Mysql和ES数据的迁移,下面就给大家分享一下ES数据迁移的几套方案,根据具体的使用场景来选择不同的迁移方案能使你事倍功半,话多说下面就一一介绍。Elast...
- Rancher部署单体ElasticSearch(rancher2.5部署)
-
Rancher是k8s图形管理界面,之前曾有写文章介绍如何安装。ElasticSearch是热门搜索引擎,很多地方都有用到,常规安装部署略显繁琐,本文介绍在k8s下用rancher简易部署ES。1.在...
- Elasticsearch在Java项目的搜索实践:从零开始构建高效搜索系统
-
Elasticsearch在Java项目中的搜索实践:从零开始构建高效搜索系统在现代的Java项目中,数据量激增,传统的数据库查询方式已经无法满足快速检索的需求。这时,Elasticsearch(E...
- 小白入门-Kibana安装(kibana安装配置)
-
一Kibana基础1.1介绍Kibana是一款免费且开放的前端应用程序,其基础是ElasticStack,可以为Elasticsearch中索引的数据提供搜索和数据可视化功能。Kiban...
- Docker上使用Elasticsearch,Logstash,Kibana
-
在对一个项目做性能测试时我需要处理我们web服务器的访问日志来分析当前用户的访问情况。因此,我想这是试用ELK的一个好机会。ELK栈首先要注意的是使用它是非常简单的。从决定使用ELK到在本机上搭一个...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 在 Ubuntu 上安装 Zabbix(以 Zabbix 6.4 LTS 版本为例)
- 如何在 Ubuntu 24.04 服务器上安装 Apache Solr
- 如何在 Ubuntu 24.04 LTS 或 22.04/20.04 上安装 Apache Maven
- Cursor的终极对手——Trae Pro最新系统提示词
- AI系统提示词:V0(ai代码提示)
- 8岁男童失踪第13天,搜救人员发现可疑水库,更恶心的事情发生了
- docker常用指令及安装rabbitMQ(docker安装zabbix)
- 三步教你用Elasticsearch+PyMuPDF实现PDF大文件秒搜!
- ElasticSearch中文分词插件(IK)安装
- SpringBoot使用ElasticSearch做文档对象的持久化存储?
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)