Code前端首页关于Code前端联系我们

mysql分布式数据库组件,数据库分布式架构

terry 2年前 (2023-09-30) 阅读数 40 #Mysql
文章标签 Mysql

本文内容列表:

  • 1.如何在mysql中实现分布式数据库
  • 2、五种常见的MySQL高可用解决方案(最全)
  • 3、分布式系统为什么选择mysql数据库?

mysql如何实现分布式数据库

应该是通过ndb的集群来实现的。你只需要在网上查找有关mysql cluster的信息就可以了解。可以到mysql官网下载,比如《mysql cluster维护手册.docx》等

五种常见的MySQL高可用解决方案(最全)

1。概述

在考虑MySQL数据库的高可用架构时,主要考虑以下几个方面:

如果数据库宕机或者意外中断,可以尽快恢复数据库的可用性。尽可能减少停机时间,确保业务不会因数据库错误而中断。

用于备份、只读副本等功能的非主节点数据应与主节点数据实时或最终一致。

当业务中发生数据库变更时,变更前后的数据库内容要保持一致,这样才不会因为数据缺失或不一致而影响业务。

这里不详细讨论高可用的分类。我们只讨论常用的高可用方案的优缺点以及高可用方案的选择。

2. 高可用性解决方案

2.1.主从或主主半同步复制

使用二节点数据库构建单向或双向半同步复制。在5.7之后的版本中,无损复制、逻辑多线程复制等多项新特性的引入,使得MySQL原生的半同步复制更加可靠。

常见架构如下:

通常与proxy、keepalive等第三方软件配合使用。它可用于监视数据库的运行状况并执行各种管理命令。如果主库出现故障,切换到备库后数据库仍然可以使用。

优点:

架构比较简单,采用原生半同步复制作为数据同步的基础;

双节点,主机宕机后不存在主选问题,可以直接切换;

双节点,资源占用少,易于部署;

缺点:

完全依赖半同步复制。如果半同步复制退化为异步复制,则无法保证数据一致性;

还要额外考虑haproxy和keepalived机制的高可用。

2.2。半同步复制优化

半同步复制机制可靠。如果半同步复制始终处于活动状态,则可以认为数据是一致的。但由于网络波动等客观原因,半同步复制超时,转为异步复制。这种情况下,无法保证数据的一致性。因此,尽可能保证半同步复制可以提高数据的一致性。

该方案同样采用双节点架构,但在原有半同步复制的基础上进行了功能优化,使得半同步复制机制更加可靠。

可供参考的优化方案如下:

2.2.1.双通道复制

半同步复制超时后,复制会断开。重新建立复制时,会同时建立两个通道,其中之一是半同步复制通道,从当前位置开始复制,以确保从机知道当前主机执行的进度。另一个异步复制通道开始追赶从属设备的滞后数据。当异步复制通道赶上半同步复制的开始位置时,半同步复制将恢复。

2.2.2。 Binlog File Server

构建两个半同步复制通道。正常情况下不启用连接文件服务器的半同步通道。当由于网络问题导致主从半同步复制降级时,重新启动文件Server的半同步复制通道。半同步主从复制恢复后,关闭与文件服务器的半同步复制通道。

优点:

双节点,资源占用少,部署方便;

架构简单,选择master没有问题,直接切换即可;

与原生复制相比,优化的半同步复制 可以更好地保证数据的一致性。

缺点:

必须修改核心源码或者使用mysql通信协议。你必须对源代码有一定的了解,并且能够进行一些二次开发。

仍然依赖半同步复制,并没有从根本上解决数据一致性问题。

2.3。高可用架构优化

将双节点数据库扩展为多节点数据库或多节点数据库集群。您可以根据需要选择一主二从、一主多从、多主多从的集群。

由于半同步复制,当收到来自从站的成功响应时,半同步复制被认为是成功的。因此,多从机半同步复制的可靠性优于单从机半同步复制的可靠性。而且,多个节点同时宕机的概率小于单个节点宕机的概率。因此,在某种程度上,可以认为多节点架构比双节点架构具有更好的高可用性。

但是由于数据库数量庞大,需要数据库管理软件来保证数据库的维护。可以选择MMM、MHA或者不同版本的代理等。常见的解决方案如下:

2.3.1。 MHA+多节点集群

MHA Manager 会定期发现集群中的主节点。当master出现故障时,它可以自动将拥有最新数据的slave提升到新的master,然后将所有其他slave重定向到新的master。整个故障转移过程对应用程序有负面影响。完全透明。

MHA 节点运行在每个 MySQL 服务器上。它的主要功能是在过渡期间处理二进制日志,以确保过渡期间最大限度地减少数据丢失。

MHA 还可以扩展到以下多节点集群:

优点:

可以进行故障的自动检测和传输;

具有良好的扩展性,可以根据需要扩展MySQL节点的数量和结构。 ;

相比于两节点MySQL复制,三节点/多节点MySQL不可用的可能性较小

缺点:

需要至少三个节点,比两个节点需要更多的资源;

