数据库高可用架构了解一下

看多了应用服务的高可用架构,咱们来看看数据库的高可用吧。mysql

数据存储高可用的方案本质都是经过将数据复制到多个存储设备,经过数据冗余的方式来实现高可用。常见的高可用架构有主备、主从、主主、集群、分区等,接下来咱们聊聊每种架构的优缺点。sql

主备架构

一、基本架构拓扑图以下 image数据库

总体架构简单,几乎全部的数据库都提供了主备复制的功能,例如Mysql、Oracle、MongoDB等。在这种架构中备库主要承担数据备份的做用,不参与实际业务读写操做,若是把备机改为主机须要人工操做。安全

二、优缺点分析 主备架构的优势就是简单,具体表现有:架构

  • 对于客户端来讲,不须要感知备机的存在,即便灾难恢复后,原来的备机被人工干预修改成主机,客户端只须要简单修改链接地址便可,应用架构不须要作任何改动;
  • 主机和备机只须要进行数据复制,不须要进行状态判断和主备切换这类复杂操做。

这种架构的缺点也比较明显:运维

  • 备机主要是用于数据备份,若是应用架构没有读写分离设计时会形成成本浪费
  • 故障后须要人工干预,没法自动恢复,而人工处理效率又比较低,恢复过程也容易出错。

主从架构

主从架构与主备架构只有一字之差,可是对于实际应用架构差距却很大。在主备架构中备库不参与业务操做,而在主从架构中从库是须要参与业务操做的,应用架构须要作读写分离,将写操做写入主库,而读操做从从库读。性能

一、主从基本架构拓扑图以下 image设计

二、优缺点分析 这种架构在少许写和大量读时很是有用。能够把读分摊到多个备库上,减小主库的压力,直到从库给主库形成了太大的负担,或者主从之间的带宽成为瓶颈为止。code

相比于主备架构,它有以下优势:blog

  • 在主库故障时,读操做相关业务能够继续运行
  • 从库对外提供读能力,发挥了硬件的性能
  • 能够为不一样的角色提供不一样的从库

缺点:

  • 主从架构中从库须要提供读业务,若是主从复制延迟大,数据会出现不一致状况;
  • 应用架构须要作修改,通常会加入读写分离,复杂度比主备高;
  • 故障后须要人工干预,没法自动恢复,而人工处理效率又比较低,恢复过程也容易出错。

主从切换

上面两种架构都存在两个共同问题:

  • 主库故障后,没法进行写操做
  • 主库出了问题后须要人工干预才能将从库切换到主库,而人工切换又可能出现不及时或者切换故障的问题。

基于以上两个问题咱们须要一个能自动切换的架构,当主库出了故障后能自动将从库切换成主库,无需运维人员干预。 要实现主从切换架构必需要考虑一个关键点:必需要有一个机制能监测到数据库节点的运行状态,以此来决定是否切换。 这种架构咱们通常会引入一个第三方中介,数据库节点定时向第三方中介汇报本身的状态信息;或者第三方中介定时去数据库节点拉取数据库状态; image

优势:

  • 解决了人工干预的问题,大大减小了故障时间,必定程度上保护了运维人员的人生安全 缺点:
  • 架构复杂,引入了第三方中介后又须要保证第三方中介的高可用。

这里推荐你们了解一下mysql的MHA架构,或者使用ZK、Keepalived本身搭建主从切换架构。

主主架构

主主架构又叫主主复制,两台数据库都是主库,互相将数据复制给对方,客户端能够挑选任意一台数据库进行读写操做。 image

相比于主从切换,主主架构有以下优势:

  • 两台数据库都是主库,不存在切换的概念
  • 客户端无需区分不一样角色的主机,随便将读写操做发给哪台数据库。
  • 架构简单

可是容许向两台主数据库写入是一件很危险的事:

  • AB两台数据库采用自增加主键,A库插入用户后id是1,B库插入用户后id也是1,数据冲突
  • 同时对数据库数据进行更新会出现大问题,加入AB库的表tb都有1个字段col,数值为1。如A库执行 update tb set col = col +1,B库执行update tb set col = col * 2,最终执行完一台数据的值变成了4,另外一台数据库的值变成了3,并且没有任何复制错误,一旦出了问题须要很久才能定位。 因此主主架构必需要保证数据可以双向复制,对数据的设计有严格的要求,通常适用于那些临时性,可丢失、可覆盖的数据场景。

欢迎关注个人我的公众号:JAVA日知录

相关文章
相关标签/搜索