加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

一文了解数据库高可用容灾方案的设计与实现

发布时间:2018-09-13 09:23:28 所属栏目:教程 来源:丁顺
导读:9月15日技术沙龙 | 与东华软件、AWS、京东金融、饿了么四位大咖探讨精准运维! 一个系统可能包含很多模块,如数据库、前端、缓存、搜索、消息队列等,每个模块都需要做到高可用,才能保证整个系统的高可用。对于数据库服务而言,高可用的实现可能更加复杂,
副标题[/!--empirenews.page--] 9月15日技术沙龙 | 与东华软件、AWS、京东金融、饿了么四位大咖探讨精准运维!

一个系统可能包含很多模块,如数据库、前端、缓存、搜索、消息队列等,每个模块都需要做到高可用,才能保证整个系统的高可用。对于数据库服务而言,高可用的实现可能更加复杂,对用户的服务可用,不仅仅是能访问,还需要有正确性保证,因此讨论数据库的高可用方案时,在容灾之外,还要同时考虑方案中数据一致性问题。

本文将通过介绍一些业界主流的数据库高可用架构、每种方案的特性和优缺点,以及数据库高可用架构的自动化运维实现,讲讲数据库高可用容灾方案设计与实现,希望抛砖引玉,和大家一起讨论。

一、高可用数据库概述

什么是高可用数据库?

高可用数据库是由一系列数据库构成的总体系统,在任何时刻,至少有一个节点可以接受用户的请求并提供数据库服务。大多数数据库架构中,有一个主节点处理主要请求,还有若干备用节点用于容灾切换,当主节点不能提供服务时,备用节点成为主节点继续提供服务,用以保证整个系统的可用和稳定。

一文了解数据库高可用容灾方案的设计与实现

高可用数据库有很多优点:

  • 第一,方便读写分离。数据库请求当中,一般读操作的请求次数远大于写操作,高可用数据库可以通过将写操作放在主数据库节点上进行,将读操作分担到若干从库上,来提升读操作吞吐量,进而提升读写效率;
  • 第二,变更不停服。当整个高可用数据库架构或者主节点升级时,可以让高可用数据库先进行主库切换,让备用节点替换原主节点提供数据库服务,当主节点升级完毕后,再将主从库服务切换回来,这样能有效避免系统升级或变更时对用户服务质量产生影响;
  • 第三,备份不影响服务性能。高可用数据库架构包含多个从库,在不影响主节点服务性能的情况下,能非常方便地实现数据的容灾备份。

一般,高可用数据库地架构设计时,也需要考虑三个问题:

  • 第一,如何同步各数据库之间的节点数据?同步需要保证切换后的数据库是最新数据,以及在切换过程中数据不会丢失,同时还要考虑同步过程对主库和备库的影响。
  • 第二,高可用数据库的容灾切换如何进行?架构不同容灾切换的复杂度也不一样,且切换以后需要保证主、从库数据的一致性,这可能需要开发者在设计之初就尽量优化和简化容灾切换逻辑。
  • 第三,如何提高高可用的运维效率?

二、业界典型高可用数据库架构

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

方案一:共享存储

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

一文了解数据库高可用容灾方案的设计与实现

这种方案的优点是没有数据同步的问题,但也有一些限制,如对于共享存储的实时性和网络性能有较高要求。因为共享存储一般是通过网络来访问存储当中的数据,在网络性能较差的情况下,数据库的性能也无法达到令人满意的效果。不过,随着硬件性能的不断提升,将计算存储分离、和DB深度结合的共享存储亦是高可用数据库未来发展的趋势之一。

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

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

一文了解数据库高可用容灾方案的设计与实现

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

方案三:数据库主从复制

这种方案我认为是最经典的数据同步模式,系统采用一个主库和多个从库方式,其实现原理主要是基于日志的主从复制,主库操作以日志的形式发送给各个从库,从库接收到日志后进行数据备份。这种方式的好处是一个主库可以连接多个从库,能很方便地实现读写分离,同时,因为每个备库都在运行中,所以备库里面的数据基本上都是热数据,容灾切换也非常快。

一文了解数据库高可用容灾方案的设计与实现

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

改进技术一:双主架构

问题:经典主从架构里面,原主库崩溃恢复的过程中,新的数据无法及时同步到该数据库当中,原主库恢复后,需要重新设置为从库,并将容灾过程中的数据重新同步进行。

改进措施:为了保证容灾后的数据一致性,业界对这种架构做了一些改进,其中一种改进措施就叫双主架构,如下图所示,双主架构一般会选择两个DB做一对主库,这两个DB之间互相为对方的从库,无论往哪个DB写入数据,另一个都会自动同步。容灾时系统只需要把流量从左边切换到右边,容灾后数据同步依旧自动进行,这样,就保证了容灾后原主库的数据一致性。

一文了解数据库高可用容灾方案的设计与实现

改进技术二:日志自动寻址

问题:容灾备份时,当某一从库提升为主库后,其他备库需要自动定位新主库的日志同步点,同步新主库的日志。早期数据库日志中,MySQL是通过文件名加上文件的偏移量进行寻址,因此,主库的自动定位并不好实现。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读