逻辑比较复杂,出现错误后调试定位问题比较困难;

数据一致性仍然由原生半同步复制保证,仍然存在数据不一致的风险;

网络分区可能会导致脑裂;

2.3.2。 Zookeeper+proxy

Zookeeper采用分布式算法来保证集群数据的一致性。使用zookeeper可以有效保证代理的高可用性,更好地避免网络分区。

优点:

更好的保证整个系统的高可用性,包括proxy和MySQL;

扩展性好,可以扩展到大规模集群;

缺点:

数据一致性仍然依赖原生mysql半同步复制;

随着zk的引入,整个系统的逻辑变得更加复杂;

2.4。共享存储

共享存储实现了数据库服务器和存储设备的解耦。不同数据库之间的数据同步不再依赖MySQL原生的复​​制功能,而是使用磁盘数据同步来保证数据的一致性。

2.4.1。 SAN 共享存储

SAN 的概念是允许存储设备和处理器(服务器)之间建立直接的高速网络连接(相对于 LAN),通过该连接可以集中数据。常用的架构如下:

使用共享存储时,MySQL服务器可以挂载文件系统并正常运行。如果主库宕机,备库可以挂载相同的文件系统,保证主备库使用相同的数据。 。

优点:

只需两个节点,分布简单,切换逻辑简单;

保证数据强一致性;

不会因为MySQL逻辑错误而出现数据不一致的情况;

缺点:

必须考虑共享存储的高可用性;

昂贵;

2.4.2。 DRBD 磁盘复制

DRBD 是一种基于软件、基于网络的块复制存储解决方案,主要用于服务器之间磁盘、分区、逻辑卷等的数据镜像。当用户向本地磁盘写入数据时,数据也会发送到网络上。在另一台主机的磁盘上,可以实时同步本地主机(主节点)和远程主机(备节点)的数据。常用的架构如下:

当本地主机出现问题时,远程主机上仍然保留相同数据的副本,可以继续使用,保证数据安全。

DRBD是Linux内核模块实现的快速级同步复制技术,可以达到与SAN相同的共享存储效果。 ? 对io性能影响较大;

从库不提供读操作;

2.5。分布式协议

分布式协议可以很好的解决数据一致性的问题。比较常见的解决方案如下:

2.5.1。 MySQL cluster

MySQL cluster 是官方的集群分发解决方案。它利用NDB存储引擎实时备份冗余数据,实现数据库的高可用性和数据一致性。 ?复杂,需要使用NDB存储引擎,与常规MySQL引擎有些不同;

至少三个节点;

2.5.2。 Galera

基于Galera的高可用MySQL集群,是一个多主数据同步的MySQL集群解决方案,简单易用,无单点故障,具有高可用性。常见架构如下:

优点:

多主写入,无延迟复制,保证数据强一致性;

是一个成熟的社区,互联网公司大规模使用;

自动错误转移,自动添加、删除节点;

缺点:

必须对原生 MySQL 节点使用 wsrep 更新

仅支持 innodb 存储引擎

最少三个节点;

2.5.3。 POAXS

Paxos算法解决的问题是分布式系统如何能够就某个值(分辨率)达成一致。该算法被认为是同类算法中最有效的。 Paxos和MySQL的结合可以实现分布式MySQL数据的强一致性。常见架构如下:

优点:

多主写入,无延迟复制,保证数据强一致性;

具有成熟的理论基础;

自动故障转移、自动添加和删除节点;

缺点:

仅支持innodb存储引擎

至少三个节点;

3.总结

随着人们对数据一致性的要求不断提高,越来越多的方法被尝试。解决分布式数据一致性问题,比如优化MySQL本身、优化MySQL集群架构、引入Paxos、Raft、2PC算法等。

利用分布式算法解决MySQL数据库数据一致性问题的方法比较多并更被人们所接受。 PhxSQL、MariaDB Galera Cluster、Percona XtraDB Cluster等一系列成熟产品越来越受欢迎。大规模使用。

随着MySQL Group Replication的正式GA,使用分布式协议解决数据一致性问题已经成为共同的方向。期待越来越多优秀的解决方案被提出,MySQL高可用问题能够得到更好的解决。

为什么分布式系统选择mysql数据库

分布式系统取决于是否支持事务。如果用于统计分析场景,则不需要支持交易。此时对于每个分布式节点来说,最好选择列式存储。选择mysql是一个错误,不适合分析。场景类型。

如果是事务性场景,并发数和数据量都非常大,需要分布式场景。数据按照一定的规则分布在不同的服务器(节点)上,每个节点都使用某种类型的行存储数据库。如果要满足需求,行存储数据库必须具备以下特征

1。支持交易;

2。支持高并发特性;

3。当你与分布式中间件通信时,它可以适应业务需求,根据需求,你可以做一些定制开发;

4。数据量增大,扩展时数据操作方便;

5。核心组件易于升级;

6。维护方便;

总结如前所述,mysql是目前最好的选择。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门