高可用数据库是由一系列数据库构成的总体系统,在任何时刻,至少有一个节点可以接受用户的请求并提供数据库服务。

高可用数据库的优点

第一,方便读写分离。

高可用数据库可以通过将写操作放在主数据库节点上进行,将读操作分担到若干从库上,来提升读操作吞吐量,进而提升读写效率。

1.读写分离其实就是将数据库分为了主从库,一个主库用于写数据,多个从库完成读数据的操作,主从库之间通过某种机制进行数据的同步,是一种常见的数据库架构。

2数据库分组架构解决什么问题?

大多数互联网业务,往往读多写少,这时候,数据库的读会首先称为数据库的瓶颈,这时,如果我们希望能够线性的提升数据库的读性能,消除读写锁冲突从而提升数据库的写性能,那么就可以使用“分组架构”(读写分离架构)。

用一句话概括,读写分离是用来解决数据库的读性能瓶颈的。

3.为什么不使用缓存呢?

缓存的使用成本要比从库少非常多;缓存的开发比较容易,大部分的读操作都可以先去缓存,找不到的再渗透到数据库。当然,如果我们已经运用了缓存,但是读依旧还是瓶颈时,就可以选择“读写分离”架构了。简单来说,我们可以将读写分离看做是缓存都解决不了时的一种解决方案。

当然,缓存也不是没有缺点的

对于缓存,我们必须要考虑的就是高可用,不然,如果缓存一旦挂了,所有的流量都同时聚集到了数据库上,那么数据库是肯定会挂掉的。

4.读写分离不使用的瓶颈

对于常见的数据库瓶颈是什么呢?

其实是数据容量的瓶颈。例如订单表,数据量只增不减,历史数据又必须要留存,非常容易成为性能的瓶颈,而要解决这样的数据库瓶颈问题,“读写分离”和缓存往往都不合适。

大部分的互联网业务,数据量都非常大,单库容量最容易成为瓶颈,当单库的容量成为了瓶颈,我们希望提高数据库的写性能,降低单库容量的话,就可以采用水平切分了。

而有少部分程序员,会没有分析数据库的性能瓶颈是什么,就贸贸然的使用“读写分离”,殊不知“水平切分”才是正道。

 

第二,变更不停服。

当整个高可用数据库架构或主节点升级时,可以让高可用数据库先进行主库切换,备用节点替换原主节点提供数据库服务,当主节点升级完毕后,再将主从库服务切换回来,这样能有效避免系统升级或变更时对用户服务质量产生影响。

第三,备份不影响服务性能。

高可用数据库架构包含多个从库,在不影响主节点服务性能的情况下,能非常方便地实现数据的容灾备份。

 

典型高可用数据库架构

按照数据同步方式,可以将业界主流高可用架构分为四种:共享存储方案、操作系统实时数据块复制、数据库级别的主从复制、高可用数据库集群。每一种数据同步方式可以衍生出不同架构。

方案一:共享存储

共享存储指若干DB服务使用同一份存储,一个为主DB,其它为备用DB。若主服务崩溃,则系统启动备用DB,成为新的主DB,继续提供服务。一般共享存储采用比较多的是SAN/NAS方案。

 

数据库高可用方案

(图:共享存储)

虽然该方案的优点是没有数据同步的问题,但也有一些限制,如对于共享存储的实时性和网络性能有较高要求。而随着硬件性能的不断提升,将计算存储分离、和DB深度结合的共享存储亦是高可用数据库未来发展趋势之一。

 

方案二:操作系统实时数据块复制

 

这一方案的典型场景是DRBD,可以理解为远程的RAID1。如下图所示,左侧数据库写入数据以后,立即同步到右侧的存储设备当中。如果左边数据库崩溃,系统可以直接**右边的数据库存储设备,启动新的数据库服务,实现容灾切换。

数据库高可用方案

(图:操作系统实时数据块复制)

 

这个方案的缺点也比较明显,如系统只能有一个数据副本提供服务,无法实现读写分离;另外,如果系统崩溃,主库进程中断,容灾切换后需要在挂掉的数据库上做数据库崩溃恢复,系统需要的容灾恢复时间较长。

 

方案三:数据库主从复制

 

这种方案是最经典的数据同步模式,系统采用一个主库和多个从库方式,实现原理主要是基于日志的主从复制,主库操作以日志的形式发送给各个从库,从库接收到日志后进行数据备份。

优点是一个主库可以连接多个从库,能很方便地实现读写分离,同时因为每个备库都在运行中,所以备库里的数据基本都是热数据,容灾切换也非常快。

不过,这个方案也并非完美无缺,如容灾切换时,从库一定要同步完最新数据以后才能升级为主库,否则极有可能导致数据丢失。针对这些问题,业界也正在研发对应的改进技术。

方案四:数据库高可用集群

前三种方案主要通过日志的复制模式实现高可用,第四种方案则基于一致性算法来做数据同步,数据库提供多节点一致性同步机制,利用该机制构建多节点同步集群。这种方式比较经典的案例包括MGR(MySQL Group Replication)和Galera等,近期业内也有一些类似尝试,如使用一致性协议算法,自研高可用数据库架构等。

 

数据库高可用方案

(图:数据库高可用集群)

 

如上图所示,五个节点构建成了一个一致性的同步集群,客户端可以读写其中的任一节点,其它节点都能进行数据同步,因此理论上每个节点都可以进行读写操作。这种方式的容灾实现也比较简单,假设第二个节点出现故障,系统只需要断开客户端对第二个节点的访问路径,其它节点照常访问即可,这也是业界近年来比较流行的高可用集群方案。

参考:https://baijiahao.baidu.com/s?id=1610050327068432075&wfr=spider&for=pc

 

相关文章: